機器學習分類演算法(一)k NN分類演算法

2021-09-29 12:00:54 字數 2304 閱讀 8372

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...