k
kk-nn分類器是最簡單的機器學習分類演算法之一,它的基本思想是:從訓練樣本集中找出與測試樣本「距離」最近的k個樣本作為此測試樣本的「鄰居」,然後根據這k個樣本的類別基於一定規則進行投票表決,最高的決定為測試樣本的**類別。用乙個詞來說就是「近朱者赤近墨者黑」。
由以上所述可以得知,k近鄰分類演算法主要涉及3個因素:
該演算法的決策結果僅依賴於距離最近的k個「鄰居」的類別。
如圖所示的例子中,為方便展示我們所選取的均為二維的資料樣本。圖中橙色正方形為測試樣本,綠色圓圈和藍色三角形均為已知分類的樣本,即訓練樣本。
分類過程如下:
如本例所示,當選定k=3時,藍色三角形有2個,佔比例2/3,綠色圓圈有1個,佔比例1/3。所以由簡單投票表決的話,將橙色方塊與藍色三角形分為同一類。但是當選定k=5時,藍色三角形有2個,佔比例2/5,綠色圓圈有3個,佔比例3/5。所以由簡單投票表決的話,將橙色方塊與綠色圓圈分為同一類。可以看出當k的值選擇不同時,分類結果也會因此發生變化,k近鄰分類器的分類結果很大程度上依賴於k的選擇。
k近鄰分類器中的距離一般選擇歐式距離ded_
de或者曼哈頓距離dmd_
dm。
d e=
∑(xk
−yk)
2)d_ = \sqrt-y_)^)}
de=∑(
xk−
yk)
2)dm=
∑∣xk
−yk∣
d_ = \sum \left | x_-y_ \right |
dm=∑∣
xk−
yk∣
def
knn(k, test_x, train_x, train_y)
: knc = kneighborsclassifier(n_neighbors=k)
knc.fit(train_x, train_y)
y_predict = knc.prefict(test_x)
return y_predict
上邊為直接引用了python的sklearn庫里的neighbors.kneighborsclassifier函式,其中test_x為測試樣本資料,k為設定的鄰居個數,train_x為訓練樣本資料,train_y為訓練樣本標籤,返回值y_predict為**的測試樣本標籤。下邊手寫一下:
# k為鄰近的樣本點數量
defknn
(test_x,k)
: predy =
i=0for x in test_x:
i+=1# 計算樣本點訓練集的歐氏距離
distance =
[np.
sum(np.power(x_train - x,2)
)for x_train in trainx]
# 按照每個數的索引位置來從小到大排序
indexsort = np.argsort(distance)
# 獲得距離樣本點最近的k個點的標記值y
neark_y =
[trainy[i]
for i in indexsort[
:k]]
# print('it is neark_y',neark_y)
# 統計鄰近k個點標記值的數量
cnty = collections.counter(neark_y)
# 返回標記值最多的那個標記
y_predict = cnty.most_common(1)
[0][
0]# print( i ,'-------', cnty,y_predict)
#把標記值最多的標記加入predy陣列
return predy
(1) 優點:相對於其他演算法較為簡單,可以很容易的實現。不需要在**前對模型進行訓練,除了k以外沒有別的引數需要估計,並且對於多分類問題可以取得不錯的效果。
(2) 缺點:不需要在**前對模型進行訓練同樣也是k近鄰分類器的缺點,這樣決定了k近鄰分類屬於「懶惰學習」[1]。對於每乙個測試樣本都需要重新算一遍到所有訓練樣本的距離,計算量大,消耗時間久,記憶體開銷也跟著變大。當樣本每一類的數量分布不均勻時,可能會導致輸入乙個待分類樣本時,某一類數量非常多的樣本佔大多數導致分類精度下降,但是此缺點可以用加權投票表決的方法進行改進,即設定距離近的權值大。
[1] 周志華.機器學習[m].北京:清華大學出版社,2016
機器學習 K NN分類
一 定義 1 k nn分類全稱為k近鄰法 k nearest neighbor 是一種基本回歸與分類方法 給定乙個訓練資料集,對新的輸入例項,在訓練資料集中找到與該例項最近的k個例項,這k個例項中多數例項屬於某一類,就把該輸入例項分為這一類。2 好比說,你周圍的同學大都是些好學生,你也會被認為是好學...
python 機器學習KNN分類演算法
k近鄰演算法是機器學習中最簡單的演算法,其可以做最基本的分類操作,偽 如下 對未知類別屬性的資料集中的每個點依次執行以下操作 1 計算已知類別資料集中的每個點與當前點之間的距離 2 按照距離遞增次序排序 3 選怒與當前點距離最小的k個點 4 確定前k個點所在類別出現的頻率 5 返回前k個點出現頻率最...
機器學習 KNN分類演算法(上)
k近鄰演算法是機器學習演算法最簡單的演算法,流程如下 1 計算測試物件到訓練集中每個物件的距離 2 按照距離的遠近排序 3 選取與當前測試物件最近的k個物件,作為該測試物件的鄰居 4 統計這k個鄰居的類別頻率 5 k個鄰居裡頻率最高的類別,即為測試物件的類別 1 自實現knn演算法import nu...