阿小信大人的头像
做你说过的,说你能做的 阿小信大人

k-近邻算法2014-09-02 05:07

k-近邻算法

工作原理

存在一个样本数据集合(训练样本集),并且样本集中每个数据都存在标签,输入没有标签的新数据后,将新数据的每个特征与样本集中的数据对应的特征进行比较,然后算法提取样本集中特征前k个最相似(最近邻)的数据的分类标签。

算法操作

  • 计算已知类别数据集中的点与当前点之间的距离
  • 按照距离递增次序排序
  • 选取与当前点距离最小的k个点
  • 确定前k个点所在类别的出现频率
  • 返回前k个点出现频率最高的类别作为当前点的预测分类

实现代码

def classify0(in_x, dataset, labels, k):
    # in_x是用于分类的输入向量,dataset是训练样本,labels是标签向量
    dataset_rows = dataset.shape[0]

    # 计算距离
    diff_mat = tile(in_x, (dataset_rows, 1)) - dataset
    sq_diff_mat = diff_mat ** 2
    sq_distances = sq_diff_mat.sum(axis=1)  # axis=1分行累加,默认是全部元素总和
    distances = sq_distances ** 0.5

    sorted_dist_indicies = distances.argsort()

    class_count = {}

    for i in range(k):
        vote_label = labels[sorted_dist_indicies[i]]
        class_count[vote_label] = class_count.get(vote_label, 0) + 1

    sorted_class_count = sorted(
        class_count.iteritems(),
        key=operator.itemgetter(1),
        reverse=True)

    return sorted_class_count[0][0]

如果您觉得从我的分享中得到了帮助,并且希望我的博客持续发展下去,请点击支付宝捐赠,谢谢!

若非特别声明,文章均为阿小信的个人笔记,转载请注明出处。文章如有侵权内容,请联系我,我会及时删除。

#Python#  
分享到:
阅读[927] 评论[0]

下一篇:引用与复制

你可能也感兴趣的文章推荐

本文最近访客

发表评论