1.基本介紹
k最近鄰(k-nearest neighbor,knn)分類演算法,是乙個理論上比較成熟的方法,也是最簡單的機器學習演算法之一。該方法的思路是:如果乙個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。knn演算法中,所選擇的鄰居都是已經正確分類的物件。該方法在定類決策上只依據最鄰近的乙個或者幾個樣本的類別來決定待分樣本所屬的類別。
knn方法雖然從原理上也依賴於極限定理,但在類別決策時,只與極少量的相鄰樣本有關。由於knn方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,knn方法較其他方法更為適合。
knn演算法不僅可以用於分類,還可以用於回歸。通過找出乙個樣本的k個最近鄰居,將這些鄰居的屬性的平均值賦給該樣本,就可以得到該樣本的屬性。更有用的方法是將不同距離的鄰居對該樣本產生的影響給予不同的權值(weight),如權值與距離成正比。
該演算法在分類時有個主要的不足是,當樣本不平衡時,如乙個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入乙個新樣本時,該樣本的k個鄰居中大容量類的樣本占多數。 該演算法只計算「最近的」鄰居樣本,某一類的樣本數量很大,那麼或者這類樣本並不接近目標樣本,或者這類樣本很靠近目標樣本。無論怎樣,數量並不能影響執行結果。可以採用權值的方法(和該樣本距離小的鄰居權值大)來改進。該方法的另乙個不足之處是計算量較大,因為對每乙個待分類的文字都要計算它到全體已知樣本的距離,才能求得它的k個最近鄰點。目前常用的解決方法是事先對已知樣本點進行剪輯,事先去除對分類作用不大的樣本。該演算法比較適用於樣本容量比較大的類域的自動分類,而那些樣本容量較小的類域採用這種演算法比較容易產生誤分。
2.演算法描述
k-近鄰演算法的思想如下:首先,計算新樣本與訓練樣本之間的距離,找到距離最近的k個鄰居;然後,根據這些鄰居所屬的類別來判定新樣本的類別,如果它們都屬於同乙個類別,那麼新樣本也屬於這個類;否則,對每個後選類別進行評分,按照某種規則確定新樣本的類別。
取未知樣本x的k個近鄰,看著k個近鄰多數屬於哪一類,就把x分為哪一類。即,在x的k個樣本中,找出x的k個近鄰。k-近鄰演算法從測試樣本x開始生長,不斷的擴大區域,直到包含進k個訓練樣本,並且把測試樣本x的類別歸為著最近的k個訓練樣本中出現頻率最大的類別。例如,下圖圖中綠色圓要被決定賦予哪個類,是紅色三角形還是藍色四方形?如果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
for(i=k+1;i<=n;i++)
計算a[i]與x間的距離d(x,a[i]);
if(d(x,a[i]))
then 用a[i]代替最遠樣本
按照d(x,a[i])公升序排序,計算最遠樣本與x間的距離d
k最鄰近演算法 加權kNN
上篇文章中提到為每個點的距離增加乙個權重,使得距離近的點可以得到更大的權重,在此描述如何加權。該方法最簡單的形式是返回距離的倒數,比如距離d,權重1 d。有時候,完全一樣或非常接近的商品權重會很大甚至無窮大。基於這樣的原因,在距離求倒數時,在距離上加乙個常量 weight 1 distance co...
K 鄰近演算法
k 鄰近演算法 1.演算法描述 k 鄰近演算法 k nearest neighbor,knn 分類演算法,是最簡單的機器學習演算法。工作原理 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類對應的關係。輸入沒有標籤的新資料後,將新資料的每...
k鄰近演算法
今天學習了一點機器學習的知識,主要是機器學習最基本的演算法 k鄰近演算法。正好今天寫這篇blog可以複習鞏固,其中涉及到的code和一些內容來自 機器學習實戰 在此基礎上加了一點自己的注釋和理解。這本教程還是挺適合入門的,理論 相結合。k 近鄰演算法 knn 採用測量不同特徵值之間的距離方法進行分類...