机器学习(五) ——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 条评论
登录 后参与评论

相关文章

来自专栏跟着阿笨一起玩NET

使用延迟的FileSystemWatcher来避免重复触发事件

  程序里需要监视某个目录下的文件变化情况: 一旦目录中出现新文件或者旧的文件被覆盖,程序需要读取文件内容并进行处理;但在实际处理中发现当一个文件产生变化时,C...

902
来自专栏田超学前端

【微信小程序】c# 实现获取openid、session_key 服务端

5010
来自专栏菩提树下的杨过

基于sliverlight + wcf的web 文字版IM 示例

演示地址: http://task.24city.com/default.html 预览界面: ? 一、布局 采用Grid布局,5行2列 第一行:为登录/注册信...

3226
来自专栏xingoo, 一个梦想做发明家的程序员

【插件开发】—— 6 SWT 复杂控件使用以及布局

前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭...

2349
来自专栏james大数据架构

CSS好看的按钮

好看的按钮 <style> .btn { BORDER-RIGHT: #7b9ebd 1px solid; PADDING-RIGHT: 2px; BORDE...

1997
来自专栏技术之路

sqlserver 的事务和c#的事务

sql的事务 1 sql 2 create database model 3 go 4 use model 5 go 6 create table ...

1919
来自专栏大内老A

开发自己的Data Access Application Block[下篇]

上接:[原创] 我的ORM: 开发自己的Data Access Application Block - Part I 4. Database 下面来介绍重中之重...

2236
来自专栏菩提树下的杨过

Silverlight:利用异步加载Xap实现自定义loading效果

关键点: 1.利用WebClient的DownloadProgressChanged事件更新下载进度 2.下载完成后,分析Xap包的程序集Assembly信息 ...

18610
来自专栏王磊的博客

Net连接mysql的公共Helper类MySqlHelper.cs带MySql.Data.dll下载

MySqlHelper.cs代码如下: using System; using System.Collections.Generic; using System...

4409
来自专栏互联网开发者交流社区

STC-单片机控制系统

1113

扫码关注云+社区