4.1 最鄰近規則分類(K-Nearest Neighbor)KNN演算法
阿新 • • 發佈:2019-01-03
1968年提出的分類演算法
輸入基於示例的學習(instance-based learning),懶惰學習(lazy learning)
例子:
演算法詳述步驟:
為了判斷未知例項類別,用所有已知類別的例項作為參照
選擇引數k
計算未知例項與所有已知例項的距離
選擇最近K個已知例項
根據少數服從多數的投票法則(majority-voting),讓未知例項歸類為K個最鄰近樣本中最多數的類別
演算法詳述細節:
關於K
關於距離的衡量方法:
Euclidean Distance定義
其他距離衡量:餘弦值(cos),相關度(correlation),曼哈頓距離(Manhattan distance)
計算距離:
import math
def ComputeEuclideanDistance(x1,y1,x2,y2):
d = math.sqrt(math.pow(x1-x2,2)+math.pow(y1-y2,2))
return d
d_ag = ComputeEuclideanDistance(3,104,18,90)
print("d_ag: ",d_ag)
舉例:
演算法優點:
簡單,易於理解,容易實現,通過對K的選擇可具備丟噪音資料的健壯性
演算法缺點:
需要大量空間儲存所有已知例項
演算法複雜度高(需要比較所有已知例項與要分類的例項)
當樣本分佈不平衡時,比如其中一類樣本過大(例項數量過多)佔主導的時候,新的未知例項容易被歸類為這個主導樣本,因為這類樣本例項數量過大,但這個新的未知例項實際並沒接近目標樣本
改進版本:
考慮距離,根據距離加上權重
比如:1/d(d:距離)