ML--K-近邻算法
声明:本人学习的机器学习以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-近邻算法相关推荐
- 距离产生美?k近邻算法python实现
https://blog.csdn.net/red_stone1/article/details/80607960 1. 什么是k近邻算法? k最近邻(k-Nearest Neighbor,kNN)分 ...
- 【Machine Learning】TensorFlow实现K近邻算法预测房屋价格
1前言 机器学习KNN算法(K近邻算法)的总体理论很简单不在这里赘述了. 这篇文章主要问题在于如果利用tensorflow深度学习框架来实现KNN完成预测问题,而不是分类问题,这篇文章中涉及很多维度和 ...
- knn K近邻算法python实现
本文主要内容: knn K近邻算法原理 sklearn knn的使用,以及cross validation交叉验证 numpy 实现knn knn改进方法 1 knn K近邻算法原理 K近邻算法:给定 ...
- 机器学习——聚类之k近邻算法及python使用
聚类算法之k近邻及python使用 什么是k近邻算法 k近邻算法流程 使用sklearn进行代码实现 数据集介绍 标准化 代码实现 写在开头,套用我的老师的一句话目前所有自然学科的前沿都是在研究数学, ...
- 【TensorFlow实现机器学习方法】KNN(K近邻算法)实现预测房屋价格(tensorflow、matplotlib、numpy、pandas)
一.前言 机器学习KNN算法(K近邻算法)的总体理论很简单不在这里赘述了. 二.数据集准备 这里使用比较古老的数据集,是房屋预测的数据集 下载地址 https://archive.ics.uci.ed ...
- k近邻算法_机器学习之K近邻分类算法的实现
K近邻算法(k-nearest neighbors, KNN)是最基本的机器学习算法之一.所谓的K,就是距离最近的K个邻居的意思.其实,KNN在我们平常的生活中也会不自主的应用,比如,俗语说的&quo ...
- 【机器学习入门】(1) K近邻算法:原理、实例应用(红酒分类预测)附python完整代码及数据集
各位同学好,今天我向大家介绍一下python机器学习中的K近邻算法.内容有:K近邻算法的原理解析:实战案例--红酒分类预测.红酒数据集.完整代码在文章最下面. 案例简介:有178个红酒样本,每一款红酒 ...
- 一文搞懂K近邻算法(KNN),附带多个实现案例
简介:本文作者为 CSDN 博客作者董安勇,江苏泰州人,现就读于昆明理工大学电子与通信工程专业硕士,目前主要学习机器学习,深度学习以及大数据,主要使用python.Java编程语言.平时喜欢看书,打篮 ...
- K近邻算法:以同类相吸解决分类问题!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:游璐颖,福州大学,Datawhale成员 前言 KNN(k-nea ...
- k近邻算法之 k值的选择
k近邻算法之 k值的选择 举例说明: K值过小: [过拟合] 容易受到异常点的影响 [如:美人鱼本身就是喜剧片,假如统计的时候记为动作片,则对预测值的影响太大] k值过大: [欠拟合] ...
最新文章
- linux cp 覆盖不确认,cp命令强制覆盖,不提示确认信息
- 几个常用的文本处理shell 命令:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk
- 六级范文背诵50篇_清华附小校长:小学生日记写作训练,附经典范文50篇,家长收藏...
- 为什么大公司一定要使用DevOps
- Google浏览器截长图 不需要借助任何插件!!!
- Springboot 使用wangEditor3.0上传图片
- php中中文字符串的截取和获取长度 mb_substr() mb_strlen()
- 工作没做好,别人指出时最好装聋作哑
- Thinkphp精仿韩都衣舍商城网站源码
- 计算机各种办公软件都很卡,电脑中打开office2016办公软件很卡的解决方法
- 理解并取:frame-relay的工作原理
- 免费和开源引擎的游戏引擎,转载自维基
- Android11 GPS 流程代码走读
- Jmeter 阶梯线程组
- 电商核心业务功能测试分析
- 解决OBS录屏软件窗口采集不全的问题
- MAC A1466 820-00165-A 进水不触发
- mac,macbook 连接蓝牙耳机播放音乐断断续续
- github搭建自己的博客网站
- 【C++】细说C语言头文件的路径
热门文章
- tinyhttpd源码分析
- ubuntu 安装ssh 服务
- codeigniter_MY_Model
- apache的虚拟目录配置
- ubuntu14.04 下 mysql 存储目录迁移
- 设置导出目录oracle11g,Oracle11g不同目录的冷备份解决方案
- STC学习:扫描频率可变的电子钟
- python 字符串交集_集合 (Set) | 一山不容二虎的 Python 数据类型
- 圆柱体积怎么算立方公式_祖暅原理和球的体积公式
- c string erase_威刚推出SE770G移动固态硬盘:提供两年质保 附送双头USB-C