python机器学习记录2 k-近邻算法 tile shape min max

  • tile

tile(A,reps):

若reps是数字n

将A按列重复n次。

若reps是(m,n)

将A按列重复n次,再整个数组重复成m列。

  • shape
m = dataSetMat.shape[0]#求行数
m = dataSetMat.shape[1]#求列数
  • min max
minVals = dataSetMat.min(0) #将这个数据集按列找到每一列的最小值,组成一个数组,max同理
  • k-近邻算法

按照算法原理,输入的inX是要判别的特征向量,dataSet是样本空间,labels是标签空间,k是算法所取值。

注意argsort,先排序,然后返回的是每个元素的序号标签。如原数组是(2,5,4),argsort返回的是(1,2,0)。

votelabel返回的是样本中最近的k个。

classcount返回的是votelabel对应的标签。

sortclasscount,书上定义:classCount.items()将classCount字典分解为元组列表,operator.itemgetter(1)按照第二个元素的次序对元组进行排序,reverse=True是逆序,即按照从大到小的顺序排列。这里排序就是用出现概率最高的进行排序(key)。排序完后用0就能得到分类类别即出现频率最高的。

最后,返回标签类别的数量。(用0得到分类)

def classify0(inX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]
    diffMat = tile(inX, (dataSetSize,1))-dataSet    #tile a matrix with (dtaSetSize, 1)
    sqDiffMat = diffMat**2      # square each entry
    sqDistances = sqDiffMat.sum(axis=1) # summation along each row
    distances = sqDistances**0.5    
    sortedDistIndices = distances.argsort() #argsort is a sort method of numpy.array,from small to big
    classCount = {}     # Record the k nearest samples and their labels
    for i in range(k):
        voteLabel = labels[sortedDistIndices[i]]  #Find the label of the k points in the sample space closest to the point to be tested.
        classCount[voteLabel] = classCount.get(voteLabel, 0) + 1
    sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
    return sortedClassCount[0][0]
'''

你可能感兴趣的:(机器学习,python,机器学习,近邻算法)