KNN概念
kNN算法又稱為k最近鄰(k-nearest neighbor classification)分類算法。所謂的k最近鄰,就是指最接近的k個鄰居(數據),即每個樣本都可以由它的K個鄰居來表達。
kNN算法的核心思想是,在一個含未知樣本的空間,可以根據離這個樣本最鄰近的k個樣本的數據類型來確定樣本的數據類型。
該算法涉及3個主要因素:訓練集、距離與相似的衡量、k的大小;
算法步驟:
算法步驟:
step.1---初始化距離為最大值
step.2---計算未知樣本和每個訓練樣本的距離dist
step.3---得到目前K個最臨近樣本中的最大距離maxdist
step.4---如果dist小于maxdist,則將該訓練樣本作為K-最近鄰樣本
step.5---重復步驟2、3、4,直到未知樣本和所有訓練樣本的距離都算完
step.6---統計K-最近鄰樣本中每個類標號出現的次數
step.7---選擇出現頻率最大的類標號作為未知樣本的類標號
KNN的實現
選用“鳶尾”數據集來實現KNN算法
#從sklearn.datasets導入iris導入數據
from sklearn.datasets import load_iris
#使用加載器i讀取數據并且存入變量中
iris=load_iris()
#查看數據規模
print(iris.data.shape)
#查看數據說明
print(iris.DESCR)
#數據分割25%用于測試
#導入 train_test_split用于數據分割
from sklearn.cross_validation import train_test_split
#從使用train_test_split,利用隨機種子random_state采樣25%的數據作為測試集
X_train,X_test,Y_train,Y_test=train_test_split(iris.data,iris.target,test_size=0.25,random_state=33)
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
#對數據進行標準化處理
ss=StandardScaler()
X_train=ss.fit_transform(X_train)
X_test=ss.transform(X_test)
#使用K近鄰分類器對測試數據進行類別預測,預測結果儲存在變量y_predict中
knc=KNeighborsClassifier()
knc.fit(X_train,Y_train)
y_predict=knc.predict(X_test)
#使用模型自帶的評估函數進行準確性評測
print('The accuracy of K-nearest Neighbor Classifier is ',knc.score(X_test,Y_test))
#對預測結果進行分析
from sklearn.metrics import classification_report
print(classification_report(Y_test,y_predict,target_names=iris.target_names))
數據說明如下:
鳶尾數據說明
結果如下:
預測性能評估
注:部分資料參考自范淼 李超《Python機器學習及實踐》清華大學出版社 ,感謝!