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訓練集數據
準確度較高(與訓練集和個人書寫習慣相關性大)