【机器学习实战-python3】k-近邻算法

虽然现在深度学习大火,但是个人想利用最近的时间系统地学一下机器学习的基础方法,结合Machine Learning in action 一书,在此记录学习实践过程。
工具:PythonCharm 书中的代码是python2的,而我用的python3,结合实践过程,这里会标注实践时遇到的问题和针对python3的修改。
实践代码和训练测试数据可以参考这里
https://github.com/stonycat/ML-in-Action
(原书作者也提供了源码,但是存在一些问题,且在python3中有部分修改)

【k-近邻算法】

关于kNN的算法介绍就不细说了,网上搜索有很多讲的很好的blog。
1、约会网站配对案例实战:
某人将对象分为三类人,不喜欢的人,魅力一般的人,极具魅力的人。
这里实现的过程是,给定一个人的数据,进行打分预测属于哪类人,从而帮助用户是否选择相亲进行决策。下面是本人结合原书添加注释和部分修改的代码

#coding=utf-8
from numpy import *  #科学计算包numpy
import operator      #运算符模块
#k-近邻算法
#计算距离
def classify0(inX,dataSet,labels,k):
    dataSetSize=dataSet.shape[0]   #shape读取数据矩阵第一维度的长度
    diffMat = tile(inX, (dataSetSize, 1)) - dataSet  #tile重复数组inX,有dataSet行 1个dataSet列,减法计算差值
    sqDiffMat=diffMat**2 #**是幂运算的意思,这里用的欧式距离
    sqDisttances=sqDiffMat.sum(axis=1) #普通sum默认参数为axis=0为普通相加,axis=1为一行的行向量相加
    distances=sqDisttances**0.5
    sortedDistIndicies=distances.argsort() #argsort返回数值从小到大的索引值(数组索引0,1,2,3)
 #选择距离最小的k个点
    classCount={}
    for i in range(k):
        voteIlabel=labels[sortedDistIndicies[i]] #根据排序结果的索引值返回靠近的前k个标签
        classCount[voteIlabel]=classCount.get(voteIlabel,0)+1 #各个标签出现频率
    sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True) #排序频率
    #python3中:classCount.iteritems()修改为classCount.items()
    #sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list。
    #reverse默认升序 key关键字排序itemgetter(1)按照第一维度排序(0,1,2,3)
    return sortedClassCount[0][0]  #找出频率最高的

#创建数据集
def createDataSet()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值