1. 程式人生 > >7、KNN(K近鄰)

7、KNN(K近鄰)

KNN(K最近鄰演算法)

1、KNN行業應用:

比如文字識別,面部識別;預測某人是否喜歡推薦電影(Netflix);基因模式識別,比如用於檢測某中年疾病;客戶流失預測、欺詐偵測(更適合於稀有事件的分類問題)

KNN應用場景:通常最近鄰分類器使用於特徵與目標類之間的關係為比較複雜的數字型別,或者說二者關係難以理解,但是相似類間特徵總是相似

KNN演算法:

簡單有效,對資料分佈沒有假設,資料訓練也很快

但是它沒有模型輸出,因此限制了對特性間關係的理解

分類階段也比較慢,耗費記憶體

對nominal特徵以及缺少資料需要預先處理

2、原理

1)該方法的思路是:如果一個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。KNN演算法中,所選擇的鄰居都是已經正確分類的物件。該方法在分類決策上只依據最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。

KNN方法雖然從原理上也依賴於極限定理,但在類別決策時,只與極少量的相鄰樣本有關。由於KNN方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,KNN方法較其他方法更為適合。

KNN演算法不僅可以用於分類,還可以用於迴歸。通過找出一個樣本的k個最近鄰居,將這些鄰居的屬性的平均值賦給該樣本,就可以得到該樣本的屬性。更有用的方法是將不同距離的鄰居對該樣本產生的影響給予不同的權值(weight),如權值與距離成正比。

如果K=3,那麼離綠色點最近的有2個紅色的三角形和1個藍色的正方形,這三個點進行投票,於是綠色的待分類點就屬於紅色的三角形。而如果K=5,那麼離綠色點最近的有2個紅色的三角形和3個藍色的正方形,這五個點進行投票,於是綠色的待分類點就屬於藍色的正方形。K-NearestNeighbor 是 Memory-based Learning 演算法。

2)KNN的距離選擇:

用歐幾里德還是餘弦距離:根據歐式距離和餘弦相似度各自的計算方式和衡量特徵,分別適用於不同的資料分析模型:

1.  歐式距離能夠體現個體數值特徵的絕對差異,所以更多的用於需要從維度的數值大小中體現差異的分析,如使用使用者行為指標分析使用者價值的相似度與差異

2.  餘弦相似度更多的是從方向上區分差異,而絕對的數值不敏感,更多的用於使用使用者對內容評分來區分使用者興趣的相似度和差異,同時修正了使用者間可能存在的度量標準不統一的問題(因為餘弦相似度對絕對值不敏感)

3)選擇合適的距離衡量:

高緯度對距離衡量的影響:眾所周知當變數數越多,歐式距離的區分能力就越差。

變數值域對距離的影響:值域越大的變數常常會在距離計算中佔據主導作用,因此應先對變數進行標準化

。對於數字型別變數採用最小最大值標準化方法Xnew=(X-min(X))/(max(X)-min(X));對於分類變數採用啞元變數來處理。

4)總結

KNN思路:最簡單平凡的分類器就是死記硬背式的分類器,記住所有的訓練資料,對於新的資料則直接和訓練資料匹配,如果存在相近屬性的訓練資料,則直接用它的分類作為新資料的分類。這種方法有一個明顯的缺點,那就是很可能一個新資料與訓練資料屬性值差異很大時,無法找到完全匹配的訓練記錄。

KNN演算法則是從訓練集中找到和新資料最接近的K條記錄,然後根據他們的主要分類來決定新資料的類別。該演算法涉及3個主要因素:訓練集、距離或相似的衡量、K的大小。

2、KNN的優點和缺點

KNN的優缺點

(1)、優點

①簡單,易於理解,易於實現,無需引數估計,無需訓練;

對異常值不敏感(個別噪音資料對結果的影響不是很大);

③適合對稀有事件進行分類;

④適合於多分類問題(multi-modal,物件具有多個類別標籤),KNN要比SVM表現要好.

(2)、缺點

1)對測試樣本分類時的計算量大,記憶體開銷大,因為對每一個待分類的文字都要計算它到全體已知樣本的距離,才能求得它的K個最近鄰點。目前常用的解決方法是事先對已知樣本點進行剪輯,事先去除對分類作用不大的樣本;

1)可解釋性差,無法告訴你哪個變數更重要,無法給出決策樹那樣的規則;

3)K值的選擇:最大的缺點是當樣本不平衡時,如一個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本佔多數。該演算法只計算“最近的”鄰居樣本,某一類的樣本數量很大,那麼或者這類樣本並不接近目標樣本,或者這類樣本很靠近目標樣本。無論怎樣,數量並不能影響執行結果。可以採用權值的方法(和該樣本距離小的鄰居權值大)來改進;

4)消極學習方法、懶惰演算法

(3)、KNN效能問題:

KNN是一種懶惰演算法;懶惰的後果是構造模型很簡單,但在對測試樣本分類的系統開銷大,因為要掃描全部訓練樣本並計算距離;可以使用壓縮訓練樣本量提高計算的效率。

3、KNN的K值的選擇

K值的選擇:對K近鄰演算法的結果會產生重大影響。

K值較小:就相當於用較小的領域中的訓練例項進行預測,“學習”近似誤差會減小, K值的減小就意味著整體模型變得複雜,容易發生過擬合;

K值較大:就相當於用較大領域中的訓練例項進行預測,其優點是可以減少學習的估計誤差,但缺點是學習的近似誤差會增大。這時候,與輸入例項較遠(不相似的)訓練例項也會對預測器作用,使預測發生錯誤,且K值的增大就意味著整體的模型變得簡單k很大,那麼可以減少干擾資料的影響,但是此時就導致了系統性偏差(K值太小會造成過度擬合),比如如果取k為總的訓練資料數,那麼每次投票肯定都是訓練資料中多的類別勝利。顯然訓練資料的系統性偏差會影響結果。

在實際應用中,K值一般取一個比較小的數值,例如採用交叉驗證法(簡單來說,就是一部分樣本做訓練集,一部分做測試集)來選擇最優的K值。

通常情況下,選擇不同的k 會使得我們的演算法的表現有好有壞,我們需要對 k 經過多種嘗試,來決定到底使用多大的 k 來作為最終引數。k通常會在3~10直接取值,或者是k等於訓練資料的平方根。比如15個數據,可能會取k=4。在實際中,我們應該通過交叉驗證的辦法來確定k值。

相關推薦

7KNNK近鄰

KNN(K最近鄰演算法) 1、KNN行業應用: 比如文字識別,面部識別;預測某人是否喜歡推薦電影(Netflix);基因模式識別,比如用於檢測某中年疾病;客戶流失預測、欺詐偵測(更適合於稀有事件的分類問題) KNN應用場景:通常最近鄰分類器使用於特徵與目標類之間的關係為比較

【python與機器學習入門1】KNNk近鄰演算法2 手寫識別系統

