基于python实现KNN分类算法

kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 kNN方法在类别决策时,只与极少量的相邻样本有关。由于kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,kNN方法较其他方法更为适合。

通俗简单的说,就是将这个样本进行分类,怎么分类,就是用该样本的特征与空间中其他样本做计算距离,当出现大多数距离偏向于某个样本类时,我们认为该样本属于这个类别。

举例说明:淘宝商品是按类进行售卖的,对于零食类商品a,b,c,价格与销量分别对应(19,1000),(89,500),(9.9,3000)对与电器类商品d,e,f,价格与销量分别为(1000,10),(499,30),(999,100),对于一个未知的产品(300,80),我们使用kNN算法进行求解,我们假设k=3(k的值要时情况而定,没有确定的),分别求出未知产品到这六个点的欧式距离,即:sqrt((x1-y1)**2+(x2-y2)**2)计算出结果进行倒序排序,我们得出前三的点分别为:e,b,f。所以我们认为未知产品是电器类产品,当然实际生活中不能仅仅有价格,销量这两个二维数据,可能是n维数据,欧式距离的公式也是一样的,现实中也不仅仅有这两个分类,kNN提供了一种简单的解决思路。其中a,b,c,d,e,f称为训练数据,未知数据称为测试数据。

还有在进行计算时有时需要格式化一下数据,例如对于c产品与未知产品,明显计算销量所产生的数据要远大于价格,为了减小这个带来的误差,可以使用以下:

参考链接

def normData(dataSet):
 maxVals = dataSet.max(axis=0)#按列获取最大值,并返回数组
 minVals = dataSet.min(axis=0)
 ranges = maxVals - minVals
 retData = (dataSet - minVals) / ranges
 return retData, ranges, minVals

代码

#!/user/bin/env python
#-*- coding:utf-8 -*-
import numpy as np
import operator as opt

def normData(dataSet):#标准化训练集数据
 maxVals = dataSet.max(axis=0)
 minVals = dataSet.min(axis=0)
 ranges = maxVals - minVals
 retData = (dataSet - minVals) / ranges
 return retData, ranges, minVals

def kNN(dataSet, labels, testData, k):
 distSquareMat = (dataSet - testData) ** 2 # 计算差值的平方
 distSquareSums = distSquareMat.sum(axis=1) # 求每一行的差值平方和,axis=0则按列计算
 distances = distSquareSums ** 0.5 # 开根号,得出每个样本到测试点的距离
 sortedIndices = distances.argsort() # 排序,得到排序后的下标
 indices = sortedIndices[:k] # 取最小的k个
 labelCount = {} # 存储每个label的出现次数,出现次数最多的就是我们要选择的类别
 for i in indices:
 label = labels[i]
 labelCount[label] = labelCount.get(label, 0) + 1 # 次数加一,使用字典的get方法,第一次出现时默认值是0
 sortedCount = sorted(labelCount.items(), key=opt.itemgetter(1), reverse=True) # 对label出现的次数从大到小进行排序
 return sortedCount[0][0] # 返回出现次数最大的label

