# -*- coding: UTF-8 -*-
from numpy import *
import operator
def createDataSet():
group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels = ['A','A','B','B']
return group, labels
def classify0(inX, dataSet, labels, k):#用于分类的输入向量,训练样本集,标签,最近邻居数目
dataSetSize = dataSet.shape[0]#shape用法:读取矩阵的长度,shape[0]即读取dataSet的第一维度长度,这里是4
diffMat = tile(inX, (dataSetSize,1)) - dataSet
'''reps的数字 从后往前 分别对应A的第N个维度的重复次数。如tile(A,2)表示A的第一个维度重复2遍,
tile(A,(2,3))表示A的第一个维度重复3遍,然后第二个维度重复2遍,tile(A,(2,2,3))表示A的第一个维度重复3遍,
第二个维度重复2遍,第三个维度重复2遍。此例中表示([],[])
'''
sqDiffMat = diffMat**2 #**指乘方,**2指2次方
sqDistances = sqDiffMat.sum(axis=1)#sum求和,对于一维数组axis=0,默认所有相加,二维数组axis=1表示按行相加,axis=0表示按列相加
distances = sqDistances**0.5
sortedDistIndicies = distances.argsort()#argsort是排序,将元素按照由小到大的顺序返回 下标 ,比如([3,1,2]),它返回的就是([1,2,0])
classCount={}
for i in range(k):
votelabel = labels[sortedDistIndicies[i]]
classCount[votelabel] = classCount.get(votelabel,0) + 1#Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值。
sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)#iteritems返回字典序,3.x中已废除。itemgetter表示按第一个域排序。reverse=True指降序
return sortedClassCount[0][0]
每次出现错误然后再检查就是字打错了。但是有个问题,就是在更改正确点击Save以后再次执行代码的时候仍然会报错,尝试重新import,但似乎仍然不行,现在已知可行方法是关了重新打开,太麻烦了。觉得应该有解决方式才对。
k-邻近算法(二)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.