1. 写在前面

近来感觉机器学习,深度学习神马的是越来越火了,从AlphaGo到Master,所谓的人工智能越来越NB,而我又是一个热爱新潮事物的人,于是也来凑个热闹学习学习。最近在看《Machine Learning IN ACTION》(作者:Peter Harrington)这本书,感觉非常不错。该书不是单纯的进行理论讲解,而是结合了许多小例子深度浅出地进行实战介绍。本博文作为学习笔记,用来记录书中重点内容和稍微地进行知识点的补充,也希望给看到的人带来一些帮助。

目前只看到了第2章,由于是刚开始,因此难度不大。在数学知识上,该章节主要涉及到了初级的线性代数(矩阵的运算)和概率论知识。书中的代码都是用Python 2.7写的,主要用的是NumPy库。本章介绍的是k-Nearest Neighbors(kNN,k-近邻)算法,通过以下3个例子进行说明。

2. kNN简介

对于一个能够采用kNN算法求解的问题的前提通常是:首先需要有一些关于该问题的样本数据集,称为训练集合;然后每条数据都有对应的标签,即我们知道每条数据所属的分类。该类问题的提法通常是:当给定一条未知标签的数据时,我们能够根据样本数据分析出该数据的标签。kNN算法的做法是:将未知标签的数据和样本数据集中的数据相比较,把和未知标签数据最“相近”的一些数据的标签作为未知标签数据的标签。由于“相近”的一些数据的标签可能各自都不相同,因此通常选取k个最为“相近”的标签,统计各标签出现的次数,选取频数最高者。这里“相近”的定义还需要给出。

下面结合3个实战例子进行讲解。

3. 爱情片还是动作片

第一个例子是如何判断一部我们还没有看过的电影是爱情片还是动作片。直觉告诉我们,爱情片的亲吻镜头较多,而动作片的打斗镜头较多。为此我们统计了几部爱情片和动作片的亲吻和打斗的镜头数,同时也对待判断的电影(记为电影X)做了统计,我们希望借助于kNN算法判别出电影X是爱情片还是动作片。

如下是统计结果:

网友评论