转载

机器学习经典算法——k近邻算法

简单解释:采用测量不同特征值之间距离的方法进行分类的算法。

主要优点是精度高,缺点是计算和空间负责度高,适用于数值型和标称型。

k近邻算法是一个理论上比较成熟的方法,是机器学习中最简单的算法之一。该方法的思路是:如果一个样本在特征空间中的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)

实际应用中,有交友网站中,两人的匹配度情况,就是计算不同维度的相似性和要求的匹配度。

原文  http://www.cnblogs.com/pyer/p/5186624.html
正文到此结束
Loading...