KNN演算法理解
一、演算法概述
1、kNN演算法又稱為k近鄰分類(k-nearest neighbor classification)演算法。
最簡單平凡的分類器也許是那種死記硬背式的分類器,記住所有的訓練資料,對於新的資料則直接和訓練資料匹配,如果存在相同屬性的訓練資料,則直接用它的分類來作為新資料的分類。這種方式有一個明顯的缺點,那就是很可能無法找到完全匹配的訓練記錄。
kNN演算法則是從訓練集中找到和新資料最接近的k條記錄,然後根據他們的主要分類來決定新資料的類別。該演算法涉及3個主要因素:訓練集、距離或相似的衡量、k的大小。
2、代表論文
Discriminant Adaptive Nearest Neighbor Classification
Trevor Hastie and Rolbert Tibshirani
IEEE TRANSACTIONS ON PAITERN ANALYSIS AND MACHINE INTELLIGENCE, VOL. 18, NO. 6, JUNE 1996
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)
參考:
維基百科:
百度百科:
最簡單平凡的分類器也許是那種死記硬背式的分類器,記住所有的訓練資料,對於新的資料則直接和訓練資料匹配,如果存在相同屬性的訓練資料,則直接用它的分類來作為新資料的分類。這種方式有一個明顯的缺點,那就是很可能無法找到完全匹配的訓練記錄。
kNN演算法則是從訓練集中找到和新資料最接近的k條記錄,然後根據他們的主要分類來決定新資料的類別。該演算法涉及3個主要因素:訓練集、距離或相似的衡量、k的大小。
2、代表論文
Discriminant Adaptive Nearest Neighbor Classification
Trevor Hastie and Rolbert Tibshirani
IEEE TRANSACTIONS ON PAITERN ANALYSIS AND MACHINE INTELLIGENCE, VOL. 18, NO. 6, JUNE 1996
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)
參考:
維基百科:
百度百科:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29754888/viewspace-1442774/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- KNN演算法實驗KNN演算法
- KNN演算法——分類部分KNN演算法
- 演算法金 | 再見!!!KNN演算法KNN
- 演算法(八):圖解KNN演算法演算法圖解KNN
- KNN演算法推理與實現KNN演算法
- python機器學習演算法——KNN演算法Python機器學習演算法KNN
- sklearn調包俠之KNN演算法KNN演算法
- educoder 機器學習 --- kNN演算法機器學習KNN演算法
- 機器學習——KNN近鄰演算法機器學習KNN演算法
- 最基礎的分類演算法(KNN)演算法KNN
- 機器學習筆記(KNN演算法)機器學習筆記KNN演算法
- 機器學習-K近鄰演算法-KNN機器學習演算法KNN
- 機器學習經典演算法之KNN機器學習演算法KNN
- 演算法實踐:KNN分類(day08)演算法KNN
- 機器學習演算法——kNN(k-近鄰演算法)機器學習演算法KNN
- 機器學習演算法-K近鄰(KNN)演算法(三):馬絞痛資料--kNN資料預處理+kNN分類pipeline(程式碼附詳細註釋)機器學習演算法KNN
- KNN演算法的資料歸一化--Feature ScalingKNN演算法
- (一)kNNKNN
- 機器學習分享——KNN演算法及numpy實現機器學習KNN演算法
- 資料探勘——KNN演算法(手寫數字分類)KNN演算法
- 手勢識別演算法: 資料濾波演算法、資料分演算法——KNN演算法KNN
- 資料結構與演算法-kd二叉樹(kNN)資料結構演算法二叉樹KNN
- KNN 演算法-實戰篇-如何識別手寫數字KNN演算法
- KNN 演算法-理論篇-如何給電影進行分類KNN演算法
- scikit-learn中KNN演算法資料歸一化的分裝KNN演算法
- 機器學習實踐篇第二篇-KNN演算法學習機器學習KNN演算法
- Python底層實現KNNPythonKNN
- 1.2.1 理解LALR解析演算法演算法
- LRU演算法原理解析演算法
- 如何更好理解Peterson演算法?演算法
- K-最近鄰法(KNN)簡介KNN
- 機器學習——KNN(K近鄰)機器學習KNN
- 簡單理解Paxos演算法(譯)演算法
- 理解JVM(二):垃圾收集演算法JVM演算法
- 我對Kosaraju演算法的理解演算法
- Vue中diff演算法的理解Vue演算法
- 遞迴 & 分治演算法深度理解遞迴演算法
- 深入理解React:diff 演算法React演算法
- php查詢演算法的理解PHP演算法