KNN K近鄰 分類演算法

2022-08-19 17:12:10 字數 1714 閱讀 2830

knn演算法是機器學習中最基本演算法之一,屬於惰性學習演算法的典例。惰性指模型僅通過對訓練資料集的記憶功能進行**,而不產生判別函式。

knn演算法本身很簡單,歸納為如下幾步:

①選擇近鄰數量k和距離度量的方法

②找到待分類樣本的k個最近鄰

③根據最近鄰類標進行多數投票

k近鄰演算法的k,近鄰個數。

一般的根據經驗k=5是最能得到最佳效果的點,但在實際開發過程中需要進行驗證。

強調一點,如果在1到10中求得最佳k值為10,那麼有必要對10以上的值選擇區間再進行測試,因為可能含有效果更好的k值。

基本的knn演算法僅僅通過找到待分類樣本最近的k個樣本進行多數投票,但可能存在如下情況:

如果按照投票的方式,應該分為藍色類別,但從距離上看,樣本距離紅色類別更近,劃為紅色似乎更加合理,這裡就需要引入距離權重的概念。

在kneighborsclassifier中有乙個引數weight,不指定該引數的情況下預設為uniform也就是多數投票,也可以指定weight為distance,即可採用距離權重的方式進行分類。

分類時候使用的距離是什麼距離?距離的種類有很多,最常見的有歐氏距離,此外還有曼哈頓距離。

如圖給出的綠色的直線就是歐式距離,其他的線雖然走法不同但距離是一樣的,都是曼哈頓距離。

當p為1時,等價於曼哈頓距離,p=2時等價於歐氏距離。當p>2時,基於minkowski距離計算。

knn演算法複雜度較高,可以使用樹結構優化,如kd-tree、ball-tree等高效尋找近鄰。

假如乙個資料集有m個樣本n中特徵,則**乙個樣本的時間複雜度為o(mn),即需要和m個樣本求距離並挑選前k個,每個特徵維度都需要計算距離,故需要o(mn)。可以使用樹結構優化,如kd-tree、ball-tree等。

隨著維數增加,看似很近的兩個點距離越來越大。

一般調整'n_neighbors', 'weights' 和 'p'即可。

#knn網格搜尋

knears_params = 

grid_knears = gridsearchcv(kneighborsclassifier(n_jobs=-1), knears_params, scoring='

roc_auc

', n_jobs=-1)

grid_knears.fit(x_train, y_train)

knears_neighbors =grid_knears.best_estimator_

print

(knears_neighbors)

knears_score = cross_val_score(knears_neighbors, x_train, y_train, cv=5, scoring='

roc_auc')

knears_neighbors.fit(x_train,y_train)

print('

knears neighbors cross validation auc score

', knears_score.mean().astype(str)[:4],

'and test auc score

', roc_auc_score(y_test, knears_neighbors.predict_proba(x_test)[:, 1])astype(str)[:4])

KNN k近鄰演算法

現在假如我們已經擁有了一些資料 稱為訓練資料集 ts,並且擁有所有資料的類別名 即每條資料應該歸於哪個類別。當我們要判斷一條不知類別的資料時,首先讓這條資料m和已經擁有的所有的資料ts中的每一條資料進行比較,然後根據比較結果選擇出和m最相似 一般是基於距離 的k條資料 k是個整數,並且通常是小於20...

kNN(k近鄰演算法)

k近鄰分析 knn 一 概述 knn演算法是一種有監督學習的分類演算法。所謂有監督學習,就是在應用演算法之前我們必須準備一組訓練集,訓練集中的每個例項都是由一些特徵和乙個分類標籤組成 通常還會存在乙個測試集,用來測試訓練出來的分類模型的準確性。其實knn演算法並沒有體現出有監督學習的所有特點,沒有模...

kNN k近鄰演算法

一 knn演算法的思想 knn演算法作為機器學習演算法中非常有效比較容易掌握的演算法,其基本思想是採用測量不同特徵值之間的距離的方法進行分類。knn屬於監督學習演算法,它的工作原理是 存在乙個樣本資料集,訓練樣本集,並且樣本集中的每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類的對應關係。...