Machine Learing in Action

来源:互联网 发布:淘宝运营助理要做多久 编辑:程序博客网 时间:2024/05/16 19:42

kNN算法核心代码

'''kNN分类器,处理数据为向量inX: 任意N维向量dataSet: 学习数据集为m个N维向量labels: 数据集的类别k: kNN算法中的参数k,k必须为奇数,以避免half-half困境返回:预测类别'''def classify0(inX, dataSet, labels, k):     #计算点inX到各个样本点的距离,记录在distances中,inX可以是任意n维向量    dataSetSize = dataSet.shape[0]    diffMat = tile(inX, (dataSetSize,1)) - dataSet    sqDiffMat = diffMat**2    sqDistances = sqDiffMat.sum(axis=1) #axis=1为行    distances = sqDistances**0.5    #按照距离递增次序排序    sortedDistIndicies = distances.argsort()       #选取与当前点距离最小的k个点,将其类别统计记录在classCount,如(A类:4个,B类:1个,C类:k-5个)    classCount={}                  for i in range(k):        voteIlabel = labels[sortedDistIndicies[i]]        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1     #类别统计进行排序    sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)    #返回出现频率最高的类别作为当前点的预测分类    return sortedClassCount[0][0]
'''归一化数值,将任意取值范围的特征值转化为0到1区间内的值,使各个特征等权dataSet: 数据集为m个N维向量返回:归一化后的数据集,各列值的范围,各列的最小值'''def autoNorm(dataSet):    minVals = dataSet.min(0)  #axis=0为列,获取每一列的最小值    maxVals = dataSet.max(0)    ranges = maxVals - minVals    normDataSet = zeros(shape(dataSet))    m = dataSet.shape[0]    normDataSet = dataSet - tile(minVals, (m,1))    normDataSet = normDataSet/tile(ranges, (m,1))       return normDataSet, ranges, minVals
0 0
原创粉丝点击