1. 程式人生 > >K近鄰分類演算法

K近鄰分類演算法

K最近鄰(k-Nearest Neighbor,KNN)分類演算法,是一個理論上比較成熟的方法,也是最簡單的機器學習演算法之一。該方法的思路是:如果一個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。
下面以比較著名的鸞尾花(Iris)資料集舉例,講解K近鄰演算法
首先我們先匯入資料

from sklearn.datasets import load_iris
iris = load_iris()
print(iris.data.shape)
print(iris.data)

在這裡插入圖片描述
可以看到Iris資料集共有150朵鸞尾花的樣本,因為沒有測試資料,所以我們隨機採用其中75%的資料作為訓練資料,採用剩餘的25%的資料作為測試資料
下面對Iris資料集進行分割

from sklearn.cross_validation import train_test_split
X_train,X_test,Y_train,Y_test = train_test_split(iris.data,iris.target,test_size=0.25,random_state=33)

分割完成後,到了訓練部分,這裡我們使用K近鄰分類器對鸞尾花的資料進行類別預測

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)

knc = KNeighborsClassifier()
knc.fit(X_train,Y_train)
Y_predict = knc.predict(X_test)

將預測結果存在Y_predict中
在這裡插入圖片描述
最後我們使用模型自帶的評估函式對K近鄰分類器在鸞尾花資料上的預測效能進行評估


可以看到,K近鄰分類器對38條鸞尾花測試樣本的準確性約為89.47%,平均精確率、召回率以及F1指標分別為0.92、0.89、0.90.

K近鄰演算法模型沒有引數訓練過程,也就是說,該模型並沒有通過任何學習演算法分析訓練資料,而是隻是根據測試樣本在訓練資料的分佈直接做出分類決策。因此,K近鄰屬於無引數模型中非常簡單的一種。