为了账号安全,请及时绑定邮箱和手机立即绑定

《Machine Learning in Action》学习笔记(1)

标签:
Python
#coding:utf-8

#  kNN算法
# 1.计算已知类别数据集中的点与当前点之间的距离
# 2.按照距离递增次序排列
# 3.选取与当前点距离最小的k各点
# 4.确定前k个点所在类别的出现频率
# 5.返回前k各点出现频率最高的类别作为当前点的预测分类

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

# k-近邻算法分类器
def classify0(inX,dataSet,labels,k):  #inX分类的输入向量,dataSet输入的训练样本集,labels标签向量,k选择最近邻的数目
    dataSetSize=dataSet.shape[0]   #shape[0]计算行,shape[1]计算列

    #距离计算,欧式距离
    diffMat=tile(inX,(dataSetSize,1))-dataSet  #tile()重复数组
    sqDiffMat=diffMat**2  #**幂
    sqDistances=sqDiffMat.sum(axis=1)  #axis=0表示一个向量相加,axis=1表示对应坐标相加
    distances=sqDistances**0.5
    sortedDistIndicies=distances.argsort()  #argsort函数返回的是数组值从小到大的索引值

    #选择距离最小的k个点
    classCount={}
    for i in range(k):
        voteIlabel=labels[sortedDistIndicies[i]]
        classCount[voteIlabel]=classCount.get(voteIlabel,0)+1  #确定前k各距离最小元素所在的主要分类

    #item()方法把字典中每对key和value组成一个元组,并把这些元组放在列表中返回
    #operator.itemgetter(1)按照第二个元素的次序对元组进行排序
    # false默认升序,true降序
    sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
    return sortedClassCount[0][0]   #返回频率最高的元素标签

group,labels=createDataSet()
print classify0([0,0],group,labels,3)  #打印B
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消