虽然这篇是一看就懂的教程,但是仍然建议你有一些先修知识:

  1. 具有基本的数学素养:微积分,线性代数,统计学
  2. 具有简单的编程基础:了解一点Git和Github的知识,简单的Python知识

如果不具备以上条件的话,可以从以下一些入手:

网上有哪些学习微积分的好网站?

3Blue1Brown的线性代数和微积分视频

文科生想自学一点统计学,看哪些入门书籍比较好?

[Git] 简易Git使用指南

[Github] Github简易使用指南

[Python]手把手教程:Python制作番茄钟

当然如果你想直接看这篇文章做一个大概的了解,或者想一边看一边查漏补缺,哪里不会再学习哪里,也是OK的


监督分类Supervised Classification

首先我们熟悉一个概念,什么是”监督分类“,比方说现在有一个问题”马是acerous吗?“(你不必知道什么是acerous)

鉴于你并不知道什么acerous,那么这里有一些例子给你参考:

acerous:猫、兔子、猪、鹦鹉、大象

non-acerous:长颈鹿、犀牛、山羊

那么你现在知道马是不是acerous了呢?答错也没有关系,毕竟这里只有8个例子而已,如果给你10000个例子,你一定可以非常确定的说出马是不是acerous。

答案是:马是acerous,这个分类的标准就是看有没有角。好的,到这里你应该有点get到什么是监督分类了,根据一些特征(features)来进行分类。类似的例子还有根据某人的音乐喜好以及其所爱音乐的特点,比如节奏或流派推荐一首他们可能会喜欢的歌,也是监督分类

而对于我们不知道的特征,比方说从一组照片中找到某个特定的人,我们并没有很明确的一些特征来识别这个人,或者说特征实在是太多了,因此就不是监督分类

散点图

通过监督分类,我们知道了当我们需要处理一个新的情况的时候,需要首先明确过往例子的一些特征

我们再来看一个非常简单的例子:无人驾驶(这能叫一个简单的例子?看起来很难懂啊)

虽然无人驾驶很复杂,但是我们简化为一辆车在一片沙漠上,没有人,没有建筑,路面情况简化到只有两个特征:1坡度(Slope)2路面颠簸程度(Bumpness)

很明显,图中红圈的平坦不颠簸的情况对应散点图的红×位置

散点图可以帮助我们直观的观察数据,机器学习很重要的一个问题就是:给你一个全新的数据,通过对以往的数据的认识,对这个全新的数据进行预测

决策面

这个概念也非常的简单,现在你拿到的是如图的一个数据集,黑色的点是属于蓝色那一堆呢?还是红色那一堆呢?

好像不是很清楚哦。如果我们有了一个决策面就会很方便了

还回到刚刚的无人驾驶例子,共有750个数据,蓝色的点代表可以快速行驶,红色的点需要慢速行驶 :

特征 features:坡度(纵轴)、路面颠簸 (横轴)

标签 lables:快慢 (蓝色or红色的点)

这是它的决策面

Sklearn

Sklearn是一个非常有帮助的基于 Python 语言的机器学习工具。其中也包含我们本篇文章要介绍的朴素贝叶斯算法 Sklearn官方中文文档

朴素贝叶斯是一种非常简单的用于不同相互独立特征下的分类,之前我们讲到的决策面,或者说面对一个新的数据,如何进行分类都是用的朴素贝叶斯算法。

想要了解背后的公式原理可以看这篇博文 带你彻彻底底搞懂朴素贝叶斯公式,一点都不难的哦

由于我们要处理的是分类的问题,因此这里我们使用

朴素贝叶斯-高斯模型​scikit-learn.org图标

来,我们打开这个页面,翻到页面的example,下图就是关键代码的含义


Quiz

1.有关地形数据的GaussianNB部署

最后让我们做一个小小的测验来检查对前面知识的理解,这个quiz还是我们之前提到的无人车的模型

贝叶斯小测验​classroom.udacity.com

不要被这么多的代码吓到了,你只需要把ClassifyNB.py中的代码补上就好了,其他三个文件都不要更改,如果运行成功就会出现下面的图片,形成一个决策面

给你一个小提示朴素贝叶斯-高斯模型这里的example非常有用哦~

如果要查看答案

答案​github.com

2.计算GaussianNB的准确性

如果你完成了上面的Quiz,还可以继续计算GaussianNB的准确性哦,看看用预测的结果与实际的结果有多少是一致的。

Udacity​classroom.udacity.com

提示

1.features_test 和 labels_test 适用于测试的数据,可以先用features_test来进行预测,预测结果与labels_test进行对比

2.不妨用“sklearn accuracy”的关键词搜索一下,可以找到相关代码