機器學習之KNN演算法(B站學習總結)

2021-10-23 06:23:05 字數 2206 閱讀 8175

knn簡介

為了判斷未知例項的類別,以所有已知類別的例項作為

參照選擇引數k

計算未知例項與所有已知例項的距離(歐式距離)

選擇最近k個已知例項

根據少數服從多數的投票法則(majority-voting) ,讓

未知例項歸類為k個最鄰近樣本中最多數的類別

演算法缺點:

演算法複雜度較高(需要比較所有已知例項與要分類的例項)

當其樣本分佈不平衡時,比如其中一類樣本過大(例項數量

過多)佔主導的時候,新的未知例項容易被歸類為這個主導

樣本,因為這類樣本例項的數量過大,但這個新的未知例項

實際並沒有接近目標樣本

演算法實踐

首先進行資料視覺化,資料集分為a,b兩類,然後通過計算歐氏距離**未知x的類別

資料視覺化:

import matplotlib.pyplot as plt

import numpy as np

import operator

#已知類a,b的資料

x1 = np.array([3,2,1])

y1 = np.array([104,100,81])

x2 = np.array([101,99,98])

y2 = np.array([10,5,2])

scatter1 = plt.scatter(x1,y1,c='r')

scatter2 = plt.scatter(x2,y2,c='b')

#未知x

x = np.array([18])

y = np.array([90])

scatter3 = plt.scatter(x,y,c='k')

#畫圖例

plt.legend(handles=[scatter1,scatter2,scatter3],labels=['a類','b類','未知x'],loc='best')

plt.show()

knn**:

import matplotlib.pyplot as plt

import numpy as np

import operator

# 已知分類的資料

x_data = np.array([[3,104],

[2,100],

[1,81],

[101,10],

[99,5],

[81,2]])

y_data = np.array(['a','a','a','b','b','b'])

x_test = np.array([18,90])

# 計算樣本數量

x_data_size = x_data.shape[0]

# 複製x_test

np.tile(x_test, (x_data_size,1))

# 計算x_test與每乙個樣本的差值

diffmat = np.tile(x_test, (x_data_size,1)) - x_data

# 計算差值的平方

sqdiffmat = diffmat**2

# 求和

sqdistances = sqdiffmat.sum(axis=1)

# 開方

distances = sqdistances**0.5

# 從小到大排序

sorteddistances = distances.argsort()

classcount = {}

# 設定k

k = 5

for i in range(k):

# 獲取標籤

votelabel = y_data[sorteddistances[i]]

# 統計標籤數量

classcount[votelabel] = classcount.get(votelabel,0) + 1

# 得到的classcount為,也有可能多的不在前面,所以需要排序

# 根據operator.itemgetter(1)-第1個值對classcount排序,然後再取倒序

sortedclasscount = sorted(classcount.items(),key=operator.itemgetter(1), reverse=true)

# 獲取數量最多的標籤

knnclass = sortedclasscount[0][0]

**:

機器學習之KNN演算法

在幾位志同道合的小夥伴的帶領下,開始了機器學習的路程,然而一切並不是想象的那麼簡單,因此本文記錄了自己的學習路程,希望還能堅持做好這件事。knn演算法是機器學習中屬於比較簡單的演算法,容易理解和閱讀。1.knn的應用 客戶流失 欺詐偵測等 更適合於稀有事件的分類問題 2.優缺點 優點 這是乙個簡單有...

機器學習演算法之KNN

物以類聚 人以群分,乙個例項與它周圍的例項屬於同一類的概率較大。給定乙個訓練資料集,對新輸入的例項,在訓練資料集中找到與該例項最鄰近的k個例項,這k個例項的多數屬於某個類,就把該輸入例項分為這個類。這裡,選用了歐氏距離,k的預設值為3,使用了sklearn提供的digits資料集來進行測試。inpu...

機器學習之kNN演算法

knn原理及實踐 1 演算法介紹 總的來說,機器學習入門的第乙個演算法是k 近鄰演算法 knn 它的工作原理是 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進...