《机器学习实战》笔记 第二章(1)

《机器学习实战》笔记 第二章 (1)

写在前面

第一次来到CSDN大家庭,以学习笔记为开篇。《机器学习实战》一书基于Python2为基础编写,在Python3盛行的时代想必是要有所变动。故写此文,记录学习。

为什么没有第一章?

第一章以及后续所有章节准备用思维导图呈现。后续在我学完整本书后放出。

什么是kNN?

kNN是k-近邻算法,理论性意思书上、百度上有。帮助理解意思我比喻下,一个羊圈有一群羊,且分多种类别的羊,比如西部羊、东部羊、太平羊和北冰羊等。每种羊有很多种特征(比如羊角长度,羊毛颜色等。),知道每只羊属于哪种羊。然后来了一只羊,观察他的特征和羊圈里哪些羊像,找出最像的几只(具体几只,就是设定的k值),然后看看这几只羊里哪种羊最多,那么新的羊就是这个种类。

2.1

先新建一个kNN.py文件

#导入科学计算包numpy和运算符模块operator
from numpy import *
import operator as op
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

在IPython下输入以下代码

>>>import kNN # 导入kNN.py
>>>group,label = kNN.createDataSet() # 引用createDataSet()
>>>group # 查看group
Out[1]: 
array([[1. , 1.1],
       [1. , 1. ],
       [0. , 0. ],
       [0. , 0.1]])
>>>labels # 查看labels
Out[2]: ['A', 'A', 'B', 'B']

继续在kNN.py中编辑,实现kNN算法

def classify0(inX, dataSet, labels, k):
    # 得到dataSet的行数
    dataSetSize = dataSet.shape[0]
    # 二维特征相减
    diffMat = tile(inX, (dataSetSize, 1)) - dataSet
    # 平方
    sqDiffMat = diffMat**2
    # sum()求和
    # axis=1跨列
    sqDistances = sqDiffMat.sum(axis=1)
    # 开方,得到距离
    distances = sqDistances**0.5
    # 将distances中的元素从小到大排列,提取其对应的index(索引),然后输出到sortedDistIndices
    sortedDistIndices = distances.argsort()
    # 定义记录类别次数的一个字典
    classCount = {}
    for i in range(k):
        voteIlabel = labels[sortedDistIndices[i]]
        # 得到类别次数
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
    # 注意!!!!
    # python3中用items()替换python2中的iteritems(),书上这里还是iteritems()
    # key=operator.itemgetter(1)根据字典的值进行排序
    sortedClassCount = sorted(classCount.items(),key=op.itemgetter(1),reverse=True)
    # 返回次数最多的类别
    return sortedClassCount[0][0]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值