10行代码实现kNN算法

使用 numpy 库,只需 10 行简单的代码就能实现 k 近邻算法。

算法逻辑

对要分类的点(X)进行下列运算:

  1. 计算 X 与已知分类的所有点的距离(欧氏距离);
  2. 距离按照递增排序;
  3. 选取距离最小的 k 个点;
  4. 计算这 k 个点中,每个分类出现的频率;
  5. 取频率最高的分类为预测分类。

代码实现

def kNN(X, dataset, labels, k):
    # 计算X与所有其他点的差值
    diff = np.tile(X, (dataset.shape[0], 1)) - dataset
    # 计算欧氏距离
    distances = ((diff**2).sum(axis=1))**0.5
    # 排序
    sorted_idx = distances.argsort()
    class_cnt = {}
    for i in range(k):
        label = labels[sorted_idx[i]]
        class_cnt[label] =class_cnt.get(label, 0) + 1
    # 找出频率最高的分类作为预测结果
    sorted_class = sorted(class_cnt.iteritems(), key=operator.itemgetter(1), reverse=True)
    return sorted_class[0][0]

enjoy!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容