继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

ABOER
关注TA
已关注
手记 1
粉丝 1
获赞 4
#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
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP