KNN算法的算法思想

之前講解的線性回歸和邏輯回歸的原理中,不免會引入大量的數(shù)學(xué)推導(dǎo)和證明過程,從預(yù)測函數(shù)的建立,到損失函數(shù)的偏導(dǎo)數(shù)求解,不免要求讀者有扎實的高等數(shù)學(xué)功底和線性代數(shù)功底,那么機器學(xué)習(xí)里有沒有稍微大眾化,通俗易懂的算法呢?KNN算法就是最淺顯易懂的算法之一

假設(shè)我們有蘋果,橙子,香蕉三類水果,你希望記錄這三類的特征數(shù)據(jù),比如最基本的長度、寬度、高度、重量、周長、體積、光澤度、濕度等量化的物理量,然后統(tǒng)計出一份含有這些物理量的樣品表,其中每一行代表一個水果,你可以很容易的為每一行打上水果標簽,然后你希望寫出某個算法,在當你得到一個未知水果時,通過算法和統(tǒng)計的樣本表,根據(jù)每個水果都有的物理量來自動推理出這個未知的水果屬于哪一類水果?

顯然,這是一個分類算法,并且屬于監(jiān)督學(xué)習(xí),KNN算法就是其中最典型最容易實現(xiàn)的算法

本章知識點:

1、數(shù)據(jù)在不同維度上分布的分類表現(xiàn)

2、KNN算法的思想

3、數(shù)據(jù)歸一化處理

4、找鄰居

5、投票決定

6、監(jiān)督學(xué)習(xí)的過程

7、KNN的優(yōu)缺點

從知識點可以看出,KNN算法并沒有涉及到高等數(shù)學(xué)的推導(dǎo)過程,這個算法非常人性,非常簡單

一. 數(shù)據(jù)在不同維度上分布的分類表現(xiàn)

假設(shè)我們的樣本集是由蘋果,橙子,香蕉這3個類別組成,其中每個樣本有4個量化物理維度

樣本集合

我們從采集到的樣本集合里可以知道,每一行4個維度代表一個樣本,并且最后一列表明了樣本的類別,這就是典型的監(jiān)督學(xué)習(xí)樣本,我們以這個樣本為參考系,通過算法來預(yù)測未知樣本。

我們先用二維空間為參考系,選取樣本的第一維和第四維來繪制樣本集

二維空間上樣本第一維和第四維分布

從第一維和第四維分布上我們看到這三類分類除了顏色區(qū)分,離散度是較高的,我們再選擇第一維和第三維來繪制

二維空間上樣本第一維和第三維分布

從第一維和第三維分布上我們可以看到分類效果稍微比前面的清楚一點(沒有那么離散)

下面我們用三維空間為參考系,選取樣本的第一維,第二維,第三維來繪制樣本集

三維空間上樣本前三維分布

可以看出它的廬山真面目,分類效果更加明顯,那么四維空間上的分布呢?對不起,人類無法看到高維空間

二. KNN算法的思想

KNN(k-NearestNeighbor)又被稱為近鄰算法,它的核心思想是:物以類聚,人以群分

假設(shè)一個未知樣本數(shù)據(jù)x需要歸類,總共有ABC三個類別,那么離x距離最近的有k個鄰居,這k個鄰居里有k1個鄰居屬于A類,k2個鄰居屬于B類,k3個鄰居屬于C類,如果k1>k2>k3,那么x就屬于A類,也就是說x的類別完全由鄰居來推斷出來

所以我們可以總結(jié)出其算法步驟為:

1、計算測試對象到訓(xùn)練集中每個對象的距離

2、按照距離的遠近排序

3、選取與當前測試對象最近的k的訓(xùn)練對象,作為該測試對象的鄰居

4、統(tǒng)計這k個鄰居的類別頻率

5、k個鄰居里頻率最高的類別,即為測試對象的類別

我們可以簡化為:找鄰居 + 投票決定

三. 數(shù)據(jù)歸一化

