前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习(五)——k-近邻算法进一步探究

机器学习(五)——k-近邻算法进一步探究

作者头像
企鹅号小编
发布2018-01-22 15:23:18
5160
发布2018-01-22 15:23:18
举报
文章被收录于专栏:人工智能

机器学习(五)

——k-近邻算法进一步探究

(原创内容,转载请注明来源,谢谢)

一、概述

现采用k-近邻算法,进行分类应用。数据源采用《机器学习实战》提供的数据集,其中每个样本有3个特征值,约有1000个样本。

k近邻算法的基本思想,是根据现有的训练集,当新增一个需要判断的元素时,会计算该元素分别与现有的每个训练样本的距离。距离的计算公式是将该元素的3个特征值(本次实验是3个特征值),分别与每个样本3个对应特征值计算平方差,得到结果。距离公式如下图所示:

二、优化——归一化数值

1、背景

由于不同特征值对应的数值,本身大小差距很大,但是在考虑每个特征值时,可能每个特征值的权重是类似的,这样就会造成“不公平”。

例如:在评价一个篮球运动员的技术统计时,得分数差距(最多和最少)约40,失误数差距约4,不在一个量级,但是失误数量多5带来的负面因素远大于得分数多5,因此就形成了“不公平”。

此时,就需要用到归一化数值。

2、公式

归一化,即将每个数据都归到-1~+1的区间内,公式如下:

newvalue = (old value - min)/(max - min)

即,归一化后的结果等于原值与样本中该特征的最小值的差,除以样本中该特征最大值与最小值的差。

其中分子的算法,有的用到原值减去平均值,也有用到原值减去标准差,目的都在于把结果控制在-1~+1的区间。

3、归一化代码(python)

(为方便查看,用图片形式上传,步骤都已加注释)

三、实际应用

1)首先,需要将数据集取出,转成数组,当作样本,代码如下:

2)将数据归一化处理

即调用上述的autoNorm方法。

3)knn算法——计算距离、排序、取前k个、返回结果中分类最多的那个

4)测试算法效果

1-将文件取出,转成数组

2-数据归一化

3-将训练样本和测试数据集传入,计算误差率

返回结果如下:

经过计算,测试数据100个,误差5个,误差率5%

四、总结

经过编码过程,第一次正式接触机器学习的编程,几个感悟:

1、学习过程中,看书和视频同步进行,我看的视频偏理论,正好实战这本书是实践的,可以互相结合。

2、之前没怎么接触过python,现在接触,发现python真的是很轻巧灵活的,另外建议大家用python的时候,可以装anaconda管理工具。具体内容可以上网搜,装这个以后不需要再装python,在centos环境下,等于是一键安装。这个工具可以随意切换python版本,另外要下载python的库也非常方便。

3、python的numpy库,对于机器学习比较重要,在矩阵处理方面很灵活。

4、knn算法有个不足在于,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数,因此结果如果处于中立的情况下,更有可能是样本结果多的那个值。另外,knn算法由于不训练,是临时比较的,因此数据多的时候计算量很大。

——written by linhxx 2017.12.29

本文来自企鹅号 - PHP思想家媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - PHP思想家媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档