KNN分类算法--python实现

一、kNN算法分析

K最近邻(k-Nearest Neighbor,KNN)分类算法可以说是最简单的机器学习算法了。它采用测量不同特征值之间的距离方法进行分类。它的思想很简单:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。

该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。因此可以采用权值的方法(和该样本距离小的邻居权值大)来改进。该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分[参考机器学习十大算法]。

总的来说就是我们已经存在了一个带标签的数据库,然后输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似(最近邻)的分类标签。一般来说,只选择样本数据库中前k个最相似的数据。最后,选择k个最相似数据中出现次数最多的分类。其算法描述如下:

1)计算已知类别数据集中的点与当前点之间的距离;

2)按照距离递增次序排序;

3)选取与当前点距离最小的k个点;

4)确定前k个点所在类别的出现频率;

5)返回前k个点出现频率最高的类别作为当前点的预测分类。

时间: 2024-08-01 22:47:47

KNN分类算法--python实现的相关文章

KNN分类算法实现手写数字识别

需求: 利用一个手写数字"先验数据"集,使用knn算法来实现对手写数字的自动识别: 先验数据(训练数据)集: ?数据维度比较大,样本数比较多. ? 数据集包括数字0-9的手写体. ?每个数字大约有200个样本. ?每个样本保持在一个txt文件中. ?手写体图像本身的大小是32x32的二值图,转换到txt文件保存后,内容也是32x32个数字,0或者1,如下: 数据集压缩包解压后有两个目录:(将这两个目录文件夹拷贝的项目路径下E:/KNNCase/digits/) ?目录trainingD

机器学习---K最近邻(k-Nearest Neighbour,KNN)分类算法

K最近邻(k-Nearest Neighbour,KNN)分类算法 1.K最近邻(k-Nearest Neighbour,KNN) K最近邻(k-Nearest Neighbour,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别.用官方的话来说,所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实

后端程序员之路 12、K最近邻(k-Nearest Neighbour,KNN)分类算法

K最近邻(k-Nearest Neighbour,KNN)分类算法,是最简单的机器学习算法之一.由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合.该算法的功能有:从目标区域抽样计算欧式或马氏距离:在交叉验证后的RMSE基础上选择启发式最优的K邻域:计算多元k-最近邻居的距离倒数加权平均. 机器学习(一)——K-近邻(KNN)算法 - oYabea - 博客园http://www.cnblo

监督学习算法_k-近邻(kNN)分类算法_源代码

因为自己想学着去写机器学习的源码,所以我最近在学习<机器学习实战>这本书. <机器学习实战>是利用Python2完成的机器学习算法的源代码,并利用机器学习方法来对实际问题进行分析与处理. (<机器学习实战>豆瓣读书网址:https://book.douban.com/subject/24703171/) 以下内容是我通过学习<机器学习实战>,以及我对k-近邻(kNN)分类算法的理解,所总结整理出的内容,其中kNN分类算法的源码为Python3的代码,希望大家

在Ignite中使用k-最近邻(k-NN)分类算法

在本系列前面的文章中,简单介绍了一下Ignite的线性回归算法,下面会尝试另一个机器学习算法,即k-最近邻(k-NN)分类.该算法基于对象k个最近邻中最常见的类来对对象进行分类,可用于确定类成员的关系. 一个适合k-NN分类的数据集是鸢尾花数据集,它可以很容易地通过UCI网站获得. 鸢尾花数据集由150个样本组成,来自3种不同种类的鸢尾花各有50朵(Iris Setosa, Iris Versicolour和Iris Virginica).以下四个特征可供每个样本使用: 萼片长度(cm) 萼片宽

K-NN(最近邻分类算法 python

# algorithm:K-NN(最近邻分类算法)# author:Kermit.L# time: 2016-8-7 #==============================================================================from numpy import *import operatorimport matplotlib.pyplot as plt def creatDataSet(): group = array([[1.0, 1.1],

kNN分类算法的Python实现

1.k-近邻算法实现 from numpy import * import operator def createDataSet(): group = array([[1.0, 1.1], [2.0, 2.0], [0, 0], [4.1, 5.1]]) labels = ['A', 'B', 'C', 'D'] return group, labels def classify0(inX, dataSet, labels, k): """ :param inX: 用于分类的

KNN分类算法补充

KNN补充: 1.K值设定为多大? k太小,分类结果易受噪声点影响:k太大,近邻中又可能包含太多的其它类别的点. (对距离加权,可以降低k值设定的影响) k值通常是采用交叉检验来确定(以k=1为基准) 经验规则:k一般低于训练样本数的平方根 2.类别如何判定最合适? 加权投票法更恰当一些.而具体如何加权,需要根据具体的业务和数据特性来探索 3.如何选择合适的距离衡量? 高维度对距离衡量的影响:众所周知当变量数越多,欧式距离的区分能力就越差. 变量值域对距离的影响:值域越大的变量常常会在距离计算中

用外部库实现knn分类算法,并计算正确率

from sklearn.model_selection import train_test_split from sklearn.datasets import load_iris from sklearn.neighbors import KNeighborsClassifier import numpy as np cheng = load_iris() # print(cheng.keys()) # print(cheng.data) # print(cheng.target) # pr