k近鄰算法(kNN):簡單粗暴

kNN(k-nearest neighbors algorithm)

這是一個簡單粗暴的分類器(Classifier)算法,分類效果不錯,但是對於異常值不敏感,而且算法的複雜度高,每次計算都要遍歷整個訓練集(Training Data Set),效率不高.
這裏寫圖片描述

距離量度相似性 #1

kNN算法的思想就是把整個訓練集在依照特徵值座標軸標定後,把測試量標定到特徵值空間後,計算測試量與所有訓練數據的距離,按照距離從小到大排列,選取距離最小的k個訓練點,統計這k個點的Labels數量最多的Label就是kNN得到的分類結果(簡單說,就是測試量和訓練集的哪個(些)量最相似)。
這裏寫圖片描述

歸一化不同特徵量距離 #2

考慮兩組特徵量(A、B),A的數量級爲1,B的數量級爲100000,當用距離來衡量相似性時,B的大小遠大於A,所以只有B在起作用,A被忽略了,然而我們是想A、B的權重一樣的,所以我們要把A、B歸一化,以使得A、B一起決定距離.
歸一化公式:這裏寫圖片描述

python 代碼如下:

def autoNorm(dataSet):
    minVals = dataSet.min(0)
    maxVals = dataSet.max(0)
    ranges = maxVals - minVals
    normDataSet = zeros(shape(dataSet))
    m = dataSet.shape[0]
    normDataSet = (dataSet-tile(minVals, (m,1)))/tile(ranges, (m,1))
    return normDataSet, ranges, minVals

算法構建與應用 #3

手寫數字識別demo:

相關參數:

k=15
2.3M訓練集數據
準確度較高(與訓練集和個人書寫習慣相關性大)

這裏寫圖片描述

這裏寫圖片描述

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