Machine Learning In Action
2017-07-19 11:47
381 查看
KNN近邻算法
计算目标点与样本集中的点的距离按距离递增排序
选取与目标点距离最下的K个点
确定前K个所在类别的频率
返回前K个出现频率最高的类别作为目标点的预测分类
from numpy import * #导入numpy函数库 import operator#导入操作符 #创建数据集 def createDateSet(): group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) labels=['A','A','B','B'] return group,labels #算法核心 #inX:用于分类的输入向量。即将对其进行分类。 # DataSet:训练样本集 #labels :标签向量 def classify0(inX,dataSet,labels,k): #距离计算 dataSetSize=dataSet.shape[0] #得到数组的行数。即知道有几个训练数据 diffMat=tile(inX,(dataSetSize,1))-dataSet # tile:numpy中的函数。 # tile将原来的一个数组扩充成了4个一模一样的数组 # (tile有重复的功能,dataSetSize是重复4次,后面的1保证重复完了4行,而不是一样里面有四个一样的) # 。diffMat得到了目标与训练数值之间的差值。 sqDiffMat=diffMat**2#得到的diffMat,平方 sqDiffMatDistances=sqDiffMat.sum(axis=1)#axis=1是列相加,即(x1-x2)^2+(y1-y2)^2 distances =sqDiffMatDistances**0.5#开方,得到的是距离 sortedDistIndicies=distances.argsort()#argsort() 是排序,将元素按照升序排列,返回的是升序过后的下标 #如:[5,7,3],返回的是[2,0,1],其中2,0,1分别代表3,5,7 classCount={} for i in range(k): voteIlabel=labels[sortedDistIndicies[i]]#取离样本集最近的样本,存放在voteIlabel中,也就是样本字典 classCount[voteIlabel]=classCount.get(voteIlabel,0)+1 #get是取字典里的元素,如果之前这个voteIlabel是有的,那么就返回字典里这个voteIlabel里的值,如果没有就返回0(括号里面的0) #这行代码的意思就是算距离目标距离最近的k个点ed类别,这个点是哪个类别那个类别就加一 sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True) # key=operator.itemgetter(1)的意思是按照字典里的第一个排序,{A:1,B:2},要按照第1个(AB是第0个),即‘1’‘2’排序。reverse=True是降序排序 #key=operator.itemgetter(1)的意思是按照字典里的第一个排序,即{A:2,,B:3}要按照第一个(A,B是元素的第0 个),也就是按照2,3排序。reverse=True是降序排序 return sortedClassCount[0][0]#返回最多的类别,即sortedClassCount[0]是A:2,sortedClassCount[0][0]是A
注: 如果出现
AttributeError: 'dict' object has no attribute 'iteritems' 原因是
Python3.5中:iteritems变为items,2.7中iteritems可以使用的进入Python工作区间,也就是该文件存放的路径,进入cmd-->>运行python-->导入类 import Test_python-->> group,leabels=Test_python.createDateSet()--->> Test_python.classify0([0,0],group,leabels,3)
output: 'B'
相关文章推荐
- Machine Learning in Action 学习笔记-(2)kNN k近邻算法
- machine learning in action 之一 —— 环境配置
- 【ML】【python】Machine Learning in Action
- 《MachineLearningInAction》之绘制决策树
- Machine Learning in Action 学习笔记-(4)基于概率论的分类方法:朴素贝叶斯
- "Machine Learning in Action" Chapter 2
- ###《Machine Learning in Action》 - KNN
- Machine Learning in action:k-Nearest Neighbor
- machine learning in action出现ValueError: invalid literal for int() with base 10: 'largeDoses'
- MachineLearningInAction
- Machine Learning in Action | ApacheCN(apache中文网)
- Machine Learning in Action 学习笔记-(5)Logistic回归
- MACHINE LEARNING IN ACTION KNN
- Machine Learning in Action – PCA和SVD
- Machine Learning In Action -- kNN的python实现
- Machine Learning In Action
- <Machine Learning in Action >之一 k-近邻算法 C#实现手写识别
- <Machine Learning in Action >之二 朴素贝叶斯 C#实现文章分类
- Machine Learning In Action - Chapter11 - Association analysis
- Machine Learning in action --逻辑回归(已勘误)