声明:本人学习的机器学习以machine learning in action 【美】peter Harrington著为主,练习上面代码并进行适当修改,不涉及任何版权不作任何商业用途,有问题可以联系本人,文中源码到一定时间将会在github上公开。

1、K-近邻算法(k-Nearest Neighbor,KNN)

该算法通过测量不同特征之间的距离来进行分类,说的是每个特征可以通过它的最邻近的K个邻居来表示。

下面是来自维基百科的一幅图:绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类,这就是KNN算法的基本思想。

2.KNN算法

优点:精度高,对异常值不敏感,无输入数据假定
缺点:计算较复杂
适用的数据范围包括:数值型和标称型

2.1KNN算法的流程

  • 1.采集数据
  • 2.分析数据
  • 3.训练算法,计算距离
  • 4.测试算法,计算错误率
  • 5.验证算法,作测试

2.2 用python来跑算法环境简介

本人用的是win7 64位,python 2.7.10,用的编辑器是sublime text3 ,对于机器学习而已,Python需要额外安装三个库分别是Numpy,scipy和Matplotlib。大家自己安装相应的配置环境,这里专注算法,环境不做过多阐述。

3.kNN实战

在同一个文件夹下创建名为kNN.py的python模块和main.py的测试模块。
首先在kNN.py中添加如下代码,及注释:

# -*- coding:UTF-8 -*-
#Filename:kNN.py
from  numpy import *
import operator
def createDataSet():group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1],[5,5],[5.1,4.9]])labels = ['A','A','B','B','C','C']return group,labels

numpy模块是一个科学计算包,另一个是运算符模块。
上面代码以在(1,1),(0,0),(5,5)点附近定义了3个类别分别是A,B,C,随便用一个点来测试,距离(欧式距离)最小的点就是我们临近的类,在main.py中,输入如下代码,测试我们上面模块的正确性。

#!E:\machinelearning\KNN\python
# -*- coding:UTF-8 -*-
import kNN
group,labels = kNN.createDataSet()
print group
print labels

在sublime中配置好python的开发环境,ctrl+B就可以运行,显示如下图中所示的结果,则证明我们的所写的模块也可以说成是我们所定义的函数正常:

3.1用该算法分类

接上面,继续在kNN.py中定义一个函数classify0,如下中所示

def classify0(inX, dataSet, labels, k):dataSetSize = dataSet.shape[0]diffMat = tile(inX, (dataSetSize,1)) - dataSetsqDiffMat = diffMat**2sqDistances = sqDiffMat.sum(axis=1)distances = sqDistances**0.5sortedDistIndicies = distances.argsort()     classCount={}          for i in range(k):voteLabel = labels[sortedDistIndicies[i]]classCount[voteLabel] = classCount.get(voteLabel,0) + 1sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)return sortedClassCount[0][0]

代码解释:

  • dataSetSize = dataSet.shape[0]:中,可以看到一个shape,这是一个属性,shape[0]:求数组中第一维数(二维数组中指行数),shape[1]:就是求数组中第二维数(二维数组中指列数)在本例中,dataSet.shape[0]= 6,dataSet.shape[1]=2;

  • diffMata = tile(inX,(dataSetSize,1))-dataSet:其中tile是指模板numpy.lib.shape_base中的函数,函数的形式是tile(A,reps),功能是重复某个数组,将A重复reps次,然后元素相减。

  • sqDiffMat = diffMat**2:求平方

  • sqDistances = sqDiffMat.sum(axis=1):axis=1表示按行相加。

  • sortedDistIndicies = distances.argsort() :argsort() :升序排列

  • classCount={} 定义字典

  • voteLabel = labels[sortedDistIndicies[i]]:找到最小的k个邻居

  • classCount[voteLabel] = classCount.get(voteLabel,0) + 1:统计标签出现的次数,以下是get()方法的语法:dict.get(key, default=None),get()方法返回给定键的值。如果键不可用,则返回默认值None。本例中如果键不存在,则会返回0。

  • reverse=True 倒序排列,最后返回最大值。

3.2在命令行中进行测试

结果如下图中所示:

这样就完成了我们一个简单的kNN算法的python编写,你也来试试吧。

4 kNN算法进阶

4.1用kNN改进网站的配对效果

4.2手写识别系统

本文接下来的数据集合和相应代码放在:

http://download.csdn.net/detail/yywan1314520/9335021

本文根据《机器学习实站》书中安排进行,关于代码的完整注释最后会放到github上,敬请大家关注。

