- k近邻算法的三个基本要素:
- [ 1] k值的选择
- [ 2] 距离度量
- [ 3] 分类决策规则
2.该算法的问题:该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的k个邻居中大容量类的样本占多数。
3.解决:不同的样本给予不同权重项。
4.对于该算法,做了如下实验:
#Author:Liu
import numpy as np
import operator
def createDataSet():
group = np.array([[1.0,1.1],[1.0,1.0],[0.0,0.0],[0,0.1]])
labels = [‘A’,‘A’,‘B’,‘B’]
return group,labels
def classify(inX,dataSet,labels,k):
dataSetsize = dataSet.shape[0]
diffMat = np.tile(inX,(dataSetsize,1))-dataSet #距离相减
sqDiffMat = diffMat2 #平方
sqDistances = sqDiffMat.sum(axis=1) #对每一行的距离进行求和
distance = sqDistances0.5 #开根号
sortedDistIndicies = distance.argsort()
classCount = {}
for i in range (k):
voteLabel = labels[sortedDistIndicies[i]]
classCount[voteLabel] = classCount.get(voteLabel,0)+1
sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
return sortedClassCount[0][0]
if name ==‘main’: #写主函数,调用上面写的分类器
group,labels = createDataSet()
test = classify([0.1,0.3],group,labels,3) #输入一个点,判断它的类别
print(test)
#注意:python3以后,都是item(),只有python2里才有iteritems()