分類演算法-k 鄰近演算法

娃哈哈店長發表於2020-01-19

k- 近鄰 (k-NearestNeighbor,kNN) 分類演算法是資料探勘分類技術中最簡單的方法之一。K- 近鄰演算法是通過測量不同特徵值之間的距離進行分類的。基本思路是:如果一個樣本在特徵空間中的k 個最鄰近樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。該方法在決定類別上只依據最近的一個或幾個樣本的類別來決定待分類樣本所屬的類別。KNN 演算法中,所選擇的鄰居都是已經正確分類的物件。該方法在分類決策上只依據最鄰近的一個或幾個樣本的類別來決定待分類樣本所屬的類別。

0x00歐式距離和馬氏距離

歐式距離計算公式:
分類問題-k-近鄰演算法 樸素貝葉斯 支援向量機 AdaBoot演算法 決策樹 多層感知機

當然也可以使用馬氏距離 Mahalanobis distance 等測顯距離的方法。在K近夠演算法中,當訓練集通近鄰值k、距離度量、決策規則等確定下來時,整個演算法實際上是利用訓練集把特徵空間劃分成一個個子空間,訓練集中的每個樣本佔據部分空間。 對最近鄰而言,當測試祥本落在莫個訓練樣本的領域內,就把測試樣本標記為這一類。

馬氏距離是由印度統計學家馬哈拉諾比斯(P. C. Mahalanobis)提出的,表示資料的協方差距離。它是一種有效的計算兩個未知樣本集的相似度的方法。與歐氏距離不同的是它考慮到各種特性之間的聯絡(例如:一條關於身高的資訊會帶來一條關於體重的資訊,因為兩者是有關聯的)並且是尺度無關的(scale-invariant),即獨立於測量尺度。 對於一個均值為\mu = ( \mu_1, \mu_2, \mu_3, \dots , \mu_p )^T協方差矩陣為Σ的多變數向量x = ( x_1, x_2, x_3, \dots, x_p )^T,其馬氏距離為
D_M(x) = \sqrt{(x - \mu)^T \Sigma^{-1} (x-\mu)}
馬氏距離也可以定義為兩個服從同一分佈並且其協方差矩陣為Σ的隨機變數\vec{x}\vec{y}的差異程度:
d(\vec{x},\vec{y})=\sqrt{(\vec{x}-\vec{y})^T\Sigma^{-1} (\vec{x}-\vec{y})}

如果協方差矩陣為單位矩陣,馬氏距離就簡化為歐式距離;如果協方差矩陣為對角陣,其也可稱為正規化的馬氏距離。

d(\vec{x},\vec{y})=\sqrt{\sum_{i=1}^p  {(x_i - y_i)^2 \over \sigma_i^2}}

其中σi是xi的標準差

對於上述的馬氏距離,本人研究了一下,雖然看上去公式很簡單的,但是其中存在很多模糊的東西,為什麼馬氏距離是一種考濾到各種特性之間的聯絡並且是尺度無關的?為什麼可以使用協方差矩陣的逆矩陣去掉單位而使之尺度無關。基於此,以下是個人的一些想法。

0x01k-近鄰演算法的一般流程如下。

①計算測試資料與各個訓練資料之間的距離。

②按照距離的遞增關係進行排序。

③選取距離最小的k個點。

④確定前k個點所在類別的出現頻率。

⑤返回前k個點中出現頻率最高的類別作為測試資料的預測分類。

統計學習方法中引數選擇-般是要在偏差(Bias)與方差(Variance)之間取得一個平衡(Tradeoff)。對kNN而言,k值的選擇也要在偏差與方差之間取得平衡。若k取值很小,如k=1,則分類結果容易因為噪聲點的干擾而出現錯誤,此時方差較大;若k取值很大,如k=N(N為訓練集的樣本數),則對所有測試樣本而言,結果都-一樣, 分類的結果都是樣本最多的類別,這樣穩定是穩定了,但預測結果與真實值相差太遠,偏差過大。 因此,k值既不能取太大也不能取太小,通常的做法是,利用交叉驗證(Cross Vldation)評估- -系列不同的k值,選取結果最好的k值作為訓練引數。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

文章!!首發於我的部落格Stray_Camel(^U^)ノ~YO

相關文章