机器学习之K-近邻算法代码分析

在看Peter的K-近邻实战时,发现原来“手写识别系统”不止是图像处理和图像识别可以解决,原来从图像也是矩阵数据的层面来看,不同数字的识别也是数据分类问题(2333……又打开了思维的新视角)。因本身是学图像处理出身,所以关于手写识别系统,思维受限在怎样进行图像处理、怎样训练数字模型、怎样进行数字识别了。

该文先简单在Jupyter上实现K-近邻算法。后续会专门通过一步步构造使用K-近邻分类器实现手写识别系统(识别数字0~9)。


基础知识准备——Python导入数据

在构造K-近邻算法之前,我们需要先编写一些通用函数,我们可以把所有的通用函数写的一个python文件(.py)下。下面写个例子,看下python里怎样写通用函数并调用。小编使用的Jupyter(可以直接在notebook下编写通用函数和测试,建立.py可选)。

依次执行Cells。In[4]和In[5]是定义了通用函数createDataSet(),函数里写死了一组数据和对应标签,标签有两类A和B。我们通过这个简单例子,可以大致了解Python如何解析数据和加载数据,上一篇了解了KNN算法的工作原理。下面使用这些知识和方法完成分类任务。


基础知识准备——文本文件中解析数据

该部分实现功能:使用k-近邻算法将魅族数据划分到某个类中,代码和释义如下:

输入参数inX:用于分类的输入向量;

输入参数dataSet:输入的训练样本集

输入参数labels:标签向量(元素数目和dataSet的行数相同)

输入参数k:用于选择最近邻的数目。

计算两个向量点xA和xB之间的距离用的欧式距离:

计算完所有点之间的距离后,对数据按照从小到大的次序排序。然后确定前k个距离最小元素所在的主要分类,输入k总是正整数。最后,将classCount字典分解为元组列表,然后导入运算符模块的itemgetter方法,按照第二个元素的次序对元组进行排序。此处的排序为逆序,即按照从最大到最小次序排序,最后返回发生频率最高的元素标签。


基础知识准备——测试分类器

为了预测数据所在分类,执行:

小结

在参照实例进行学习和测试的过程中,遇到了很多问题,有编程语法方面的,也有算法理解上的。但不管怎样,算是跑通了个实例。需要注意的是书里提供的代码有些问题,有的问题是因为python版本变化引起的,也有书写方式引起的,比如,在引用python模块时,尽量不要import *,需要用什么就import什么。


我能够看得更远,那是因为我站在巨人的肩上

 — 艾萨克·牛顿

欢迎转发到朋友圈或分享给好友


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值