1. 程式人生 > >機器學習算法系列——k近鄰分類法

機器學習算法系列——k近鄰分類法

1、基本思想

給定一個訓練資料集(這些資料集是已知類別的),對新輸入的要對其進行分類的例項,從訓練資料中找出與該例項最近的k個例項,這k個例項的多數屬於某個類(類似於這k個例項對新資料投票),就把該輸入例項分為這個類。

2、數學理論

2.1 演算法描述

輸入:訓練資料集
T={(x1,y1),(x2,y2),...,(xN,yN))}
其中,xiXRn 為例項的特徵向量,yiY={c1,c2,...,cK} 為例項的類別,i=1,2,...,N ;新輸入的例項表示為x
輸出:例項x所屬的類y

分類步驟:

  • 根據給定的距離度量,在訓練集T
    中找出與x最鄰近的k個點,涵蓋這k個點的x的領域記作Nk(x)
  • Nk(x)中根據分類決策規則(如多數表決)決定x的類別y:
    y=argmaxxiNk(x)I(yi=cj),i=1,2,...,N;j=1,2,...,K
    上式中,I為指示函式,即當yi=cjI為1,否則I為0。

2.2 距離度量

k近鄰分類模型的空間一般是n維實數向量空間Rn. 使用的距離通常是歐氏距離,但也可以是其它距離,如:Lp距離或Minkowsk距離。

2.3 演算法舉例

例題:假設有6個二維資料點{(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)},資料點位於二維空間內,如下圖所示。為了能有效的找到最近鄰,k-d樹採用分而治之的思想,即將整個空間劃分為幾個小部分,首先,粗黑線將空間一分為二,然後在兩個子空間中,細黑直線又將整個空間劃分為四部分,最後虛黑直線將這四部分進一步劃分。

這裡寫圖片描述
6個二維資料點{(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)}構建kd樹的具體步驟為:

  • 確定:split域=x。具體是:6個數據點在x,y維度上的資料方差分別為39,28.63,所以在x軸上方差更大,故split域值為x;
  • 確定:Node-data = (7,2)。具體是:根據x維上的值將資料排序,6個數據的中值(所謂中值,即中間大小的值)為7,所以Node-data域位資料點(7,2)。這樣,該節點的分割超平面就是通過(7,2)並垂直於:split=x軸的直線x=7;
  • 確定:左子空間和右子空間。具體是:分割超平面x=7將整個空間分為兩部分:x<=7的部分為左子空間,包含3個節點={(2,3),(5,4),(4,7)};另一部分為右子空間,包含2個節點={(9,6),(8,1)};
  • 如上演算法所述,kd樹的構建是一個遞迴過程,我們對左子空間和右子空間內的資料重複根節點的過程就可以得到一級子節點(5,4)和(9,6),同時將空間和資料集進一步細分,如此往復直到空間中只包含一個數據點。

3、演算法Python實現