-----------------------------------------------------------------------------------------------直接把注释全部去掉跑即可,每个方法都有说明-------------------------------------------------------------------------
#K-近邻算法
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;
'''
intX 目标:[1,1]dataSet 参考值
labels 参考值 对于的目标值
k:前K值
欧氏距离算法
'''
def classify0(intX, dataSet, labels, k):
#矩阵第一维度的长度
dataSetSize =dataSet.shape[0];
#tile行重复intX,dataSetSize次,列0次diffMat = tile(intX, (dataSetSize, 1)) - dataSet;
# 2的次方
sqDiffMat = diffMat ** 2;
#矩阵求和
sqDistances =sqDiffMat.sum(axis=1);
#开方
distances = sqDistances ** 0.5;
#argsort()函数是将x中的元素从小到大排列,提取其对应的index(索引)
sortedDistIndicies = distances.argsort();
classCount = {};
for i in range(k):
#获取的距离对于的参考值的目标值分类存在字典classCount
voteIlabel = labels[sortedDistIndicies[i]];
#get(voteIlabel, 0)获取不到voteIlabel就设置默认值为0
classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
'''
参数解析:
cmp:比较函数,比较什么参数由key决定。例如:cmp(e1, e2) 是具有两个参数的比较函数,返回值:负数(e1 < e2);0(e1 == e2);正数( e1 > e2)。
key:用列表元素的某个属性或函数作为关键字。
reverse:排序规则,可以选择True或者False。
operator.itemgetter(1): 取对象的第1个域的值
'''
sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
pass
return sortedClassCount[0][0];
-----------------------------------------------------------------------------------------------直接把注释全部去掉跑即可-------------------------------------------------------------------------
上面是理论知识,接下来有时间会更新实战