機械は経典の計算方法を勉強します.

1540 ワード

簡単な説明:異なる固有値間の距離を測定する方法を用いて分類するアルゴリズム.
主な利点は精度が高く、欠点は計算と空間的責任度が高く、数値型と公称型に適していることである.
k近傍アルゴリズムは理論的に比較的成熟した方法であり,機械学習における最も簡単なアルゴリズムの一つである.この方法の考え方は、1つのサンプルが特徴空間内のk個の最も似たサンプルの多くがあるカテゴリに属する場合、このサンプルもこのカテゴリに属するということである.
以下はPythonによって実現されたk‐近隣アルゴリズムであり、サンプルデータdata_setの点と分類すべき点との距離を計算し、距離によって並べ替えられ、そして前のK個の点を取り出して、これらの点の属するラベルの数を計算し、最高のラベルを分類結果としてカウントすることが大まかな考えである.
#! /data/server/python/bin/python
# -*- coding:utf-8 -*-
"""
k-    
"""
import math
import operator
from collections import Counter


def knn(position, data_set, labels, k):
    """
    k-    
    :param position:     
    :param data_set:     
    :param labels:     
    :param k:   
    :return:     
    """
    distance_list = []
    for index, item in enumerate(data_set):
        distance_list.append((
            labels[index],
            math.sqrt(reduce(operator.add, [(v - position[i]) ** 2 for i, v in enumerate(item)]))
        ))
    distance_list = sorted(distance_list, key=lambda x: x, reverse=True)
    result = Counter([val[0] for val in distance_list[:k]])
    result_labels = sorted(result.items(), lambda x, y: cmp(x[1], y[1]), reverse=True)
    return result_labels[0][0]


if __name__ == "__main__":
    point = [0.2, 0.3]
    data_set = [[1, 1.1], [1, 1], [0, 0], [0, 0.1]]
    labels = ['A', 'A', 'B', 'B']
    k = 3
    print knn(point, data_set, labels, k)
実際の応用では、交友サイトにおいて、二人の整合度は、異なる次元の類似性と要求の整合度を計算することである.