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

本文记录了学习KNN算法过程中遇到的Numpy重要函数,包括shape属性用于获取矩阵尺寸,tile函数实现数组重复,以及argsort函数进行排序的操作。通过实例简单介绍了这些函数的用法。
摘要由CSDN通过智能技术生成

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

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

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

def 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]返回列数

>>> ee
matrix([[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 等等,可以重复列或者重复行或者行列同时重复

>>> ee
matrix([[1, 2, 3],
        [4, 5, 6]])
>>> ee=tile(ee,2)
>>> ee
matrix([[1, 2, 3, 1, 2, 3],
        [4, 5, 6, 4, 5, 6]])
>>> ee=tile(ee,(2,1))
>>> ee
matrix([[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])

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值