机器学习(五) ——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

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2017-12-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏量化投资与机器学习

【致敬周杰伦】基于TensorFlow让机器生成周董的歌词(附源码)

? 周杰伦 深深地 影响了我们 一代人 这句话 不足为过 前言 今日推文将介绍如何使用TensorFlow一步步来搭建一个序列建模的应用——机器创作歌词,训练...

5765
来自专栏机器学习算法全栈工程师

Logistic回归实战篇之预测病马死亡率(三)

作 者:崔家华 编 辑:李文臣 四、使用Sklearn构建Logistic回归分类器 开始新一轮的征程,让我们看下Sklearn的Logistic回归分类器! ...

3259
来自专栏机器学习算法与Python学习

SVM大解密(附代码和公式)

1285
来自专栏人工智能LeadAI

TensorFlow应用实战 | 编写训练的python文件

一个错误的个人使用,因为我的TensorFlow版本较老。keras并没有被集成进来。

952
来自专栏编程软文

前端慌不慌?用深度学习自动生成HTML代码

1986
来自专栏人工智能头条

SVM大解密(附代码和公式)

1792
来自专栏数据派THU

一文读懂支持向量机SVM(附实现代码、公式)

支持向量机(SVM),一个神秘而众知的名字,在其出来就受到了莫大的追捧,号称最优秀的分类算法之一,以其简单的理论构造了复杂的算法,又以其简单的用法实现了复杂的问...

833
来自专栏量子位

如何用TensorFlow构建RNN?这里有一份极简的教程

王小新 编译自 KDnuggets 量子位 出品 | 公众号 QbitAI 本文作者Erik Hallström是一名深度学习研究工程师,他的这份教程以Echo...

3886
来自专栏人工智能LeadAI

简易的深度学习框架Keras代码解析与应用

总体来讲keras这个深度学习框架真的很“简易”,它体现在可参考的文档写的比较详细,不像caffe,装完以后都得靠技术博客,keras有它自己的官方文档(不过是...

4917
来自专栏机器之心

前端慌不慌?用深度学习自动生成HTML代码

34211

扫描关注云+社区