ML--K-近邻算法相关推荐

  1. 距离产生美?k近邻算法python实现

    https://blog.csdn.net/red_stone1/article/details/80607960 1. 什么是k近邻算法? k最近邻(k-Nearest Neighbor,kNN)分 ...

  2. 【Machine Learning】TensorFlow实现K近邻算法预测房屋价格

    1前言 机器学习KNN算法(K近邻算法)的总体理论很简单不在这里赘述了. 这篇文章主要问题在于如果利用tensorflow深度学习框架来实现KNN完成预测问题,而不是分类问题,这篇文章中涉及很多维度和 ...

  3. knn K近邻算法python实现

    本文主要内容: knn K近邻算法原理 sklearn knn的使用,以及cross validation交叉验证 numpy 实现knn knn改进方法 1 knn K近邻算法原理 K近邻算法:给定 ...

  4. 机器学习——聚类之k近邻算法及python使用

    聚类算法之k近邻及python使用 什么是k近邻算法 k近邻算法流程 使用sklearn进行代码实现 数据集介绍 标准化 代码实现 写在开头,套用我的老师的一句话目前所有自然学科的前沿都是在研究数学, ...

  5. 【TensorFlow实现机器学习方法】KNN(K近邻算法)实现预测房屋价格(tensorflow、matplotlib、numpy、pandas)

    一.前言 机器学习KNN算法(K近邻算法)的总体理论很简单不在这里赘述了. 二.数据集准备 这里使用比较古老的数据集,是房屋预测的数据集 下载地址 https://archive.ics.uci.ed ...

  6. k近邻算法_机器学习之K近邻分类算法的实现

    K近邻算法(k-nearest neighbors, KNN)是最基本的机器学习算法之一.所谓的K,就是距离最近的K个邻居的意思.其实,KNN在我们平常的生活中也会不自主的应用,比如,俗语说的&quo ...

  7. 【机器学习入门】(1) K近邻算法:原理、实例应用(红酒分类预测)附python完整代码及数据集

    各位同学好,今天我向大家介绍一下python机器学习中的K近邻算法.内容有:K近邻算法的原理解析:实战案例--红酒分类预测.红酒数据集.完整代码在文章最下面. 案例简介:有178个红酒样本,每一款红酒 ...

  8. 一文搞懂K近邻算法(KNN),附带多个实现案例

    简介:本文作者为 CSDN 博客作者董安勇,江苏泰州人,现就读于昆明理工大学电子与通信工程专业硕士,目前主要学习机器学习,深度学习以及大数据,主要使用python.Java编程语言.平时喜欢看书,打篮 ...

  9. K近邻算法:以同类相吸解决分类问题!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:游璐颖,福州大学,Datawhale成员 前言 KNN(k-nea ...

  10. k近邻算法之 k值的选择

    k近邻算法之 k值的选择 举例说明: K值过小:  [过拟合] ​ 容易受到异常点的影响   [如:美人鱼本身就是喜剧片,假如统计的时候记为动作片,则对预测值的影响太大] k值过大:  [欠拟合] ​ ...

最新文章

  1. linux cp 覆盖不确认,cp命令强制覆盖,不提示确认信息
  2. 几个常用的文本处理shell 命令:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk
  3. 六级范文背诵50篇_清华附小校长:小学生日记写作训练,附经典范文50篇,家长收藏...
  4. 为什么大公司一定要使用DevOps
  5. Google浏览器截长图 不需要借助任何插件!!!
  6. Springboot 使用wangEditor3.0上传图片
  7. php中中文字符串的截取和获取长度 mb_substr() mb_strlen()
  8. 工作没做好,别人指出时最好装聋作哑
  9. Thinkphp精仿韩都衣舍商城网站源码
  10. 计算机各种办公软件都很卡,电脑中打开office2016办公软件很卡的解决方法
  11. 理解并取:frame-relay的工作原理
  12. 免费和开源引擎的游戏引擎,转载自维基
  13. Android11 GPS 流程代码走读
  14. Jmeter 阶梯线程组
  15. 电商核心业务功能测试分析
  16. 解决OBS录屏软件窗口采集不全的问题
  17. MAC A1466 820-00165-A 进水不触发
  18. mac,macbook 连接蓝牙耳机播放音乐断断续续
  19. github搭建自己的博客网站
  20. 【C++】细说C语言头文件的路径

热门文章

  1. tinyhttpd源码分析
  2. ubuntu 安装ssh 服务
  3. codeigniter_MY_Model
  4. apache的虚拟目录配置
  5. ubuntu14.04 下 mysql 存储目录迁移
  6. 设置导出目录oracle11g,Oracle11g不同目录的冷备份解决方案
  7. STC学习:扫描频率可变的电子钟
  8. python 字符串交集_集合 (Set) | 一山不容二虎的 Python 数据类型
  9. 圆柱体积怎么算立方公式_祖暅原理和球的体积公式
  10. c string erase_威刚推出SE770G移动固态硬盘:提供两年质保 附送双头USB-C