Python机器学习k-近邻算法(K Nearest Neighbor)实例详解


Posted in Python onJune 25, 2018

本文实例讲述了Python机器学习k-近邻算法。分享给大家供大家参考,具体如下:

工作原理

存在一份训练样本集,并且每个样本都有属于自己的标签,即我们知道每个样本集中所属于的类别。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后提取样本集中与之最相近的k个样本。观察并统计这k个样本的标签,选择数量最大的标签作为这个新数据的标签。

用以下这幅图可以很好的解释kNN算法:

Python机器学习k-近邻算法(K Nearest Neighbor)实例详解

不同形状的点,为不同标签的点。其中绿色点为未知标签的数据点。现在要对绿色点进行预测。由图不难得出:

  • 如果k=3,那么离绿色点最近的有2个红色三角形和1个蓝色的正方形,这3个点投票,于是绿色的这个待分类点属于红色的三角形。
  • 如果k=5,那么离绿色点最近的有2个红色三角形和3个蓝色的正方形,这5个点投票,于是绿色的这个待分类点属于蓝色的正方形。

kNN算法实施

伪代码

对未知属性的数据集中的每个点执行以下操作

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

欧式距离(计算两点之间的距离公式)

计算点x与点y之间欧式距离

Python机器学习k-近邻算法(K Nearest Neighbor)实例详解

python代码实现

# -*- coding:utf-8 -*-
#! python2
import numpy as np
import operator
# 训练集
data_set = np.array([[1., 1.1],
           [1.0, 1.0],
           [0., 0.],
           [0, 0.1]])
labels = ['A', 'A', 'B', 'B']
def classify_knn(in_vector, training_data, training_label, k):
  """
  :param in_vector: 待分类向量
  :param training_data: 训练集向量
  :param training_label: 训练集标签
  :param k: 选择最近邻居的数目
  :return: 分类器对 in_vector 分类的类别
  """
  data_size = training_data.shape[0] # .shape[0] 返回二维数组的行数
  diff_mat = np.tile(in_vector, (data_size, 1)) - data_set # np.tile(array, (3, 2)) 对 array 进行 3×2 扩展为二维数组
  sq_diff_mat = diff_mat ** 2
  sq_distances = sq_diff_mat.sum(axis=1) # .sum(axis=1) 矩阵以列求和
  # distances = sq_distances ** 0.5 # 主要是通过比较求最近点,所以没有必要求平方根
  distances_sorted_index = sq_distances.argsort() # .argsort() 对array进行排序 返回排序后对应的索引
  class_count_dict = {} # 用于统计类别的个数
  for i in range(k):
    label = training_label[distances_sorted_index[i]]
    try:
      class_count_dict[label] += 1
    except KeyError:
      class_count_dict[label] = 1
  class_count_dict = sorted(class_count_dict.iteritems(), key=operator.itemgetter(1), reverse=True) # 根据字典的value值对字典进行逆序排序
  return class_count_dict[0][0]
if __name__ == '__main__':
  vector = [0, 0] # 待分类数据集
  print classify_knn(in_vector=vector, training_data=data_set, training_label=labels, k=3)

运行结果:B

算法评价

  • 优点:精度高、对异常值不敏感、无数据输入假定
  • 缺点:计算复杂度高、空间复杂度高
  • 使用数据范围:数据型和标称型
  • 适用:kNN方法通常用于一个更复杂分类算法的一部分。例如,我们可以用它的估计值做为一个对象的特征。有时候,一个简单的kNN算法在良好选择的特征上会有很出色的表现。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中的并发编程实例
Jul 07 Python
python自定义类并使用的方法
May 07 Python
python中的print()输出
Apr 12 Python
python粘包问题及socket套接字编程详解
Jun 29 Python
linux 下selenium chrome使用详解
Apr 02 Python
全网首秀之Pycharm十大实用技巧(推荐)
Apr 27 Python
Keras之自定义损失(loss)函数用法说明
Jun 10 Python
Keras 使用 Lambda层详解
Jun 10 Python
Python+Opencv实现把图片、视频互转的示例
Dec 17 Python
python3中celery异步框架简单使用+守护进程方式启动
Jan 20 Python
pycharm配置QtDesigner的超详细方法
Jan 25 Python
总结Python使用过程中的bug
Jun 18 Python
python解决字符串倒序输出的问题
Jun 25 #Python
Python决策树之基于信息增益的特征选择示例
Jun 25 #Python
python实现逆序输出一个数字的示例讲解
Jun 25 #Python
详解Python 数据库的Connection、Cursor两大对象
Jun 25 #Python
python逆序打印各位数字的方法
Jun 25 #Python
python爬虫的数据库连接问题【推荐】
Jun 25 #Python
python让列表倒序输出的实例
Jun 25 #Python
You might like
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
2011/09/11 PHP
PHP制作万年历
2015/01/07 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
仿新浪微博返回顶部的jquery实现代码
2012/10/01 Javascript
基于JS实现导航条flash导航条
2016/06/17 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
2017/05/09 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
2018/09/29 Javascript
微信小程序实现省市区三级地址选择
2020/06/21 Javascript
layui实现数据表格隐藏列的示例
2019/10/25 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
JS typeof fn === 'function' && fn()详解
2020/08/22 Javascript
Python单例模式实例分析
2015/01/14 Python
Python contextlib模块使用示例
2015/02/18 Python
基python实现多线程网页爬虫
2015/09/06 Python
浅谈python字符串方法的简单使用
2016/07/18 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
利用python获取Ping结果示例代码
2017/07/06 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
2018/10/22 Python
python+opencv实现霍夫变换检测直线
2020/10/23 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
python 字符串的驻留机制及优缺点
2020/06/19 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
CSS3教程(9):设置RGB颜色
2009/04/02 HTML / CSS
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
美国在线健康和美容市场:Pharmapacks
2018/12/05 全球购物
英国最好的温室之家:Greenhouses Direct
2019/07/13 全球购物
一份报关员的职业规划范文
2014/01/08 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
python开发飞机大战游戏
2021/07/15 Python
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB
HTML5之高度塌陷问题的解决
2022/06/01 HTML / CSS