机器学习之k-最近邻(kNN)算法
一、kNN(k-nearest neighbor)算法原理
事物都遵循物以类聚的思想,即有相同特性的事物在特征空间分布上会靠得更近,所以kNN的思路是:一个样本在特征空间中k个靠的最近的样本中,大多数属于某个类别,这个样本就属于某个类别。
如图所示,蓝色方框和橙色三角分别代表不同的类别,此时来了一个未知类别的样本绿色圆,如何判断绿圆的类别,步骤如下:

- 计算绿圆和特征空间中的每一个点的距离。
- 设定k的值。
- 选取与当前绿圆距离最近的k个点。
- 统计前k个点所在的类别出现的频率。
- 返回出现频率最高的类别作为绿圆的预测类别。
如果k=3,则距离绿圆最近的三个点是黑色实线圆圈里的点,而橙色三角个数最多,故判断绿圆的类别是橙色三角。
如果k=5,则距离绿圆最近的5个点是黑色虚线圆圈里的点,此时蓝色方框个数最多,故判断绿圆的类别是蓝色方框。
样本点之间距离的一般使用欧氏距离来计算:

二、kNN算法python实现
- 计算各向量点之间的距离
- 选择距离最小的k个点
- 统计k个点中的类别,并从大到小排序
- 返回出现频率最高的类别
目前坐标中有两个黄点类和两个紫点类,需要判断蓝点属于哪个类别?

from numpy import *
import operator # knn algorithm
def classify0(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0] # 将inX重复dataSetSize行,便于做向量计算
diffMat = tile(inX, (dataSetSize, 1)) - dataSet
sqDiffMat = diffMat ** 2
sqDistinces = sqDiffMat.sum(axis=1)
distinces = sqDistinces ** 0.5
# 以上求向量点之间的欧氏距离 # 从小到大返回距离的索引值
sortedDistIndicies = distinces.argsort()
# 创建一个字典,用来存放类别和出现的频次
classCount = {}
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
# classCount.iteritems()={'A': 1, 'B': 2}
# 用classCount中iteritems的第二项作为比较的数值(类别的统计频次),然后对iteritems逆序排序
sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0] def createDataSet():
group = array([[10, 11], [9, 8], [2, 3], [3, 1]])
labels = ['A', 'A', 'B', 'B']
return group, labels if __name__ == '__main__':
group, labels = createDataSet()
classLabel = classify0([3.5, 2], group, labels, 3)
print "the classifier came back with: %c" % classLabel
返回的结果是:
the classifier came back with: B
参考资料:《机器学习实战》
机器学习之k-最近邻(kNN)算法的更多相关文章
- kNN算法:K最近邻(kNN,k-NearestNeighbor)分类算法
一.KNN算法概述 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它 ...
- 机器学习经典算法具体解释及Python实现--K近邻(KNN)算法
(一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值 ...
- K最近邻(KNN,k-Nearest Neighbor)准确理解
K最近邻(KNN,k-Nearest Neighbor)准确理解 用了之后,发现我用的都是1NN,所以查阅了一下相关文献,才对KNN理解正确了,真是丢人了. 下图中,绿色圆要被决定赋予哪个类,是红色三 ...
- 机器学习-K近邻(KNN)算法详解
一.KNN算法描述 KNN(K Near Neighbor):找到k个最近的邻居,即每个样本都可以用它最接近的这k个邻居中所占数量最多的类别来代表.KNN算法属于有监督学习方式的分类算法,所谓K近 ...
- day-9 sklearn库和python自带库实现最近邻KNN算法
K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的 ...
- 理解KNN算法中的k值-knn算法中的k到底指的是什么 ?
2019-11-09 20:11:26为方便自己收藏学习,转载博文from:https://blog.csdn.net/llhwx/article/details/102652798 knn算法是指对 ...
- python机器学习(2:KNN算法)
1.KNN 简介:knn算法是监督学习中分类方法的一种.它又被叫k近邻算法,是一个概念极其简单而分类效果又很优秀的分类算法. 核心思想:在训练集中选出离输入的数据最近的k个数据,根据这k个数据的类别判 ...
- 机器学习实战---K均值聚类算法
一:一般K均值聚类算法实现 (一)导入数据 import numpy as np import matplotlib.pyplot as plt def loadDataSet(filename): ...
- 机器学习第一篇——最近邻kNN
机器学习监督学习中,根据解决问题的连续性和离散型,分为分类问题和回归问题.最邻近算法kNN是一种最为直接和简便的分类方法. kNN本质上,是计算目标到模型的欧式距离,从而判定目标所属的类别. 首先,在 ...
- SVM(支持向量机)与统计机器学习 & 也说一下KNN算法
因为SVM和统计机器学习内容很多,所以从 http://www.cnblogs.com/charlesblc/p/6188562.html 这篇文章里面分出来,单独写. 为什么说SVM和统计学关系很大 ...
随机推荐
- 简单的Windows 服务的安装和卸载
步骤: 1.运行--〉cmd:打开cmd命令框 2.在命令行里定位到InstallUtil.exe所在的位置 InstallUtil.exe 默认的安装位置是在C:/Windows/Microsoft ...
- 安装MySQL-python
安装MySQL-python 1. yum -y install mysql mysql-devel 2. yum -y install python-devel 3. pip install -i ...
- 改变文件上传input file类型的外观
当我们使用文件上传功能时,<input type="file">,但是外观有点不符合口味,如何解决这个问题? <input type="file&quo ...
- java读入和输出
一: 在python里直接使用input函数就可以,在java里,需要使用Scanner类,用System.in进行初始化,获取用户输入可以用nextLine获取字符串,nextInt获取整形数据. ...
- iOS - dispatch_after解说
dispatch_after 是来延迟执行的GCD方法,因为在主线程中我们不能用sleep来延迟方法的调用,所以用dispatch_after是最合适的 dispatch_after 能让我们添加进队 ...
- CentOS7.6离线安装MySql5.7
准备好mysql的离线安装文件: MySql官网下载mysql-5.7.25-1.el7.x86_64.rpm-bundle,并复制到/usr/mysql文件夹中. 删除CentOS自带的MariaD ...
- php 查看使用多少内存
方法memory_get_usage 是指当前脚本正在使用的内存 unset只是把内存标记为空闲但并没有释放,要GC程序结束后才会释放 $bytes = memory_get_peak_usage() ...
- 克隆虚拟机及配置yum源的步骤及讲解(Hadoop基础)
1.克隆虚拟机 找一台需要克隆的虚拟机但虚拟机必须在关机下进行,(建议将前期Linux环境 配置完成) 在VMware中右键虚拟机找到克隆的选项. 点击克隆 可以克隆他的快照(提前做快照)或者是克 ...
- Oracle Data Provider for .NET – Microsoft .NET Core and Entity Framework Core
http://www.oracle.com/technetwork/topics/dotnet/tech-info/odpnet-dotnet-ef-core-sod-4395108.pdf Orac ...
- 20155231 邵煜楠《网络对抗技术》实验一 PC平台逆向破解
20155231 邵煜楠<网络对抗技术>实验一 PC平台逆向破解 实验内容 直接修改程序机器指令,改变程序执行流程: 通过构造输入参数,造成BOF攻击,改变程序执行流: 注入Shellco ...