[機器學習算法系列] KNN (k-近鄰算法)

[機器學習算法系列] KNN (K-Nearest Neighbor, k-近鄰算法)


算法分類

  • 監督學習

目的

  • 對數據進行分類
  • eg. 下圖中藍色點是屬於綠色陣營仍是紅色陣營?

優缺點分析

優勢:算法

  • 精度高
  • 對異常值不敏感

缺點 :機器學習

  • 計算複雜度十分高

算法核心

  • 依靠歐式距離公式來計算距離,能夠應用到多維學習

    d=sqrt( ∑(xi1-xi2)^2 ) 這裏i=1,2..nrest

  • k 的意義: 取離目標點最近的k個點code

KNN 流程

  • 數據準備:
    • 樣本點集
    • 樣本類別
  • 算法過程:
    • 每一個預測點計算與全部樣本點之間的距離 (這就是爲何算法複雜度高, 數據不可複用,沒有訓練意義)
    • 取離目標點最近的k個樣本點,選擇k中數量最多的類型做爲目標點的類別

僞代碼

/**
parameters:
    inputVec: 輸入向量
    dataSet : 原始數據集(基本元素爲樣本向量)        
    dataClassVect: 樣本類別向量
    k : 取最近的k個點
return :
    類別
*/
classify(inputVec, dataSet, dataClassVect, k):
    //key->距離 value->類別
    distances = {}
    for i=0 to dataSet.len:
        distances.add(calculateDistance(intputVec, data), dataClassVect[i])
    distances.sortByKey_asc()
    
    //key->類別 value->出現次數
    classCount = {}
    for i=0 to k:
        classCount[distances[i]]++
    classCount.sortByValue_desc()
    return classCount.first().key()
相關文章
相關標籤/搜索