機器學習(KNN一) 原理概述

2021-10-05 05:36:14 字數 3929 閱讀 4300

從這篇部落格開始機器學習最大的一塊——分類(有監督學習),並以knn做為開篇。(當然knn也可用做回歸)

k近鄰(k-nearst neighbors, knn)是一種基本的機器學習演算法,所謂k近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。比如:判斷乙個人的人品,只需要觀察與他來往最密切的幾個人的人品好壞就可以得出,即「近朱者赤,近墨者黑」;knn演算法既可以應用於分類應用中,也可以應用在回歸應用中。

knn在做回歸和分類的主要區別在於最後做**的時候的決策方式不同。knn在分類**時,一般採用多數表決法;而在做回歸**時,一般採用平均值法。

過程

從訓練集合中獲取k個離待**樣本距離最近的樣本資料;

根據獲取得到的k個樣本資料來**當前待**樣本的目標屬性值。

如上圖,綠色圓要被決定屬於哪個類,是紅色三角形還是藍色四方形?

舉例

上圖中對多種食物提供兩個特徵:

我們標記配料為3中型別之一:fruit(水果)、vegetable(蔬菜)或者protein(蛋白質)

我們繪製二維資料的散點圖,維度x表示配料的甜度(sweetness),維度y表示配料的脆度(crunchiness),散點圖如下:

大致的標出對應的區域:

問題: 西紅柿是屬於哪類呢??

對於k值的選擇,一般根據樣本分佈選擇乙個較小的值,然後通過交叉驗證來選擇乙個比較合適的最終值;當選擇比較小的k值的時候,表示使用較小領域中的樣本進行**,訓練誤差會減小,但是會導致模型變得複雜,容易過擬合;當選擇較大的k值的時候,表示使用較大領域中的樣本進行**,訓練誤差會增大,同時會使模型變得簡單,容易導致欠擬合;

一般使用歐氏距離(歐幾里得距離);

在分類模型中,主要使用多數表決法或者加權多數表決法;在回歸模型中,主要使用平均值法或者加權平均值法。

多數表決法:每個鄰近樣本的權重是一樣的,也就是說最終**的結果為出現類別最多的那個類,比如下圖中藍色圓圈的最終類別為紅色;

加權多數表決法:每個鄰近樣本的權重是不一樣的,一般情況下採用權重和距離成反比的方式來計算,也就是說最終**結果是出現權重最大的那個類別;比如下圖中,假設三個紅色圓點到待**樣本點的距離均為2,兩個黃色五角星到待**樣本點距離為1,那麼藍色樣本的最終類別為黃色。

到圓的距離為2,則權重為 1/2;到五角的距離為1,則權重為1。

1 /2

∗3<1∗

21/2 * 3 < 1 * 2

1/2∗

3<1∗

2,所以為五角

平均值法:每個鄰近樣本的權重是一樣的,也就是說最終**的結果為所有鄰近樣本的目標屬性值的均值;比如下圖中,藍色圓圈的最終**值為:2.6

( 3+

3+3+

2+2)

/5=2.6

(3+3+3+2+2)/5 =2.6

(3+3+3

+2+2

)/5=

2.6

加權平均值法:每個鄰近樣本的權重是不一樣的,一般情況下採用權重和距離成反比的方式來計算,也就是說在計算均值的時候進行加權操作;比下右圖中,假設上面三個點到待**樣本點的距離均為2,下面兩個點到待**樣本點距離為1,那麼藍色圓圈的最終**值為:2.43。(權重分別為: 1/7和2/7)

到③的距離都為3,到②的距離都為1。和權重成反比,則分別為1/3,1。

做歸一化:(1/

2)/(

1/2∗

3+1∗

2)=1

/7,1

/(1/

2∗3+

1∗2)

=2/7

(1/2) / (1/2 * 3 + 1*2) = 1/7, 1 / (1/2 * 3 + 1*2) = 2/7

(1/2)/

(1/2

∗3+1

∗2)=

1/7,

1/(1

/2∗3

+1∗2

)=2/

7則:3∗1

knn演算法的重點在於找出k個最鄰近的點,主要方式有以下幾種:

1. 蠻力實現(brute)

計算**樣本到所有訓練集樣本的距離,然後選擇最小的k個距離即可得到k個最鄰近點。缺點在於當特徵數比較多、樣本數比較多的時候,演算法的執行效率比較低;

2. kd樹(kd_tree)

kd樹演算法中,首先是對訓練資料進行建模,構建kd樹,然後再根據建好的模型來獲取鄰近樣本資料。

3. 其他

除此之外,還有一些從 kd_tree 修改後的求解最鄰近點的演算法,比如:ball tree、bbf tree、mvp tree等。

注:

kd tree是knn演算法中用於計算最近鄰的快速、便捷構建方式。當樣本資料量少的時候,我們可以使用brute這種暴力的方式進行求解最近鄰,即計算到所有樣本的距離。但是當樣本量比較大的時候,直接計算所有樣本的距離,工作量有點大,所以在這種情況下,我們可以使用kd tree來快速的計算。

kd樹採用從 m

mm 個樣本的 n

nn 維特徵中,分別計算 n

nn 個特徵取值的方差,用方差最大的第 k

kk 維特徵 n

kn_k

nk​ 作為根節點。對於這個特徵,選擇取值的中位數 nkv

n_nk

v​作為樣本的劃分點,對於小於該值的樣本劃分到左子樹,對於大於等於該值的樣本劃分到右子樹,對左右子樹採用同樣的方式找方差最大的特徵作為根節點,遞迴即可產生kd樹。(方差越大,分割性質越好。方差本身代表偏移量,離散程度,在樹上體現左右兩子樹的更離散、差異更大)

舉例

二維樣本:

構建結果:

轉換成特徵空間的劃分

舉例:查詢(2,4.5)

反應在特徵圖上的:

總的來說,knn特別好理解,就是我說常說的「近朱者赤,近墨者黑」。

機器學習 KNN演算法原理

k近鄰 k nearst neighbors,knn 是一種基本的機器學習演算法,所謂k近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。比如 判斷乙個人的人品,只需要觀察與他來往最密切的幾個人的人品好壞就可以得出,即 近朱者赤,近墨者黑 knn演算法既可以應用於分類應...

機器學習實戰(一) KNN

knn演算法本身簡單有效,它是一種lazy learning演算法,分類器不需要使用訓練集進行訓練,訓練時間複雜度為0。knn分類的計算複雜度和訓練集中的文件數目成正比,也就是說,如果訓練集中文件總數為n,那麼knn的分類時間複雜度為o n knn演算法不僅可以用於分類,還可以用於回歸。通過找出乙個...

機器學習 KNN演算法(一)

k近鄰 k nearest neighbor,k nn 1968年提出了最初的鄰近演算法 是一種基於分類和回歸的演算法 基於例項的學習 懶惰學習 演算法思想 給定測試樣本,基於某種距離度量找出訓練集中與其最靠近的k個訓練樣本,然後基於這k個鄰居的資訊來 通常,在分類任務中,可使用 投票法 即選擇這k...