KNN分類演算法 Python3 6實現

2021-10-06 06:27:27 字數 3646 閱讀 9360

k-nearest neighbor(knn)分類演算法的思路:

**乙個新的值x的類別時,根據它距離最近的k個點是什麼類別來判斷x屬於哪個類別。距離的計算方法通常為歐氏距離、曼哈頓距離等。

如圖所示,綠色方框為新的數值,要對其進行分類,當k=3時,距離綠色方塊的三個點中藍色三角形數量最多,所以綠色方塊被分到藍色三角形的類別中;當k=5時,距離綠色方塊最近的5個點中,紅色圓形的數量最多,所以綠色方塊被分到紅色圓形的類別。

優點:演算法簡單,易於實現,無需估計引數(非參演算法)

缺點:資料量大時,對記憶體要求較高,**階段計算耗時

用sklearn自帶的資料集來呼叫模型做分類**

from sklearn import datasets #datasets是sklearn自帶的資料集群

from sklearn.model_selection import train_test_split

from sklearn.neighbors import kneighborsclassifier

iris = datasets.load_iris(

)#用datasets自帶的iris資料集

iris_x = iris.data #花的特性:花瓣的長寬高等屬性

iris_y = iris.target #花的類別

print

(iris_x[:5

])#花瓣的四個特性[[

5.13.5

1.40.2][

4.93

.1.4

0.2]

[4.7

3.21.3

0.2]

[4.6

3.11.5

0.2][5

.3.6

1.40.2]]

print

(iris_y)

#花的分類,有0,1,2三種[0

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0111

1111

1111

1111

1111

1111

1111

1111

1111

1111

1111

1111

1112

2222

2222

2222

2222

2222

2222

2222

2222

2222

2222

2222

2222

2]x_train, x_test, y_train, y_test = train_test_split(iris_x, iris_y, test_size =

0.3)

#劃分訓練集和測試集,test_size = 0.3是測試資料佔總資料的30%

kneighbor = kneighborsclassifier(n_neighbors =3)

#呼叫knn演算法,臨近數k=3

kneighbor.fit(x_train, y_train)

#用訓練集資料訓練模型

result = kneighbor.predict(x_test)

#用訓練好的模型做**[0

1211

1012

2222

1022

0122

0002

0021

2100

1112

0020

2111

]print

(kneighbor.score(x_test, y_test)

)#檢視**的準確率

0.9555555555555556

kneighborsclassifier(n_neighbors=

3, weights=』uniform』, algorithm=』auto』, leaf_size=

30, p=2)

n_neighbors: 取離測試資料最近的k個點,預設值為5。

weight:一般的情況下預設k個點的權重相等,但有時k近鄰點權重並不相等,可能近的點權重大。預設值為uniform,還可以是distance和自定義函式。

'uniform':表示所有點的權重相等

'distance':表示權重是距離的倒數

algorithm:計算找出k近鄰點的演算法

'ball_tree':使用balltree維數大於20時建議使用

'kd_tree':使用kdtree,在維數小於20是效率高

'brute':暴力演算法,線性掃瞄

'auto':自動選取最合適的演算法

leaf_size:int,預設值為30,用於構造balltree和kdtree

p:預設值為2

1:使用曼哈頓距離

2:使用歐式距離

在kneighborsclassifier模型中,最重要的引數是n_neighbor也就是k值,改變這個引數的取值畫出學習曲線,看k值取多少時,模型的準確率最高

from sklearn.neighbors import kneighborsclassifier

from sklearn.model_selection import cross_val_score #交叉驗證模組

import matplotlib.pyplot as plt

from sklearn import datasets

iris = datasets.load_iris(

)iris_x = iris.data

iris_y = iris.target

#構造學習曲線

k_range =[1

,30]k_scores =

for k in k_range:

knn = kneighborsclassifier(n_neighbors = k)

scores = cross_val_score(knn, iris_x, iris_y, cv =

10, scoring =

'accuracy'

)#把資料集等分成10個小的資料集,訓練其中9個小資料集,形成9個訓練模型,用這9個訓練模型**1個為訓練的資料集,最後有9個**結果))

plt.plot(k_range, k_scores)

#k_range為橫座標, k_scores為縱座標

plt.xlabel(

'k value'

)#橫座標標題

plt.ylabel(

'accuracy'

)#縱座標標題

從圖中可以看出k的最佳值在13~17區間內,如果k取值超過這個區間,可能產生過擬合或者欠擬合。

↩︎

多標記KNN演算法實現(Python3 6)

對於乙個新例項,取其最近的k個例項,然後得到由k個例項組成的標籤集合,最後通過先驗概率與最大後驗概率來確定新例項的標籤集合。詳細的內容參看周志華老師與張敏靈老師的 多標記學習 演算法實現 資料預處理 mlknndemo.py load file data sio.loadmat scene.mat ...

Python 實現 KNN 分類演算法

2.python 實現 本文將詳細講述 knn 演算法及其 python 實現 knn k nearest neighbour 即 k最近鄰,是分類演算法中最簡單的演算法之一。knn 演算法的核心思想是如果乙個樣本在特徵空間中的 k 個最相鄰的樣本中的大多數屬於某乙個類別,則將該樣本歸為該類別 有 ...

python實現KNN分類演算法

k近鄰演算法,簡稱knn演算法,作用就是分類 三大要素 import numpy import matplotlib.pyplot as plt 已知訓練集和訓練集類別 測試集 1.測試集廣播和訓練集一樣的規格 2.計算距離 3.對距離列表排序返回最近的k個點的下標 4.有幾個類別就設幾個標籤用來統...