首页 > 代码库 > 机器学习实战——第二章
机器学习实战——第二章
k-近邻算法(kNN):测量不同特征值之间的距离方法进行分类。
kNN的工作原理:存在一个样本数据集合(训练样本集),并且样本集中每个数据都存在标签,输入没有标签的新数据后,将新数据的每个特征与样本集数据对应的特征进行比较,然后算法提取样本集中特征最相似数据的分类标签。一般来说,只选择样本数据集中前k个最相似的数据。
伪代码:
1)计算已知类别数据集中的点与当前点之间的距离;
2)按照距离递增次序排序;
3)选取与当前点距离最小的k个点;
4)确定前k个点所在类别的出现频率;
5)返回前k个点出现频率最高的类别作为当前点的预测分类。
1 #-*- coding: UTF-8 -*- 2 from numpy import * 3 import operator 4 5 def createDataSet(): 6 group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]]) 7 labels = [‘A‘, ‘A‘, ‘B‘, ‘B‘] 8 return group, labels 9 10 ‘‘‘11 inX: 用于分类的输入向量12 dataset: 输入的训练样本集13 labels: 标签向量14 k: 选择最近邻的数目15 其中,标签向量的元素数目和矩阵dataSet的行数相同16 ‘‘‘17 def classify0(inX, dataSet, labels, k):18 dataSetSize = dataSet.shape[0] #返回dataSet的行数19 diffMat = tile(inX, (dataSetSize, 1)) - dataSet20 sqDiffMat = diffMat ** 221 sqDistances = sqDiffMat.sum(axis=1) #按行求和22 distances = sqDistances ** 0.5 #计算欧式距离23 sortedDistIndicies = distances.argsort() #返回的数组为distances的值从小到大的索引值24 25 classCount = {}26 for i in range(k):27 voteIlabel = labels[sortedDistIndicies[i]]28 classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 #统计各类别的次数29 sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)30 return sortedClassCount[0][0] #返回第一个元素,即前3个中最多的类别31 32 if __name__ == ‘__main__‘:33 group, labels = createDataSet()34 print classify0([0, 0], group, labels, 3) #输出B
dict.get(‘key‘)类似于dict[‘key‘].
dict.get(‘key‘, sthelse) #若key不是dict的键值,将得到sthelse的值
>>> info = {‘1‘:‘first‘, ‘2‘:‘second‘, ‘3‘:‘third‘}>>> info.get(‘1‘)‘first‘>>> info.get(‘4‘,‘error‘)‘error‘
>>> info[‘1‘]
‘first‘
classCount.iteritems() #返回键值-值对的一个迭代器
#operator.itemgetter函数获取的不是一个值,而是定义了一个函数
>>> import operator>>> a = [1,2,3]>>> b = operator.itemgetter(1) #定义函数b,获取对象index==1的值>>> b(a)2
sorted(iterable[, cmp[, key[, reverse]]]) #返回list。key为函数,指定取待排序元素的哪一项进行排序
>>> import operator>>> dict = {‘a‘:‘3‘, ‘b‘:‘2‘, ‘c‘:‘1‘}>>> sorted(dict.iteritems(), key=lambda asd:asd[0], reverse=True) [(‘c‘, ‘1‘), (‘b‘, ‘2‘), (‘a‘, ‘3‘)]>>> sorted(dict.iteritems(), key=operator.itemgetter(0), reverse=True) #按dict.iteritems()的第一个元素倒序排序[(‘c‘, ‘1‘), (‘b‘, ‘2‘), (‘a‘, ‘3‘)]>>> sorted(dict.iteritems(), key=operator.itemgetter(1), reverse=True) [(‘a‘, ‘3‘), (‘b‘, ‘2‘), (‘c‘, ‘1‘)]
机器学习实战——第二章
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。