今晚本來良心發現,連改了5、6個積累已久的潛在BUG以及需要效率優化的代碼,改完已經8點了,才發現說好的機器學習筆記沒寫。不過還好是KNN,很友好很簡單,松了一口氣,大家就當休息一下換換腦子吧。
KNN算法的定義:
KNN通過測量不同樣本的特征值之間的距離進行分類。它的思路是:如果一個樣本在特征空間中的k個最相似(即特征空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。K通常是不大於20的整數。KNN算法中,所選擇的鄰居都是已經正確分類的對象。該方法在定類決策上只依據最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。
下面通過一個簡單的例子說明一下:如下圖,綠色圓要被決定賦予哪個類,是紅色三角形還是藍色四方形?如果K=3,由於紅色三角形所占比例為2/3,綠色圓將被賦予紅色三角形那個類,如果K=5,由於藍色四方形比例為3/5,因此綠色圓被賦予藍色四方形類。
由此也說明了KNN算法的結果很大程度取決於K的選擇。
KNN算法的好處在於新數據進來,分類器可以馬上學習並適應,但是計算成本也是線性增長,存儲也是問題。
數學中的幾個距離概念:
先上圖比較直觀:下圖中紅線代表曼哈頓距離,綠色代表歐氏距離,也就是直線距離,而藍色和黃色代表等價的曼哈頓距離。曼哈頓距離——兩點在南北方向上的距離加上在東西方向上的距離,即d(i,j)=|xi-xj|+|yi-yj|。
1. 歐氏距離
最常見的兩點之間或多點之間的距離表示法,又稱之為歐幾里得度量,它定義於歐幾里得空間中,如點 x = (x1,...,xn) 和 y = (y1,...,yn) 之間的距離為:
(1)二維平面上兩點a(x1,y1)與b(x2,y2)間的歐氏距離:
(2)三維空間兩點a(x1,y1,z1)與b(x2,y2,z2)間的歐氏距離:
(3)兩個n維向量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的歐氏距離:
也可以用表示成向量運算的形式:
2. 曼哈頓距離
我們可以定義曼哈頓距離的正式意義為L1-距離或城市區塊距離,也就是在歐幾里得空間的固定直角坐標系上兩點所形成的線段對軸產生的投影的距離總和。例如在平面上,坐標(x1, y1)的點P1與坐標(x2, y2)的點P2的曼哈頓距離為: 要注意的是,曼哈頓距離依賴座標系統的轉度,而非系統在座標軸上的平移或映射。
通俗來講,想象你在曼哈頓要從一個十字路口開車到另外一個十字路口,駕駛距離是兩點間的直線距離嗎?顯然不是,除非你能穿越大樓。而實際駕駛距離就是這個“曼哈頓距離”,此即曼哈頓距離名稱的來源, 同時,曼哈頓距離也稱為城市街區距離(City Block distance)。
(1)二維平面兩點a(x1,y1)與b(x2,y2)間的曼哈頓距離
(2)兩個n維向量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的曼哈頓距離
3. 切比雪夫距離
若二個向量或二個點p 、and q,其座標分別為及
,則兩者之間的切比雪夫距離定義如下:
,
這也等於以下Lp度量的極值:,因此切比雪夫距離也稱為L∞度量。
以數學的觀點來看,切比雪夫距離是由一致范數(uniform norm)(或稱為上確界范數)所衍生的度量,也是超凸度量(injective metric space)的一種。
在平面幾何中,若二點p及q的直角坐標系坐標為及
,則切比雪夫距離為:
。
玩過國際象棋的朋友或許知道,國王走一步能夠移動到相鄰的8個方格中的任意一個。那么國王從格子(x1,y1)走到格子(x2,y2)最少需要多少步?。你會發現最少步數總是max( | x2-x1 | , | y2-y1 | ) 步 。有一種類似的一種距離度量方法叫切比雪夫距離。(此處可在草稿紙上推導)
(1)二維平面兩點a(x1,y1)與b(x2,y2)間的切比雪夫距離
(2)兩個n維向量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的切比雪夫距離
這個公式的另一種等價形式是
(2^5=32,3^5=243……只能幫到這了)
4. 閔可夫斯基距離(Minkowski Distance)
閔氏距離不是一種距離,而是一組距離的定義。
(1) 閔氏距離的定義
兩個n維變量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的閔可夫斯基距離定義為:
其中p是一個變參數。
當p=1時,就是曼哈頓距離
當p=2時,就是歐氏距離
當p→∞時,就是切比雪夫距離
根據變參數的不同,閔氏距離可以表示一類的距離。
理論基礎打好了,下面演示如何使用sklearn中的KNN算法(還是萬年不變的標准化后的鳶尾花數據集):
如何選擇 k 是一個重點,並且需要標准化數據。例子中用到的minkowski distance (閔可夫斯基距離)是普通的 Euclidean (歐式距離)和 Manhattan distance (曼哈頓距離) 的擴展。
下周學習如何度量分類算法的性能好壞(Scoring metrics for classification),敬請期待:)