一文搞懂KNN算法原理


什么是KNN算法 ?

KNN的全稱是K Nearest Neighbors,通常翻譯為K最鄰近算法。是最基礎的一個分類算法。本文以 iris 鳶(yuan)尾花數據集為例詳細說明到底什么是KNN算法。

表征空間(特征空間)

在講解KNN算法之前,首先要給大家科普幾個基礎概念。有了這幾個概念我們再學習KNN算法就容易多了。

1、特征參數

2、表征空間(特征空間)

3、特征描述

特征參數比較容易理解,就是描述一個事物的有關參數。在iris鳶尾花數據集中就是iris.feature_names:sepal length (cm):花瓣長度;sepal width (cm):花瓣寬度;petal length (cm):萼片長度; petal width (cm):萼片寬度。

為了防止有人不明白這幾個名詞什么意思,我一個理工直男搞來了下面這張圖。大家再復習一下中學的生物知識。

把這四個參數合起來,就成為一個描述鳶尾花的表征空間(特征空間)。其數學描述為:【花瓣長度,花瓣寬度,萼片長度,萼片寬度】。我們可以根據該特征空間對鳶尾花進行描述,並進行后續的統計分類。

iris 數據集中包含了三種鳶尾花類型,分別是:0 Setosa 山鳶尾、 1 Versicolor 變色鳶尾、 2 Virginica 維吉尼亞鳶尾。

 

在這里我們應該可以看出來了,其實描述鳶尾花的這四個參數,是前面兩個一組描述花瓣,后面兩個一組描述萼片。而參數1:花瓣長度和參數4:萼片寬度沒有太大關系,參數2:花瓣寬度和參數3:萼片長度也沒有太大關系。但是,我們根據這四個參數就可以對鳶尾花進行一個比較完整的描述。

# 導入 iris 數據集
from sklearn.datasets import load_iris

# 加載 iris 數據集
iris = load_iris()

X,Y = iris.data, iris.target

A = X[:,0]
B = X[:,1]
C = X[:,2]
D = X[:,3]

plt1.scatter(A[0:50], B[0:50], c = 'r')
plt1.scatter(A[50:100], B[50:100], c = 'g')
plt1.scatter(A[100:150], B[100:150], c = 'b')

plt2.scatter(C[0:50], D[0:50], c = 'r')
plt2.scatter(C[50:100], D[50:100], c = 'g')
plt2.scatter(C[100:150], D[100:150], c = 'b')

花瓣特征:                                  萼片特征:

其中紅色為類別0:山鳶尾,綠色為類別1:變色鳶尾;藍色為類別2:維吉尼亞鳶尾

我們可以看到不同類別的鳶尾花,其數據特征是不一樣的。也就是它們的表征空間描述是不同的。

在這里,我們應該大致明白特征參數和表征空間大概是怎么一個回事了。

KNN算法原理

在這里,我們再講解KNN算法就比較容易了。KNN算法就是在其表征空間中,求K個最鄰近的點。根據已知的這幾個點對其進行分類。

如果其特征參數只有一個,那么就是一維空間。

如果其特征參數只有兩個,那么就是二維空間。

如果其特征參數只有三個,那么就是三維空間。

如果其特征參數大於三個,那么就是N維抽象空間。

在表征空間中,不同點的距離采用如下所示的歐幾里得方法進行計算。

K值根據經驗選擇最合適的參數,太小不夠穩健,太大的話容易受樣本不足制約。也可以根據交叉驗證的方法,確定最優的K值。一般取5~10之間的一個數。

參考:https://cloud.tencent.com/developer/article/1574868

我這里不再贅述了。

 


免責聲明!

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



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