[python機器學習及實踐(3)]Sklearn實現K近鄰分類


1.KNN算法介紹

KNN算法的思想:在訓練集中數據和標簽已知的情況下,輸入測試數據,將測試數據的特征與訓練集中對應的特征進行相互比較,找到訓練集中與之最為相似的前K個數據,則該測試數據對應的類別就是K個數據中出現次數最多的那個分類。

其算法的描述為:

1)計算測試數據與各個訓練數據之間的距離;

2)按照距離的遞增關系進行排序;

3)選取距離最小的K個點;

4)確定前K個點所在類別的出現頻率;

5)返回前K個點中出現頻率最高的類別作為測試數據的預測分類。

2.例子:KNN實現鳶尾數據集分類

鳶尾數據集一共有150個數據樣本,並且均勻分布在3個不同的亞種;每個數據樣本被4個不同的花瓣、花萼的形狀特征所描述。

數據集包含了三類分別為:setosa, versicolor, virginica

數據集測量了所有150個樣本的4個特征,分別是:

  1. sepal length(花萼長度)
  2. sepal width(花萼寬度)
  3. petal length(花瓣長度)
  4. petal width(花瓣寬度)

以上四個特征的單位都是厘米(cm)

樣本特征:

 

[5. 2.3 3.3 1. ]
[4.9 3.1 1.5 0.1]
[6.3 2.3 4.4 1.3]
[5.8 2.6 4. 1.2]
[6.2 2.9 4.3 1.3]
[4.7 3.2 1.3 0.2]
[4.6 3.4 1.4 0.3]

。。。。

標簽:0,1,2

 

代碼:

#coding=utf-8
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report

#1.數據獲取
iris = load_iris()
print iris.data.shape

#2.數據預處理:訓練集測試集分割,數據標准化
X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.25,random_state=33)

# 對訓練和測試的特征數據進行標准化
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)

# 3.使用K臨近分類器對測試數據進行類別預測
knc = KNeighborsClassifier()
knc.fit(X_train,y_train)
y_predict = knc.predict(X_test)

#4.獲取結果報告
print 'The Accuracy of K-Nearest Neighbor Classifier is', knc.score(X_test,y_test)
print classification_report(y_test,y_predict,target_names=iris.target_names)

結果:

特點:K近鄰模型沒有參數訓練過程,而是根據測試樣本在訓練數據的分布直接作出分類決策。
缺點是非常高的計算復雜度和內存消耗:需要遍歷每個訓練樣本、逐一計算相似度並排序。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM