学习KNN算法过程中遇到的Numpy函数整理

来源:互联网 发布:淘宝女舞蹈裤 编辑:程序博客网 时间:2024/06/04 01:28

昨天抽空学了一下入门机器学习的比较简单的一个算法,kNN算法。具体这是什么算法的话。。我就不多说了,我这里主要是想将写这个算法代码过程中遇到的一些东西整理一下。

下面先上简单的kNN算法代码

from numpy import *import operatordef createDataSet():    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) # 虽然很少。。但也叫做训练数据集    labels = ['A','A','B','B'] #  标签    return group,labelsdef classify(inX,dataSet,labels,k):   #  inX是要用来进行分类的向量 dataSet是训练数据集(通过上面的函数进行获得)labels标签 k选择近邻数目    dataSetSize = dataSet.shape[0]  #  获取训练样本集中的向量个数    diffMat = tile(inX,(dataSetSize,1))-dataSet  # 将inX待检测向量 扩大为与训练数据集同维度的向量组 进行相减 这样就方便进行下面的计算    sqDiffMat = diffMat**2  #  将差值分别进行一次平方    sqDistances = sqDiffMat.sum(axis=1)  #  将向量的一行进行相加    distances = sqDistances**0.5  #  进行开方    sortedDistIndicies = distances.argsort() #  从大到小进行排序 返回的是下标    classCount = {}    for i in range(k):        voteIlabel = labels[sortedDistIndicies[i]]        classCount[voteIlabel] = classCount.get(voteIlabel,0)+1    sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)    return sortedClassCount[0][0]

然后开始吧(写的很多东西可能是Numpy里面很基础的东西,大牛勿喷微笑)

1: dataSize = dataSet.shape[0]这里的shape方法。

   这里的shape是用来读取矩阵的长度

   直接调用shape就返回这个矩阵是多少行,多少列。 shape[0]返回行数,shape[1]返回列数

>>> eematrix([[1, 2, 3],        [4, 5, 6]])>>> ee.shape(2, 3)>>> ee.shape[0]2>>> ee.shape[1]3
2:tile()函数。

tile(A,reps),简单的说就是对A进行重复输出,这里的A可以是array 或者是 list 或者是 tuple 等等,可以重复列或者重复行或者行列同时重复

>>> eematrix([[1, 2, 3],        [4, 5, 6]])>>> ee=tile(ee,2)>>> eematrix([[1, 2, 3, 1, 2, 3],        [4, 5, 6, 4, 5, 6]])>>> ee=tile(ee,(2,1))>>> eematrix([[1, 2, 3, 1, 2, 3],        [4, 5, 6, 4, 5, 6],        [1, 2, 3, 1, 2, 3],        [4, 5, 6, 4, 5, 6]])


3: argsort()函数,这个函数。。是一个排序函数,就是根据元素的值进行排序,然会返回的是下标。

>>> x=array([1,4,3,-1,6,9])>>> x.argsort()array([3, 0, 2, 1, 4, 5])

就先这样吧,周末又来了~

上面如果有不好的地方,希望大家多多指教,我是新手

原创粉丝点击