独家总结 | KNN算法Python实现(附代码详解及注释)

↑ 点击上方【计算机视觉联盟】关注我们

上一篇已经介绍KNN算法的基本原理,这篇就不再赘述(公式太多,读不懂? 一文带你领略KNN近邻算法~简单易懂)

纸上得来终觉浅,仅仅懂了原理还不够,要用代码实践才是王道,今天小编就附上小编自己在学习中实践的KNN算法。


KNN算法伪代码:

对未知类别属性的数据集中的每个点一次执行以下操作:

(1)计算已知类别数据集中的点与当前点之间的距离;

(2)按照距离递增次序排序;

(3)选取与当前点距离最小的k个点;

(4)确定前k个点所在类别出现的频率

(5)返回前k个点出现频率最高的类别作为当前点的预测分类;

Python代码如下:

 1#!/usr/bin/env python
 2# -*- coding:utf-8 -*-
 3from numpy import *
 4import operator
 5
 6
 7def createdataset():
 8    group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
 9    labels = ['A', 'A', 'B', 'B']
10    return group, labels
11
12
13# inX 用于分类的输入向量
14# dataSet表示训练样本集
15# 标签向量为labels,标签向量的元素数目和矩阵dataSet的行数相同
16# 参数k表示选择最近邻居的数目
17def classify0(inx, data_set, labels, k):
18    """实现k近邻"""
19    data_set_size = data_set.shape[0]   # 数据集个数,即行数
20    diff_mat = tile(inx, (data_set_size, 1)) - data_set   # 各个属性特征做差
21    sq_diff_mat = diff_mat**2  # 各个差值求平方
22    sq_distances = sq_diff_mat.sum(axis=1)  # 按行求和
23    distances = sq_distances**0.5   # 开方
24    sorted_dist_indicies = distances.argsort()  # 按照从小到大排序,并输出相应的索引值
25    class_count = {}  # 创建一个字典,存储k个距离中的不同标签的数量
26
27    for i in range(k):
28        vote_label = labels[sorted_dist_indicies[i]]  # 求出第i个标签
29        # 访问字典中值为vote_label标签的数值再加1,
30        #class_count.get(vote_label, 0)中的0表示当为查询到vote_label时的默认值
31        class_count[vote_label] = class_count.get(vote_label, 0) + 1
32    # 将获取的k个近邻的标签类进行排序
33    sorted_class_count = sorted(class_count.items(), 
34key=operator.itemgetter(1), reverse=True)
35    # 标签类最多的就是未知数据的类
36    return sorted_class_count[0][0]
37
38
39x = [0, 0]  # 未知分类数据
40data = createdataset()  # 创建训练数据集合标签实例
41a = classify0(x, data[0], data[1], 3)  # 调用k近邻分类
42print("未知数" + str(x) + "的类别为:", end=' ')
43print(a)  # 输出类别

上述代码运行结果为:

你也可以更改未知数据进行测试,本篇小编测试的是[0, 0]数据。

这次小编仅仅是自己创建的简单数据集实现的KNN算法,后续小编将会继续更新KNN应用的实际例子

往期回顾

● 亲身经历2019年校招8个大厂心得体会,纯干货分享(大疆、百度...)

● 带你详细了解机器视觉竞赛—ILSVRC竞赛

● 到底什么是“机器学习”?机器学习有哪些基本概念?(简单易懂)

● 带你自学Python系列(一):变量和简单数据类型(附思维导图)

● 带你自学Python系列(二):Python列表总结-思维导图

● 带你自学Python系列(三):列表遍历(for循环)

● 2018年度最强的30个机器学习项目!

● 斯坦福李飞飞高徒Johnson博士论文: 组成式计算机视觉智能(附195页PDF)

● 134页《深度学习数学基础笔记》(内附电子书下载)

● 【资源】100页机器学习入门完整版,必须收藏!

● 【工作篇】华为武汉长沙地区2020届猎户座寒假实习生招聘

● 一文详解计算机视觉的广泛应用:网络压缩、视觉问答、可视化、风格迁移

● 2018年最值得关注的10个机器学习开源项目

● 【资源】《PyTorch模型训练实用教程》,必须收藏!

● 机器学习经典书籍李航《统计学习方法》(Python3.6)代码实现(及课件)

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值