1. 程式人生 > >機器學習之K近鄰算法

機器學習之K近鄰算法

特征值 測量 k-近鄰算法 問題 概率 產生 數據 png com

技術分享圖片近在學習《機器學習實戰》這本書,做了一些筆記,和大家分享下:

一 、K-近鄰算法(KNN)概述

最簡單最初級的分類器是將全部的訓練數據所對應的類別都記錄下來,當測試對象的屬性和某個訓練對象的屬性完全匹配時,便可以對其進行分類。但是怎麽可能所有測試對象都會找到與之完全匹配的訓練對象呢,其次就是存在一個測試對象同時與多個訓練對象匹配,導致一個訓練對象被分到了多個類的問題,基於這些問題呢,就產生了KNN。

KNN是通過測量不同特征值之間的距離進行分類。它的的思路是:如果一個樣本在特征空間中的k個最相似(即特征空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。K通常是不大於20的整數。KNN算法中,所選擇的鄰居都是已經正確分類的對象。該方法在定類決策上只依據最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。

下面通過一個簡單的例子說明一下:如下圖,綠色圓要被決定賦予哪個類,是紅色三角形還是藍色四方形?如果K=3,由於紅色三角形所占比例為2/3,綠色圓將被賦予紅色三角形那個類,如果K=5,由於藍色四方形比例為3/5,因此綠色圓被賦予藍色四方形類。

技術分享圖片

二、算法偽代碼:

搜索k個近鄰的算法:kNN(A[n],k)

輸入:A[n]為N個訓練樣本在空間中的坐標,k為近鄰數

輸出:x所屬的類別

取A[1]~A[k]作為x的初始近鄰,計算與測試樣本x間的歐式距離d(x,A[i]),i=1,2,.....,k;按d(x,A[i])升序排序,計算最遠樣本與x間的距離D<-----max{d(x,a[j]) | j=1,2,.....,k};

for(i=k+1;i<=n;i++)

計算a[i]與x間的距離d(x,A[i]);

if(d(x,A[i]))<D

then 用A[i]代替最遠樣本

按照d(x,A[i])升序排序,計算最遠樣本與x間的距離D<---max{d(x,A[j]) | j=1,...,i };計算前k個樣本A[i]),i=1,2,...,k所屬類別的概率,具有最大概率的類別即為樣本x的類

三、算法小結

  k-近鄰算法是分類數據最簡單最有效的算法,它基於實例的學習,使用算法時必須有接近實際數據(能夠反映實際數據)的訓練樣本集。使用K-近鄰算法必須保存所有訓練數據,如果數據很大,占用空間很大。而且,對一個樣本分類,必須計算其與所有訓練樣本集中的樣本的距離,這可能會非常耗時。k-近鄰的改進算法為k決策樹。

機器學習之K近鄰算法