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

时间:2022-04-23
本文章向大家介绍机器学习(五)——k-近邻算法进一步探究,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

机器学习(五)

——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