有了算法的思想,首先我們要做的是將采集到的樣本集做歸一化處理

因為不同維度的物理量之間往往具有不同的量綱和單位,比如時間,距離等,這樣會造成維度之間可比性較差,為了消除物理量之間絕對值相差太大,需要對樣本數(shù)據(jù)集進行標準化處理,保證各個物理量之間處于同一個數(shù)量級之下,消除不同量綱之間的差異,一般有如下兩個常用的歸一化方法:

1、線性歸一化(Min-Max scaling)

離差標準化

該方法通過線性變化對原始數(shù)據(jù)進行等比例縮放映射到[0,1]之間,其中X*為歸一化后的數(shù)據(jù),X為原始數(shù)據(jù),Xmin和Xmax分別為X向量的最小值和最大值

2、0均值標準化(Z-score standardization)

均值歸一化

該方法將原始數(shù)據(jù)歸一化為均值為0、方差為1的數(shù)據(jù)集,且該數(shù)據(jù)集符合標準的高斯分布,其中X*為歸一化后的數(shù)據(jù),X為原始數(shù)據(jù),μ為X向量的均值,σ為X向量的標準差

歸一化樣本數(shù)據(jù)集

四. 找鄰居

設(shè)x為TestSet的一個n維向量樣本,我們需要在TrainSet中找到距離x最近的k個n維向量樣本作為x的鄰居,那么問題轉(zhuǎn)化為怎么計算多組兩個n維向量之間的距離?

一般對于兩個n維向量,如果是直接物理量,可以用歐氏距離、曼哈頓距離等來計算這兩個n維向量之間的距離;而對于文本分類而言,一般會使用余弦定理來計算這兩個n維向量之間的夾角來確定相似度

在這里,我們采用歐式距離來計算,設(shè)y為TrainSet中任意一個n維向量樣本,則x和y之間的距離可以表示為:

兩個向量的歐式距離

我們需要分別計算x到TrainSet中所有樣本的距離,并對這些距離從小到大排序,選取前k個距離的樣本就找到了x的k個鄰居(物以類聚的思想)

其中k值的設(shè)定一般低于樣本數(shù)量的平方根,且為奇數(shù)最適宜

選取x的k個鄰居

五. 投票決定

我們得到x的k個鄰居后,需要統(tǒng)計這k個鄰居的類別頻率,已少數(shù)服從多數(shù)的原則,同一類別最多的鄰居,即作為x的類別(x的類別完全由鄰居來投票推斷)

k個鄰居推斷x的類別

六. KNN監(jiān)督學(xué)習(xí)的過程

我們將樣本集劃分為25%的測試集和75%的訓(xùn)練集,以5個鄰居為例運行算法得到下面結(jié)果

KNN算法預(yù)測結(jié)果

可以看到算法只預(yù)測錯了1個樣本的分類,準確率達到90%以上

以KNN算法為例,我們可以總結(jié)出監(jiān)督學(xué)習(xí)的基本流程

1、歸一化數(shù)據(jù)樣本集

2、劃分樣本集為訓(xùn)練集和測試集

3、以訓(xùn)練集為算法參考系,測試集來測試算法

4、計算預(yù)測樣品標簽和真實樣品標簽的比值來評估算法的準確率

5、調(diào)節(jié)不同的參數(shù)找到最優(yōu)算法參數(shù)

7. KNN算法的優(yōu)缺點

1、優(yōu)點

非常簡單的分類算法沒有之一,人性化,易于理解,易于實現(xiàn)

適合處理多分類問題,比如推薦用戶

2、缺點

屬于懶惰算法,時間復(fù)雜度較高,因為需要計算未知樣本到所有已知樣本的距離

樣本平衡度依賴高,當出現(xiàn)極端情況樣本不平衡時,分類絕對會出現(xiàn)偏差

可解釋性差,無法給出類似決策樹那樣的規(guī)則

向量的維度越高,歐式距離的區(qū)分能力就越弱

KNN算法案例代碼見:KNN算法的基本原理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容