↑ 点击上方【计算机视觉联盟】关注我们
上一篇已经介绍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个大厂心得体会,纯干货分享(大疆、百度...)
● 到底什么是“机器学习”?机器学习有哪些基本概念?(简单易懂)
● 带你自学Python系列(一):变量和简单数据类型(附思维导图)
● 带你自学Python系列(二):Python列表总结-思维导图
● 斯坦福李飞飞高徒Johnson博士论文: 组成式计算机视觉智能(附195页PDF)
● 【工作篇】华为武汉长沙地区2020届猎户座寒假实习生招聘