KNN演算法
一、演算法概述
1、kNN演算法又稱為k近鄰分類(k-nearest neighbor classification)演算法。
最簡單平凡的分類器也許是那種死記硬背式的分類器,記住所有的訓練資料,對於新的資料則直接和訓練資料匹配,如果存在相同屬性的訓練資料,則直接用它的分類來作為新資料的分類。這種方式有一個明顯的缺點,那就是很可能無法找到完全匹配的訓練記錄。kNN演算法則是從訓練集中找到和新資料最接近的k條記錄,然後根據他們的主要分類來決定新資料的類別。該演算法涉及3個主要因素:訓練集、距離或相似的衡量、k的大小。
2、代表論文
Discriminant Adaptive Nearest Neighbor ClassificationTrevor Hastie and Rolbert Tibshirani
http://www.stanford.edu/~hastie/Papers/dann_IEEE.pdf
3、行業應用
客戶流失預測、欺詐偵測等(更適合於稀有事件的分類問題)二、演算法要點
1、指導思想
kNN演算法的指導思想是“近朱者赤,近墨者黑”,由你的鄰居來推斷出你的類別。計算步驟如下:
1)算距離:給定測試物件,計算它與訓練集中的每個物件的距離
2)找鄰居:圈定距離最近的k個訓練物件,作為測試物件的近鄰
3)做分類:根據這k個近鄰歸屬的主要類別,來對測試物件分類
2、距離或相似度的衡量
什麼是合適的距離衡量?距離越近應該意味著這兩個點屬於一個分類的可能性越大。覺的距離衡量包括歐式距離、夾角餘弦等。對於文字分類來說,使用餘弦(cosine)來計算相似度就比歐式(Euclidean)距離更合適。3、類別的判定
投票決定:少數服從多數,近鄰中哪個類別的點最多就分為該類。加權投票法:根據距離的遠近,對近鄰的投票進行加權,距離越近則權重越大(權重為距離平方的倒數)
三、優缺點
1、優點
簡單,易於理解,易於實現,無需估計引數,無需訓練適合對稀有事件進行分類(例如當流失率很低時,比如低於0.5%,構造流失預測模型)
特別適合於多分類問題(multi-modal,物件具有多個類別標籤),例如根據基因特徵來判斷其功能分類,kNN比SVM的表現要好
2、缺點
懶惰演算法,對測試樣本分類時的計算量大,記憶體開銷大,評分慢可解釋性較差,無法給出決策樹那樣的規則。
四、常見問題
1、k值設定為多大?
k太小,分類結果易受噪聲點影響;k太大,近鄰中又可能包含太多的其它類別的點。(對距離加權,可以降低k值設定的影響)k值通常是採用交叉檢驗來確定(以k=1為基準)
經驗規則:k一般低於訓練樣本數的平方根
2、類別如何判定最合適?
投票法沒有考慮近鄰的距離的遠近,距離更近的近鄰也許更應該決定最終的分類,所以加權投票法更恰當一些。3、如何選擇合適的距離衡量?
高維度對距離衡量的影響:眾所周知當變數數越多,歐式距離的區分能力就越差。變數值域對距離的影響:值域越大的變數常常會在距離計算中佔據主導作用,因此應先對變數進行標準化。
4、訓練樣本是否要一視同仁?
在訓練集中,有些樣本可能是更值得依賴的。可以給不同的樣本施加不同的權重,加強依賴樣本的權重,降低不可信賴樣本的影響。
5、效能問題?
kNN是一種懶惰演算法,平時不好好學習,考試(對測試樣本分類)時才臨陣磨槍(臨時去找k個近鄰)。懶惰的後果:構造模型很簡單,但在對測試樣本分類地的系統開銷大,因為要掃描全部訓練樣本並計算距離。
已經有一些方法提高計算的效率,例如壓縮訓練樣本量等。
6、能否大幅減少訓練樣本量,同時又保持分類精度?
濃縮技術(condensing)編輯技術(editing)
參考:
維基百科:http://zh.wikipedia.org/wiki/%E6%9C%80%E9%82%BB%E8%BF%91%E6%90%9C%E7%B4%A2
百度百科:http://baike.baidu.com/view/1485833.htm
KNN可以用於推薦:
這裡我們不用KNN來實現分類,我們使用KNN最原始的演算法思路,即為每個內容尋找K個與其最相似的內容,並推薦給使用者。
相關文章
- 機器學習之KNN演算法機器學習KNN演算法
- KNN演算法理解KNN演算法
- KNN演算法實驗KNN演算法
- KNN演算法——分類部分KNN演算法
- 機器學習筆記(KNN演算法)機器學習筆記KNN演算法
- 機器學習——KNN近鄰演算法機器學習KNN演算法
- educoder 機器學習 --- kNN演算法機器學習KNN演算法
- 演算法金 | 再見!!!KNN演算法KNN
- 演算法(八):圖解KNN演算法演算法圖解KNN
- python機器學習演算法——KNN演算法Python機器學習演算法KNN
- 機器學習經典演算法之KNN機器學習演算法KNN
- KNN演算法推理與實現KNN演算法
- Python實現KNN演算法PythonKNN演算法
- 機器學習-K近鄰演算法-KNN機器學習演算法KNN
- 機器學習演算法——kNN(k-近鄰演算法)機器學習演算法KNN
- sklearn調包俠之KNN演算法KNN演算法
- 機器學習分享——KNN演算法及numpy實現機器學習KNN演算法
- 最基礎的分類演算法(KNN)演算法KNN
- 機器學習實戰ByMatlab(1):KNN演算法機器學習MatlabKNN演算法
- 機器學習演算法-K近鄰(KNN)演算法(三):馬絞痛資料--kNN資料預處理+kNN分類pipeline(程式碼附詳細註釋)機器學習演算法KNN
- 演算法實踐:KNN分類(day08)演算法KNN
- 機器學習之kNN演算法(純python實現)機器學習KNN演算法Python
- 01-kNN演算法實戰-(機器學習實戰)KNN演算法機器學習
- 機器學習從入門到放棄之KNN演算法機器學習KNN演算法
- 資料分析與挖掘 - R語言:KNN演算法R語言KNN演算法
- 資料探勘——KNN演算法(手寫數字分類)KNN演算法
- 手勢識別演算法: 資料濾波演算法、資料分演算法——KNN演算法KNN
- 資料結構與演算法-kd二叉樹(kNN)資料結構演算法二叉樹KNN
- KNN 演算法-實戰篇-如何識別手寫數字KNN演算法
- 讀取大型稀疏矩陣&KNN演算法的OpenCL加速版本矩陣KNN演算法
- 機器學習實踐篇第二篇-KNN演算法學習機器學習KNN演算法
- KNN 演算法-理論篇-如何給電影進行分類KNN演算法
- KNN演算法在保險業精準營銷中的應用KNN演算法
- KNN演算法的資料歸一化--Feature ScalingKNN演算法
- scikit-learn中KNN演算法資料歸一化的分裝KNN演算法
- 機器學習——最鄰近規則分類(K Nearest Neighbor)KNN演算法機器學習RESTKNN演算法
- 用 kNN 演算法預測豆瓣電影使用者的性別KNN演算法
- 機器學習——KNN(K近鄰)機器學習KNN