參考部落格:超詳細的機器學習python入門knn乾貨 (po主Jack-Cui 參考書籍:《機器學習實戰》——第二章 KNN入門第二彈——手寫識別系統demo ——《機器學習實戰》第二章2.3 手寫識別系統       &

淺談knnk近鄰演算法

概述 K近鄰演算法是一種懶惰演算法,即沒有對資料集進行訓練的過程,其模型的三個要素:距離度量、k值的選擇和分類決策規則決定。 K近鄰的思想很簡單,即在一個數據集上,給定一個新樣本,找到與新樣本距離最近的k個例項,在這些例項中屬於多數的類即為這個新樣本的類。

KNNk近鄰演算法原理

原理:樣本點的特性與該鄰居點的特性類似,可以簡單理解為“物以類聚”。因此可以使用目標點的多個鄰近點的特性表示當前點的特性。2.KNN演算法包含:1、KNN分類演算法:“投票法”,選擇這k 個樣本中出現最多的類別標記作為預測結果;2、KNN迴歸演算法:“平均法”,將這k 個樣本

KNNK近鄰演算法的簡單入門

機器學習實戰(第二章:k-近鄰演算法) 今天學習了第二章,在此就我理解做一下簡單的總結,算是加深我的理解和用我自己的語言描述出這個演算法吧。 距離計算 基於向量空間的歐幾里得距離的計算。(L2距離) 特別情況下可採用Lp距離(明氏距離) L1距離。 簡單點來說就是 在一

機器學習之KNNk近鄰演算法

1、演算法介紹k近鄰演算法是學習機器學習的入門演算法,可實現分類與迴歸,屬於監督學習的一種。演算法的工作原理是:輸入一個訓練資料集,訓練資料集包括特徵空間的點和點的類別,可以是二分類或是多分類。預測時,輸入沒有類別的點,找到k個與該點距離最接近的點,使用多數表決的方法,得出最後的預測分類。

機器學習之KNNk近鄰算法

target rom val zip 定義 stat 2-0 datasets tro 1、算法介紹k近鄰算法是學習機器學習的入門算法,可實現分類與回歸,屬於監督學習的一種。算法的工作原理是:輸入一個訓練數據集,訓練數據集包括特征空間的點和點的類別,可以是二分類或是多分類

機器學習之KNNk近鄰演算法詳解

1-1 機器學習演算法分類 一、基本分類: ①監督學習(Supervised learning) 資料集中的每個樣本有相應的“正確答案”, 根據這些樣本做出 預測, 分有兩類: 迴歸問題和分類問題。 步驟1: 資料集的建立和分類 步

Python 實現 KNNK-近鄰算法

動作 bsp operator sort 關於 png 如果 std labels 一、概述   KNN(K-最近鄰)算法是相對比較簡單的機器學習算法之一,它主要用於對事物進行分類。用比較官方的話來說就是:給定一個訓練數據集,對新的輸入實例,在訓練數據集中找到與該實

實現KNNK近鄰平滑濾波器

要求:演算法實現為函式[im]=KNN_denoise (I,K,N),其中I為讀入的影象矩陣;K為最近鄰個數,N為模板大小引數(N*N)。 參考測試程式碼: I = imread('peppers

kNNk近鄰演算法

K近鄰分析(KNN) 一、概述 KNN演算法是一種有監督學習的分類演算法。所謂有監督學習,就是在應用演算法之前我們必須準備一組訓練集,訓練集中的每個例項都是由一些特徵和一個分類標籤組成;通常還會存在一個測試集,用來測試訓練出來的分類模型的準確性。其實KNN演算法並沒有體現

《機器學習實戰》——kNNk近鄰演算法

原作者寫的太好了,包括排版都特別整齊(其中有一個錯誤之處就是在約會網站配對效果判定的時候,列表順序不對,導致結果有誤,這裡我已做出修改)執行平臺: Windows Python版本: Python3.x IDE: Sublime text3一 簡單k-近鄰演算法    本文將

機器學習實戰筆記K近鄰

最終 而是 類別 頻率 n) 簡單 因此 當前 要素 K近鄰算法(KNN) k近鄰算法 ??k近鄰(k-nearest neighbor,KNN)是一種基本的分類與回歸算法。於1968年由Cover和Hart提出。k近鄰的輸入是實例的特征向量,對應於特征空間的點;輸出為實

常見機器學習演算法學習——KNNK鄰近

1、 演算法簡述     文章中描述性內容,多來自維基百科KNN。 KNN( k-nearest neighbors algorithm)是一種非引數、有監督演算法,由T. M. COVER, P. E. HART, Hart PE 

KNNK鄰近演算法

k-鄰近演算法的一般流程 收集資料:可以使用任何方法 準備資料:距離計算(應該是計算距離)所需要的數值,最好是結構化的資料格式 分析資料:可以使用任何方法 訓練演算法: 此步驟不適用與k-鄰近演算法 測試演算法:計算錯誤率 使用演算法:首先需要輸入樣本資料和

步步學習之用python實戰機器學習1-kNN K-NearestNeighbors演算法a

我最近才開始接觸機器學習,我大學數學學的幾乎忘了,最近才接觸python。所以我以一個完全初學者角度來學習機器學習。 我主要用的書籍就是machine learning in action (機器學習實戰)這本書。我主要是用文中已有的程式碼來講解機器學習。 同時對程式碼進行

k-Nearest Neighborsk近鄰

前言–AI發展到現在,各類演算法層出不窮,對於想要達到的目標,完成的任務,我們有很多的方法可以選擇,而且以實際經驗來看用不同的方法會有不同的結果。但是沒有免費的午餐定理(no free lunch theorem,NFL)告訴我們,在沒有實際的背景下,沒有哪一種

Python機器學習基礎篇---監督學習k近鄰

print 隨機 targe n) sta 數據集 訓練 說明 決策 K近鄰 假設我們有一些攜帶分類標記的訓練樣本,分布於特征空間中,對於一個待分類的測試樣本點,未知其類別,按照‘近朱者赤近墨者黑’,我們需要尋找與這個待分類的樣本在特征空間中距離最

機器學習實戰k-近鄰kNNk-Nearest Neighbor

目錄 0. 前言 1. k-近鄰演算法kNN(k-Nearest Neighbor) 2. 實戰案例 2.1. 簡單案例 2.2. 約會網站案例 2.3. 手寫識別案例 學習完機器學習實戰的k-近鄰演算法,簡單的做個筆記。文中

我的人工智慧之旅——近鄰演算法KNNK-Nearest Neighbor

在影象識別中,影象分類是首要工作。因為需要將不同型別的影象先進行排除。近鄰演算法是最簡單的演算法之一,但由於其弊端的存在,本篇只做瞭解性的簡單介紹, K近鄰演算法的實質 將測試圖片在已經分類好的,具有不同標籤的訓練資料圖片中,找到K張最相似的圖片,進而根據K張圖片中型別的比例大小,推斷圖