[python函数学习]机器学习实战 - k近邻

[python函数学习]机器学习实战 - k近邻

K近邻(KNN)

在测试点周围寻找近邻的K个点,将测试点标记成其中出现频率最多的分类。

def classify0(inX, dataSet, labels, k):
    #计算距离
    dataSetSize = dataSet.shape[0]
    diffMat = tile(inX, (dataSetSize, 1)) - dataSet   #tile函数将数组重复(m维, 每维n次)
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat.sum(axis = 1)  # axis = 1时列相加 压缩为一列
    distances = sqDistances**0.5
    sortedDistIndicies = distances.argsort()  #argsotr从小到大排序 返回索引值 [3,1,2] -> [1, 2, 0] 返回序
    #选择距离最小的k个点
    classCount = {}
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 
          #get函数 key -- 字典中要查找的键。default -- 如果指定键的值不存在时,返回该默认值值。
          # 返回指定键的值,如果值不在字典中返回默认值。

    #选择频率最多的类    
    sortedClassCount = sorted(classCount.items(), key = operator.itemgetter(1), reverse = True)
    #items 将字典拆分为列表
    #sorted(iterable, cmp=None, key=None, reverse=False)
    #可迭代对象, 比较函数, 进行比较的元素 指定可迭代对象中的一个元素来进行排序, 排序规则 T降序  F升序
    # operator.itemgetter(i) 获得第i维数据
    return sortedClassCount[0][0]

tile(A,(repsM, repsN))

将A重复repsM维,repsN次
A和reps都是array_like
A的类型众多,几乎所有类型都可以:array, list, tuple, dict, matrix以及基本数据类型int, string, float以及bool类型。
reps的类型也很多,可以是tuple,list, dict, array, int, bool.但不可以是float, string, matrix类型。

numpy.sum(a, axis=None, dtype=None, out=None, keepdims=np._NoValue)

a – 待求数组\向量\矩阵
axis – 求和的方向,None或没有axis参数表示全部数据相加,axis=0,表示按列相加,axis=1,表示按行相加,对于一维数组,只有axis=0,表示按行相加,没有axis=1,输入axis=1会报错

argsort(a, axis=-1, kind=‘quicksort’, order=None)

从小到大排序a,返回序索引值
axis – axis=0,按列索引。 axis=1,按行索引。
kind – ‘quicksort’(快速排序) ‘mergesort’(归并排序) ‘heapsort’(堆排序)
order – order: 如果数组包含字段,则是要排序的字段

dict.get(key, default=None)

返回指定键的值,如果值不在字典中返回默认值。
key – 字典中要查找的键。
default – 如果指定键的值不存在时,返回该默认值。

sorted(iterable, cmp=None, key=None, reverse=False)

对所有可迭代的对象进行排序操作。返回重新排序的对象
iterable – 可迭代对象。
cmp – 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

dict.items()

将字典拆分为列表,返回拆分后的列表。

operator.itemgetter(i)

获得第i维数据,函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值