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