代码是机器学习里的,我加了一点解释,今天开始接触机器学习,代码还是有点生疏。
#分类器
import numpy as np
import operator
def classify0(inx,dataSet,labels,k):
#dataSetSize得到列数
dataSetSize = dataSet.shape[0]
#diffMat = np.tile(inx,(dataSetSize,1))-dataSet
"""
用tile,把一行inX变成4行一模一样的(tile有重复的功能,dataSetSize是重复4遍,后面的1保证重复完了是4行,而不是一行里有四个一样的),
不用的话输出d [0 0 0 0 0 0 0 0]
"""
d = np.tile(inx,(dataSetSize,1))
diffMat = d-dataSet
sqDiffmat = diffMat**2
sqDistances = sqDiffmat.sum(axis = 1)
distances = sqDistances**0.5
sortedDis = distances.argsort()
#print(sortedDis)
cla = {}
for i in range(k):
vot = labels[sortedDis[i]]
cla[vot] = cla.get(vot,0) + 1
#print(cla[vot])
#用iteritems,AttributeError: 'dict' object has no attribute 'iteritems'
#原因:python3中已经没有这个属性,直接改为items即可
sortedcla = sorted(cla.items(),key = operator.itemgetter(1),reverse=True)
"""
operator.items函数
operator模块提供的items函数用于获取对象的哪些维的数据,参数为一些序号。看下面的例子
a = [1,2,3]
>>> b=operator.items(1) //定义函数b,获取对象的第1个域的值
>>> b(a)
2
>>> b=operator.items(1,0) //定义函数b,获取对象的第1个域和第0个的值
>>> b(a)
(2, 1)
"""
return sortedcla[0][0]
group = np.array([[1.,1.1],[1.,1.],[0.,0.],[0.,0.1]])
labels = np.array(['A','A','B','B'])
a = classify0([0,0],group,labels,3)
print(a)