KNN算法是采用測量不同特征向量之間的距離的方法進行分類。
工作原理:存在一個數據集,數據集中的每個數據都有對應的標簽,當輸入一個新的沒有標簽的數據時,KNN算法找到與新數據特征量最相似的分類標簽。
KNN算法步驟:
(1)選擇鄰近的數量k和距離度量方法;
(2)找到待分類樣本的k個最近鄰居;
(3)根據最鄰近的類標進行多數投票。

KNN算法優點:精度高,對異常值不敏感,無數據輸入假定;
缺點:計算復雜度高,空間復雜度高。
適用范圍:數值型、標稱型
python 代碼:
KNeighborsClassifier中的參數
| 參數 | 含義 |
| n_neighbors | k值,默認為5 |
| weights | k個近鄰樣本的權重。可選值:uniform、distance,默認為uniform。 uniform:所有最近鄰樣本權重一樣; distance:權重和距離成反比; 還可以自定義權重,即自定義一個函數,輸入距離值,輸出權重值。 |
| algorithm | 算法,可選值:'auto', 'ball_tree', 'kd_tree', 'brute'。 'ball_tree':球樹實現 'kd_tree':KD樹實現 'brute’:蠻力實現 'auto':會在上述三種算法中做權衡,選擇一個擬合最好的最優算法。 |
| leaf_size | 用於控制KD樹或球樹停止建子樹的葉子節點閾值,默認為30。這個值越小,生成的KD樹或球樹越大,層數越深,耗時越長。 隨着樣本的增加,這個值要增加。 |
| metric | 距離度量,默認為'minkowski' 即閔可夫斯基距離。 |
| p | 距離度量參數metric附屬參數,只用於'minkowski'中p值的選擇,p=1,位曼哈頓距離,p=2位歐式距離,默認為2。 |
| metric_params | 距離度量的其他附屬參數,主要用於帶權重閔可夫斯基距離的權重,以及其他一些復雜的距離度量的參數。 |
| n_jobs | 並行處理任務數,默認值為1。 |
#KNN
1 import numpy as np 2 import pandas as pd 3 from sklearn.neighbors import KNeighborsClassifier 4 df=pd.read_csv(r'E:\data analysis\test\classification.csv')#訓練數據集 5 df_test=pd.read_csv(r'E:\data analysis\test\classification_test.csv')#測試數據集 6 x=df.ix[:,:-1] #特征值 7 y=df.ix[:,-1] #目標變量 8 knn=KNeighborsClassifier(n_neighbors=5) #取得knn分類器 9 knn.fit(x,y) #導入數據進行訓練 10 print(knn.predict (df_test)) #對新數據進行分類
