第2章 k-近邻算法总结

算法思想:

    训练数据(特征+标签),新数据(特征)。输入新数据后,将新数据的每个特征与训练集(特征)中每条数据对应的特征进行比较,选择最相近的前k条数据,统计这k条数据所对应的标签种类及个数,选择出现次数最多的标签,作为新数据的分类标签。

算法伪代码:

  • 输入:新数据向量,训练集,训练集对应的标签向量,k
  • 获取训练集的大小n,即行数
  • 新数据向量重复n行,1列。(方便计算距离)
  • 计算距离(可采用欧式距离)                           
                    重复n行1列后的新数据 - 训练集数据(以矩阵形式相减,对应位置上数据相减)           
                    求相减后矩阵每个位置上数据的平方
                    对矩阵中每一行求和
                    对求和后的矩阵(n行1列)每一行中的和开方,即得新数据和训练集中每一行数据的欧式距离
  • 根据距离升序排序,并得到升序排序后对应的索引
  • 选取前k个数据,并用字典存放这k条数据对应的标签和标签出现的次数
                  依次获取这k条数据对应的标签,判断是否在字典中。若在字典中,则该标签对应的值+1。
                  反之,在字典中添加该标签,且对应的值+1。
  • 根据字典中value值进行降序排序
  • 返回频率最大的分类标签

算法应用一般步骤:

准备数据-从文本文件中解析数据(即得到训练集数据和对应的标签数据)

思想:将文本文件内容通过readlines(),转换为一个列表对象。其中原始数据的每一行数据都是列表的每一个元素。依次读取列表文件中的每个元素,根据特征间的特点(如tab键,空格键等),将一行数据的多个特征值划分为单独字符,前面的若干个字符放入训练集矩阵的一行中,最后一个字符为标签字符,添加到标签向量中。

分析数据-使用Matplotlib创建散点图

定义画布---划分区域---定义x轴,y轴

准备数据-归一化数值

在处理不同取值范围的特征值时,为了避免某个特征值对计算结果的影响,通常采用的方法是将数值归一化,如将取值范围处理为0到1或者-1到1之间。
比如:newValue = (oldValue - min) / (max - min)
编程思想:分别计算每一列的最小值,最大值,取值范围(均为1行n列的矩阵)。再通过tile方法分别将其扩展m行n列,便和原始数据的大小一致。原始数据矩阵-最小值矩阵,将得到的结果矩阵 / 取值范围矩阵,便可达到归一化后的矩阵。

测试算法:作为完整程序验证分类器

机器算法很重要的工作就是评估算法的正确率,通常我们只提供已有数据的90%作为训练样本来训练分类器,而使用其余的10%数据去测试分类器,检查分类器的正确率。而且,需要注意10%的数据应该是随机的。





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值