1. 程式人生 > >2.2.1 K-近鄰演算法概述

2.2.1 K-近鄰演算法概述

1. 什麼是K-近鄰演算法?

k最近鄰(k-Nearest Neighbor,kNN)分類演算法是一個比較成熟也是最簡單的機器學習(Machine Learning)演算法之一。該方法的思路是:如果一個樣本在特徵空間中與k個例項最為相似(即特徵空間中最鄰近),那麼這k個例項中大多數屬於哪個類別,則該樣本也屬於這個類別。

2. K-近鄰演算法的本質

一般的機器學習演算法一般包括兩個過程:訓練過程和測試過程。
訓練過程通過使用機器學習演算法在訓練樣本上迭代訓練,得到較好的機器學習模型。
測試過程是使用測試資料來驗證機器學習模型的好壞,通過正確率來呈現。
KNN演算法的本質是在訓練過程中,它將所有訓練樣本的輸入和輸出標籤(label)都儲存起來。測試過程中,計算測試樣本和每個訓練樣本距離的最近的前k個訓練樣本。然後對著k個訓練樣本的label進行投票,票數最多的那一類即為測試樣本所歸類。

其實,KNN演算法非常簡單,可以說在訓練過程基本沒有演算法參與,只有儲存訓練樣本。可以說KNN演算法是一種識記類演算法。因此,KNN雖然簡單,但是明顯包含了一下幾個缺點:

  • 訓練過程中所有的訓練樣本及其輸出的label儲存起來,因此,空間成本很大。
  • 測試過程中,每個測試樣本都跟訓練樣本進行比較,因此,執行時間成本很大。
  • 採用距離比較的分類方式,分類準確率不高。

3. Iris分類實現

首先,資料集我們選擇經典的鳶尾花卉資料集(Iris)。Iris資料集每個樣本x包含了花萼長度(sepal length)、花萼寬度(sepal width)、花瓣長度(petal length)、花瓣寬度(petal width)四個特徵。樣本標籤y共有三類,分別是Setosa,Versicolor和Virginica。Iris資料集總共包含150個樣本,每個類別由50個樣本,整體構成一個150行5列的二維表。
下面是該實驗的jupyter notebook:

https://github.com/Bryce1010/MachineLearning_action/blob/master/Week1/Iris/Iris.ipynb