k-近隣アルゴリズム(KNN)

5307 ワード

k-近隣アルゴリズム(KNN)


一、概念


異なる特徴値間の距離を測定する方法で分類する異なる特徴値間の距離を測定する方法で分類する
新たに入力された無分類データと訓練セットの各サンプルとの距離(欧式距離:d=(x A 0−x B 0)2+(x A 1−x B 1)2 d=sqrt{(x_{A_0}−x_{B_0})^2+(x_{A_1}−x_{B_1})^2}d=(xA 0−xB 0)2+(xA 1−xB 1)2)を算出し、最も類似(距離最小)のk個のサンプルのうち、カテゴリ出現回数が最も多いものを新規データのカテゴリとして選択する.

二、特徴

  • 計算は複雑度が高い:各新しいサンプルに対して訓練セットのすべてのサンプルとの距離
  • を計算しなければならない.
  • 訓練アルゴリズムがないステップ
  • 三、正規化数値

  • 使用原因:特徴値間の差が大きすぎる(例えば、特徴値1はいずれも零点数、特徴値2はいずれも数千)ため、数値の大きい特徴値が最終分類の主導的な要因となっている.
  • の利点:分類結果に及ぼす各特徴値の均一化の影響
  • 処理:
    ranges = max_val - min_val
    val = (val - min_val) / ranges
    
  • 四、主な分類コード

    '''
      :
    	inx:          
    	data_mat:        ,numpy  ,        
    	labels:      
    	k:  k 
       :
    	sorted_vote[0][0]:     
    '''
    def classify(in_x, data_mat, labels, k):
        x_mat = tile(in_x, (data_mat.shape[0], 1))
        result_mat = (data_mat- x_mat ) **2
        result_mat = result_mat .sum(axis = 1) ** 0.5
        sorted_index = result_mat .argsort()
        class_vote = {}
        for i in range(k):
            label = labels[sorted_index [i]]
            if label not in class_vote .keys():
                class_vote [label] = 1
            else:
                class_vote [label] = class_vote [label] + 1
        sorted_vote = sorted(class_vote .items(), key=operator.itemgetter(1), reverse=True)
        return sorted_vote[0][0]