KNN演算法的最簡解釋
阿新 • • 發佈:2018-11-24
KNN是屬於監督學習中的一類分類方法,KNN即k最鄰近分類演算法
1、KNN演算法的核心思路
通過計算每個訓練樣本到待分類樣本的距離【1】,取和待分類樣本最近的k個訓練樣例【2】,k個樣本中哪個類別的訓練樣例站多數,則待分類樣品就屬於哪個類別。
【1】這裡的距離有很多中,例如有曼哈頓距離(p=1),歐式距離(p=2)等,大家可以去查一下各種距離的應用場景有何不同;
【2】這裡取的最近的k個訓練樣例便是,KNN演算法的精髓了,因為通過選取不同的k值會有不同的結果。
2、演算法描述與具體步驟
(1)算距離
(2)對距離排序,並圈出最近的k個訓練物件
(3)做分類
具體步驟:
step.1—初始化距離為最大值
step.2—計算未知樣本和每個訓練樣本的距離 dist
step.3—得到目前K個最臨近樣本中的最大距離 maxdist
step.4—如果dist 小於 maxdist,則將該訓練樣本作為 K-最近鄰樣
step.5—重複步驟2、3、4,直到未知樣本和所有訓練樣本的距離
step.6—統計K-最近鄰樣本中每個類標號出現的次數
step.7—選擇出現頻率最大的類標號作為未知樣本的類標號
3、KNN模型中三個基本要素
三個基本要素:距離度量、k值的選擇和分類決策的規程
4、演算法的優缺點
1) 優點
簡單,易於理解,易於實現,無需估計引數,無需訓練;
適合樣本容量比較大的分類問題
特別適合於多分類問題(multi-modal,物件具有多個類別標籤),例如根據基因特徵來判斷其功能
分類,kNN比SVM 的表現要好
2) 缺點
懶惰演算法,對測試樣本分類時的計算量大,記憶體開銷大,評分慢;
可解釋性較差,無法給出決策樹那樣的規則
5、例項—–對電影型別進行分類
import numpy as np
from sklearn import neighbors
knn = neighbors.KNeighborsClassifier() #取得knn分類器
data = np.array([[3,104],[2,100],[1,81],[101,10],[99,5],[98,2]]) # <span style="font-family:Arial, Helvetica, sans-serif;">data 對應著
打鬥次數和接吻次數<`這裡寫程式碼片`/span>
labels = np.array([1 ,1,1,2,2,2]) #<span style="font-family:Arial, Helvetica, sans-serif;">labels則是對應Romance 和Action</span>
knn.fit(data,labels) #匯入資料進行訓練'''