1. 程式人生 > >KNN演算法的原理:

KNN演算法的原理:

KNN演算法的原理:
knn不僅可以實現分類還可以實現迴歸.kNN演算法的核心思想是如果一個樣本在特徵空間中的k個最相鄰的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別,並具有這個類別上樣本的特性。該方法在確定分類決策上只依據最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別.
最簡單最初級的分類器是將全部的訓練資料所對應的類別都記錄下來,當測試物件的屬性和某個訓練物件的屬性完全匹配時,便可以對其進行分類。但是怎麼可能所有測試物件都會找到與之完全匹配的訓練物件呢,其次就是存在一個測試物件同時與多個訓練物件匹配,導致一個訓練物件被分到了多個類的問題,基於這些問題呢,就產生了KNN。
     KNN是通過測量不同特徵值之間的距離進行分類。它的的思路是:如果一個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。K通常是不大於20的整數。KNN演算法中,所選擇的鄰居都是已經正確分類的物件。該方法在定類決策上只依據最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。

KNN通過依據k個物件中佔優的類別進行決策,而不是單一的物件類別決策。這兩點就是KNN演算法的優勢。
   接下來對KNN演算法的思想總結一下:就是在訓練集中資料和標籤已知的情況下,輸入測試資料,將測試資料的特徵與訓練集中對應的特徵進行相互比較,找到訓練集中與之最為相似的前K個數據,則該測試資料對應的類別就是K個數據中
出現次數最多的那個分類,其演算法的描述為:
1)計算測試資料與各個訓練資料之間的距離;
2)按照距離的遞增關係進行排序;
3)選取距離最小的K個點;
4)確定前K個點所在類別的出現頻率;
5)返回前K個點中出現頻率最高的類別作為測試資料的預測分類。

KNN演算法是很基本的機器學習演算法了,它非常容易學習,在維度很高的時候也有很好的分類效率,因此運用也很廣泛,這裡總結下KNN的優缺點。 
KNN的主要優點有:
1) 理論成熟,思想簡單,既可以用來做分類也可以用來做迴歸
2) 可用於非線性分類
3) 訓練時間複雜度比支援向量機之類的演算法低,僅為O(n)
4) 和樸素貝葉斯之類的演算法比,對資料沒有假設,準確度高,對異常點不敏感
5) 由於KNN方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,KNN方法較其他方法更為適合
6)該演算法比較適用於樣本容量比較大的類域的自動分類,而那些樣本容量較小的類域採用這種演算法比較容易產生誤分
KNN的主要缺點有:
1)計算量大,尤其是特徵數非常多的時候
2)樣本不平衡的時候,對稀有類別的預測準確率低
3)KD樹,球樹之類的模型建立需要大量的記憶體
4)使用懶散學習方法,基本上不學習,導致預測時速度比起邏輯迴歸之類的演算法慢
5)相比決策樹模型,KNN模型可解釋性不強
以上就是KNN演算法原理的一個總結,希望可以幫到朋友們,尤其是在用scikit-learn學習KNN的朋友們。
https://www.cnblogs.com/zhengxingpeng/p/6670451.html