Machine Learning in Action(一)-- KNN(雏形)


  • The book is written by Peter Harrington.

一. 写在前面

因为通过自学Weka,已经对ML有一定的了解。同时这本书的前言是很久以前读的了,故不打算再回顾一次了。对于刚入门的人,还是推荐去了解一下。Weka也是个很厉害的数据挖掘软件,有空再写写Weka的学习历程~

这里只会提到我对这些函数的理解,具体运用还是要去百度。

二. 需要用到的函数(功能)

1. mat()

2. eye()

单位矩阵。稍微查了一下为什么eye是单位矩阵,大概是因为常用"I"表示单位矩阵,所以谐音。有点意思。
eye(m, n) — 产生m×n的单位矩阵
eye(m) — 产生m阶方阵
eye(size(A)) — 返回和矩阵A一样大小的单位矩阵;

3. I()

即返回逆矩阵inverse matrix。A乘A的逆矩阵等于单位矩阵。

4. tile()

即将矩阵”铺“开来。tile指铺地砖,平铺展示。
tile(mat, (a, b))

5. sum()

即求和函数
sum(axis=1) — 按行相加
sum(axis=0) — 按列相加

6. argsort()

排序,返回的是数组值从小到大的索引值
argsort(x) — 升序
argsort(-x)— 降序

7. items()

以列表返回可遍历的(键, 值) 元组数组。
这个我还是不太清晰——对列表、字典、元组、集合的概念。
在本例中,为了遍历字典,需要一对一对的数据,所以用到了这个函数。

8.get()

返回指定键的值,如果值不在字典中返回默认值。
语法: dict.get(key, default=None)

9.sorted()

即排序。
语法: sorted(iterable, key=None, reverse=False)

  • iterable:即需要排序的量。
  • key:即可以对iterable进行一些操作,
    比如:key = lambda x: abs(x)   #按绝对值排序,其中lambda是所谓匿名函数,暂时用的。
  • reverse:Ture — 降序; False — 升序。

三. 代码及注释

我是python3.7,因此书中的代码 iteritems() 改为了item() 。


from numpy import *   #导入numpy库
import operator               #运算符模块

def creatDataSet():    #创建数组
    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels = ['A','A','B','B']
    return group , labels
def classify0(inX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]   #读取矩阵的长度,【0】指第一维度,此例为4
    diffMat = tile(inX,(dataSetSize,1)) - dataSet   #inX与dataset每个元素,求差
    sqDiffMat = diffMat**2   #差值平方
    sqDistances = sqDiffMat.sum(axis=1)   #按行求和
    distances = sqDistances**0.5   #开根号——就是距离了
    sortedDistIndicies = distances.argsort()   #从小到大排好,输出其索引值
    classCount={}   #创建字典-labels:票数
    
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1   #票数累加
    sortedClassCount = sorted(classCount.items(), 
                              key=operator.itemgetter(1),
                              reverse=True)
    #itemgetter是定义一个函数,获取某个维度的值
    return sortedClassCount[0][0]

小结:

  1. tile(inX,(dataSetSize,1)) - dataSet:一开始不理解这句,但画个图就清晰多了。
  2. 回忆一下,就是一个二维平面,每个点都有对应的标志(label)。这就是训练集。然后来了一个没有标志的点,看k个离它最近的点。
  3. 这一部分的学习,区分对字典、列表、元组等。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值