6篇博文帶你走進機器學習大門【二】K-近鄰算法

1 K-NN 近鄰算法

1.1 定義

如果一個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。

  • K-近鄰算法API

  • sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)

    • n_neighbors:int,可選(這是個超參數,默認= 5),

1.2 距離度量

  • 歐式距離(Euclidean Distance)
  • 曼哈頓距離(Manhattan Distance)
  • 切比雪夫距離 (Chebyshev Distance)
  • 閔可夫斯基距離(Minkowski Distance)

其中p是一個變參數:

當p=1時,就是曼哈頓距離;

當p=2時,就是歐氏距離;

當p→∞時,就是切比雪夫距離。

根據p的不同,閔氏距離可以表示某一類/種的距離。

小結:

閔氏距離,包括曼哈頓距離、歐氏距離和切比雪夫距離都存在明顯的缺點:

e.g. 二維樣本(身高[單位:cm],體重[單位:kg]),現有三個樣本:a(180,50),b(190,50),c(180,60)。

a與b的閔氏距離(無論是曼哈頓距離、歐氏距離或切比雪夫距離)等於a與c的閔氏距離。但實際上身高的10cm並不能和體重的10kg劃等號。

閔氏距離的缺點

(1)將各個分量的量綱(scale),也就是“單位”相同的看待了;

(2)未考慮各個分量的分佈(期望,方差等)可能是不同的。

  • 標準化歐氏距離 (Standardized EuclideanDistance)

標準化歐氏距離是針對歐氏距離的缺點而作的一種改進。

思路:既然數據各維分量的分佈不一樣,那先將各個分量都“標準化”到均值、方差相等。假設樣本集X的均值(mean)爲m,標準差(standard deviation)爲s,X的“標準化變量”表示爲:

  • 餘弦距離(Cosine Distance)

1.3 kd樹

  • 什麼是kd樹

爲了避免每次都重新計算一遍距離,算法會把距離信息保存在一棵樹裏,這樣在計算之前從樹裏查詢距離信息,儘量避免重新計算。

  • 構造方法

(1)構造根結點,使根結點對應於K維空間中包含所有實例點的超矩形區域;

(2)通過遞歸的方法,不斷地對k維空間進行切分,生成子結點。在超矩形區域上選擇一個座標軸和在此座標軸上的一個切分點,確定一個超平面,這個超平面通過選定的切分點並垂直於選定的座標軸,將當前超矩形區域切分爲左右兩個子區域(子結點);這時,實例被分到兩個子區域。

(3)上述過程直到子區域內沒有實例時終止(終止時的結點爲葉結點)。在此過程中,將實例保存在相應的結點上。

(4)通常,循環的選擇座標軸對空間切分,選擇訓練實例點在座標軸上的中位數爲切分點,這樣得到的kd樹是平衡的(平衡二叉樹:它是一棵空樹,或其左子樹和右子樹的深度之差的絕對值不超過1,且它的左子樹和右子樹都是平衡二叉樹)。

KD樹中每個節點是一個向量,和二叉樹按照數的大小劃分不同的是,KD樹每層需要選定向量中的某一維,然後根據這一維按左小右大的方式劃分數據。在構建KD樹時,關鍵需要解決2個問題:

(1)選擇向量的哪一維進行劃分;

(2)如何劃分數據;

第一個問題簡單的解決方法可以是隨機選擇某一維或按順序選擇,但是更好的方法應該是在數據比較分散的那一維進行劃分(分散的程度可以根據方差來衡量)。好的劃分方法可以使構建的樹比較平衡,可以每次選擇中位數來進行劃分,這樣問題2也得到了解決。

1.4 特徵工程-特徵預處理

  1. 什麼是特徵預處理

通過一些轉換函數將特徵數據轉換成更加適合算法模型的特徵數據過程

  1. 歸一化

  2. 標準化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章