1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 分类算法python程序_分类算法——k最近邻算法(Python实现)(文末附工程源代码)...

分类算法python程序_分类算法——k最近邻算法(Python实现)(文末附工程源代码)...

时间:2021-07-18 02:51:59

相关推荐

分类算法python程序_分类算法——k最近邻算法(Python实现)(文末附工程源代码)...

kNN算法原理

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

kNN算法的步骤

第一阶段:确定k值(指最近的邻居的个数),一般是一个奇数

第二阶段:确定距离度量公式。文本分类一般使用夹角余弦,得出待分类数据点和所有已知类别的样本点,从中选择距离最近的k个样本:

第三阶段:统计这k个样本点钟各个类别的数量

kNN算法的Python实现

第一阶段:可以利用NBayes中的初始化Nbayes_lib.py,点击这里查看

第二阶段:实现夹角余弦的距离公式

fromnumpy import*

importoperator

fromNbayes_pre import*

k=3

#夹角余弦距离公式defcosdist(vector1,vector2):

returndot(vector1,vector2)/(linalg.norm(vector1)*linalg.norm(vector2))

第三阶段:kNN实现分类器

#kNN分类器

#测试集 testdata,训练集 trainSet,类别标签 listClasses,k k个邻居数defclassify(testdata,trainSet,listClasses,k):

dataSetSize=trainSet.shape[0]#返回样本集的行数distances=array(zeros(dataSetSize))

forindx inxrange(dataSetSize):

distances[indx]=cosdist(testdata,trainSet[indx])

#根据生成的夹角余弦从大到小排序,结果为索引号sortedDistIndicies=argsort(-distances)

classCount={}

#获取角度最小的前k项作为参考项fori inrange(k):

votelIlabel=listClasses[sortedDistIndicies[i]]#按排序顺序返回样本集对应的类别标签classCount[votelIlabel]=classCount.get(votelIlabel,0)+1#为字典classCount按value重新排序

#对分类字典classCount按value重新排序

#sorted(data.iteritems(),key=operator.itemgetter(1),reverse=True)

#该句是按字典值排序的固定用法

#classCount.iteritems():字典迭代器

#key:排序参数;operator.itemgetter(1):多级排序sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),reversed=True)

returnsortedClassCount[0][0]#返回序最高的一项#评估分类结果

dataSet,listClasses=loadDataSet()

nb=NBayes()

nb.train_set(dataSet,listClasses)

#使用之前贝叶斯分类阶段的数据集及生成的TF向量进行分类print (classify(nb.tf[3],nb.tf,listClasses,k))

工程源代码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。