KNN001

###python numpy kNN
knn demo 代码每行都加上注释
1.shape 输出维度

>>> c = array([[1,1],[1,2],[1,3],[1,4]])
>>> c.shape
(4, 2)
>>> c.shape[0]
4
>>> c.shape[1]
2

2.tile 生成重复的数据

  numpy.tile([1,2],5) #生成一行
  numpy.tile([1,2],(3,4) )#生成1行3列的矩阵,矩阵每个元素都4个12 即为[1,2,1,2,1,2,1,2]

3.b=operator.itemgetter(1) 定义了一个函数b,获取对象的一些维
记得 import operator
4.import py文件后,文件有改动重现加在reload python3还需要加上一句:

>>>from imp import reload
>>>reload(kNN)
测试成功的代码:
#!/usr/bin/python

import numpy as np
import operator

def createDataSet():
    group = np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) 
    labels = np.array(['A','A','B','B'])
    return group,labels
    

def classify0(inX, dataSet, labels, k):
    #inX 未知的点
    #dataset输入数据集,训练集,所有的点
    #dataset对应的labels

    #第一步:计算距离:
    #shape返回元组(行,列)
    dataSetSize = dataSet.shape[0]
    #tile 创建一个数组,dataSetSize行,每行数据是inX,inX和dataset相同列数
    #两个矩阵相减,inX和每两个点之间的距离
    diffMat = tile(inX, (dataSetSize,1)) - dataSet

    #矩阵的每个值算平方
    sqDiffMat=diffMat**2
    #矩阵的每行求和,得到一个一位数组,平方和
    sqDistances=sqDiffMat.sum(axis=1)
    #开根号
    distances = sqDistances**0.5
    #inX和每个点的距离,按照距离值从小到大排序,返回排序后的索引序号
    sortedDisIndicies = distances.argsort()
    print(sortedDisIndicies)
    #第二步:选择距离最小的K个点
    #classCount是个字典,key想放label,值想放个数,初始值是0
    classCount={}
    #距离值从小到大排序,统计这些距离对应的标签都是哪些
    for i in range(k):
        #因为labels和dataset是对应的,利用上一步的索引序号找到对应的标签
        voteIlabel = labels[sortedDisIndicies[i]]
        #统计出前K个都有哪些标签
        #python字典get,dict.get(key, default=None),没找到key的话赋值为0
        #找到已有label的话,值+1
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
    #python sorted排序,括号里第一个参数是迭代,key=限定了排序内容,reverse=True是大到小
    #items() 返回可遍历的(键,值)元组数组
    sortedClassCount = sorted(classCount.items(),
        key=operator.itemgetter(1),reverse=True)
    print(sortedClassCount)
    return sortedClassCount[0][0]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值