if __name__ == "__main__":#测试程序
 dataSet = np.array([[2, 3], [6, 8]])#训练集
 normDataSet, ranges, minVals = normData(dataSet)
 labels = ['a', 'b']#训练集分别为a和b类
 testData = np.array([3.9, 5.5])#测试数据
 normTestData = (testData - minVals) / ranges#同样需要将测试数据标准化
 result = kNN(normDataSet, labels, normTestData, 1)#k=1
 print(result)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python实现KNN分类算法

    一.KNN算法简介 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表. kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别. kNN方法在类别决策时,只与极少量的相邻样本有

  • Python KNN分类算法学习

    本文实例为大家分享了Python KNN分类算法的具体代码,供大家参考,具体内容如下 1.KNN分类算法 KNN分类算法(K-Nearest-Neighbors Classification),又叫K近邻算法,是一个概念极其简单,而分类效果又很优秀的分类算法. 他的核心思想就是,要确定测试样本属于哪一类,就寻找所有训练样本中与该测试样本"距离"最近的前K个样本,然后看这K个样本大部分属于哪一类,那么就认为这个测试样本也属于哪一类.简单的说就是让最相似的K个样本来投票决定. 这里所说的距

  • python运用sklearn实现KNN分类算法

    KNN(K-Nearest-Neighbours Classiflication)分类算法,供大家参考,具体内容如下 最简单的分类算法,易于理解和实现 实现步骤:通过选取与该点距离最近的k个样本,在这k个样本中哪一个类别的数量多,就把k归为哪一类. 注意 该算法需要保存训练集的观察值,以此判定待分类数据属于哪一类 k需要进行自定义,一般选取k<30 距离一般用欧氏距离,即​  通过sklearn对数据使用KNN算法进行分类 代码如下: ## 导入鸢尾花数据集 iris = datasets.lo

  • 原生python实现knn分类算法

    一.题目要求 用原生Python实现knn分类算法. 二.题目分析 数据来源:鸢尾花数据集(见附录Iris.txt) 数据集包含150个数据集,分为3类,分别是:Iris Setosa(山鸢尾).Iris Versicolour(杂色鸢尾)和Iris Virginica(维吉尼亚鸢尾).每类有50个数据,每个数据包含四个属性,分别是:Sepal.Length(花萼长度).Sepal.Width(花萼宽度).Petal.Length(花瓣长度)和Petal.Width(花瓣宽度). 将得到的数据集

  • 使用python实现kNN分类算法

    k-近邻算法是基本的机器学习算法,算法的原理非常简单: 输入样本数据后,计算输入样本和参考样本之间的距离,找出离输入样本距离最近的k个样本,找出这k个样本中出现频率最高的类标签作为输入样本的类标签,很直观也很简单,就是和参考样本集中的样本做对比.下面讲一讲用python实现kNN算法的方法,这里主要用了python中常用的numpy模块,采用的数据集是来自UCI的一个数据集,总共包含1055个样本,每个样本有41个real的属性和一个类标签,包含两类(RB和NRB).我选取800条样本作为参考样

  • python机器学习之KNN分类算法

    本文为大家分享了python机器学习之KNN分类算法,供大家参考,具体内容如下 1.KNN分类算法 KNN分类算法(K-Nearest-Neighbors Classification),又叫K近邻算法,是一个概念极其简单,而分类效果又很优秀的分类算法. 他的核心思想就是,要确定测试样本属于哪一类,就寻找所有训练样本中与该测试样本"距离"最近的前K个样本,然后看这K个样本大部分属于哪一类,那么就认为这个测试样本也属于哪一类.简单的说就是让最相似的K个样本来投票决定. 这里所说的距离,一

  • 基于python实现KNN分类算法

    kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别. kNN方法在类别决策时,只与极少量的相邻样本有关.由于kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,kNN方法较其他方法更为适合. 通俗简单的说,就是将这个样本进行分类,怎么分类,就是用该样本的

  • 用Python实现KNN分类算法

    本文实例为大家分享了Python KNN分类算法的具体代码,供大家参考,具体内容如下 KNN分类算法应该算得上是机器学习中最简单的分类算法了,所谓KNN即为K-NearestNeighbor(K个最邻近样本节点).在进行分类之前KNN分类器会读取较多数量带有分类标签的样本数据作为分类的参照数据,当它对类别未知的样本进行分类时,会计算当前样本与所有参照样本的差异大小:该差异大小是通过数据点在样本特征的多维度空间中的距离来进行衡量的,也就是说,如果两个样本点在在其特征数据多维度空间中的距离越近,则这

  • C++基于特征向量的KNN分类算法

    K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别.KNN算法中,所选择的邻居都是已经正确分类的对象.该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别. KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关.由于KNN方法主要靠周围有限的邻

  • Python基于sklearn库的分类算法简单应用示例

    本文实例讲述了Python基于sklearn库的分类算法简单应用.分享给大家供大家参考,具体如下: scikit-learn已经包含在Anaconda中.也可以在官方下载源码包进行安装.本文代码里封装了如下机器学习算法,我们修改数据加载函数,即可一键测试: # coding=gbk ''' Created on 2016年6月4日 @author: bryan ''' import time from sklearn import metrics import pickle as pickle

  • python实现KNN近邻算法

    示例:<电影类型分类> 获取数据来源 电影名称 打斗次数 接吻次数 电影类型 California Man 3 104 Romance He's Not Really into Dudes 8 95 Romance Beautiful Woman 1 81 Romance Kevin Longblade 111 15 Action Roob Slayer 3000 99 2 Action Amped II 88 10 Action Unknown 18 90 unknown 数据显示:肉眼判断

随机推荐