机器学习实战——KNN代码



机器学习和python编程都刚开始学,从看代码开始,实践出真知

# -*- coding: utf-8 -*-
from numpy import *
import operator
def classify0(inX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]  #object.shape[0]= len(object)
    diffMat = tile(inX, (dataSetSize,1)) - dataSet 
    sqDiffMat = diffMat**2 # 用矩阵计算欧氏距离,5,6两行,先拓展inX,与dataSet求差,再取平方
    sqDistances = sqDiffMat.sum(axis=1)  #求和
    distances = sqDistances**0.5   #求欧氏距离
    sortedDistIndicies = distances.argsort()    #排序
    classCount={}          #定义一个空的dict
    for i in range(k):       #求最近的k个
        voteIlabel = labels[sortedDistIndicies[i]] #投票,k个近邻中哪个类别最多,就把INX归为这一类
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 #投票,原本票数+1,如果原本没出现过这个类别,就新建并投1票
    sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True) #对投票排序,看看哪个类别票数最高
    return sortedClassCount[0][0]

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

group,lables = createDataSet()
print classify0([0,0],group,lables,3)


注释

dataSet.shape[0] :dataSet是一个array,array.shape含有两个元素,shape[0]表示array中的元素个数,shape[1]表示每个元素有几维,比如b=array([[1,2,1],[2,3,1]]),那么shape[0]=2,shape[1]=3

tile(A,reps):用来将一个array重复若干次,再组合成一个新的array,例如b=array([[1,2],[3,4]]) (numpy中的方法)

tile(b,2)      [[1 2 1 2]      tile(b,(2,1)) [[1,2],[3,4]
                   [3 4 3 4]]                         [1,2],[3,4]]

tile(b,(2,2))  [[1,2,1,2] [3,4,3,4]

                    [1,2,1,2] [3,4,3,4]]

array**2:将array中每个数字取平方

array.sum(axis=) :求和,有两种模式,axis=0求纵轴和,axis=1求横轴和

5,6,7,8几行代码,将输入的inX先拓展,再算和dataSet中所有点的欧氏距离,全都采用矩阵计算

array.argsort:排序,返回值是index序列,比如a=array([3],[2],[1]), a.argsort = [2,1,0]

dict.get(key,default=None)  例子:dict = {'Name':'Zara','Age':27}  dict.get('Age')=27  dict.get('Sex',"Never")="Never"

dict=sorted(dic.iteritems(), key,reverse): dic.iteritems()取dic中的键:值;key=operator.itemgetter(1)取第index=1的值作为排序关键字,reverse=true则从大到小排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值