上一集中 我们使用了决策树 作为我们的分类器
今天我们会学习 怎样添加代码来将它可视化
从而看到它是如何在幕后运行的
分类器有很多种
你可能已经听过一些 -- 比如神经网络
或是支持向量机
那我们为什么首先用决策树呢？
那是因为决策树有一大特点
它们简单易读 便于理解
实际上 决策树是 为数不多的可解释的分类器
你可以彻底理解为什么这个分类器 做了这样的决定
这在实战中是非常有用的
好的 我来介绍一下我们今天要用的
一个真实的数据集
这个数据集叫做"莺尾花“
“莺尾花”是一个典型的机器学习问题
在这个问题中 我们想要用不同的测量标准
例如花瓣的长度和宽度
来辨别我们有哪种莺尾花
这个数据集里
我们有三种不同的莺尾花
山莺尾、变色莺尾和青龙莺尾
下拉页面 你会看到 每种花有 50 个样本
所以一共有 150 个样本
注意 每个样本由四个特征来描述
分别是萼片和花瓣的长和宽
就像在“苹果和橘子”问题中一样
表格前四列是这四个特征
而表格最后一列显示标签
就是本行莺尾花样本的种类
我们的目标是用这个数据集 来训练我们的分类器
然后我们就可以用分类器来判断
任意一个新样本 是什么种类的莺尾花了
学习如何使用已有的数据集是很有用的
所以让我们来练习 把“莺尾花”导入到 Scikit-learn 中
来看看它的代码形式是什么样的
Scikit 便利地为我们提供 一系列的样本数据集
包括“莺尾花” 还有一些导入用的工具
我们可以用屏幕上的代码 来导入"莺尾花”数据集
数据集包括维基百科的两张表格
还有一些元数据
元数据包括特征的名字
还有不同种类的花的名字
而上述的特征和种类
存放在数据变量中
举个例子 如果我输出第一个条目
你会看到这朵花的尺寸
这里的数字索引到特征名
所以第一个值指花萼长度
第二个是花萼宽度 以此类推
目标变量中包括标签
类似地 这些数字索引到目标名
现在来输出第一个样本
标签“0”代表山莺尾
如果你看一下维基百科的表格
你会发现我们刚刚输出了第一行
现在数据和目标变量 都有 150 个条目
你也可以选择进行迭代
来输出整个数据集
现在我们学会了如何使用数据集
现在就可以开始训练分类器了
不过在这之前 我们先要把数据分组
我将把一些样本拿出来
先放在一边备用
我们把这些样本称为测试数据
其余的称为训练数据
稍后我们会用这些
机器从未见过的测试数据
来测试完成训练的分类器有多准确
测试是机器学习实战当中
一个非常重要的部分
我们在之后的视频中会详加解释
现在 我将从每一种花中
拿掉一个样本
正好 数据集的编号方式是
第一朵山莺尾样本的索引是 0
第一朵变色莺尾的索引是 50 以此类推
这里的句法看起来比较复杂
其实效果只是移除了 三个刚才说到的条目
然后我将创造两个新的变量集
一个做训练用 另一个测试用
训练集中会有大部分的数据
而测试集中只有我们刚才移除的三项
就像之前一样 我们可以创建一个决策树分类器
然后用训练集中的数据训练它
在我们将它可视化之前
可以先用决策树 来将测试数据做一个分类
已知每种花有一个样本
那么我们可以输出所有可能的标签
现在来看看决策树是如何判断的
我们向它提供测试样本的特征
就能得到标签
你会看到决策树判断的标签 与测试数据相符
这代表决策树做出了正确的判断
要知道 这是一个非常简单的测试
之后我们会详细解析这其中的步骤
现在 我们先来将这棵决策树可视化
来看看这个分类器是如何工作的
首先 我将复制粘贴 Scikit 教程中的部分代码
因为这些代码是用于可视化的
而不是机器学习中的概念
所以我在这一讲中不多解释
注意我现在要合并 这两个样本中的代码
来制作一个简单易读的 PDF
现在我可以运行脚本并打开 PDF
我们就能看到这棵决策树了
要用它来分类数据的话 你需要从上往下看
每个节点代表一个特征
并向其提出一个“是或不是”问题
比如 这个节点提问花朵宽度 是否小于0.8厘米
如果答案是“是” 往左走
反之 往右走
现在我们要用这棵决策树来分类
我们测试数据中的一个样本
这些是第一朵测试花的特征和标签
记住 你可以在元数据中
找到特征名
我们知道这朵花是山莺尾
那么来看看决策树是如何决定的吧
我放大一下这个窗口 这样看得清楚
决策树问的第一个问题是
“花瓣宽度是否小于0.8厘米？”
这是我们的第四特征
答案是“是” 所以我们往左走
这是 我们已经抵达了一个叶节点
没有其他问题可提了
所以决策树给出的判断是“山莺尾”
它答对了！
注意它的标签是 0 是山莺尾的索引
现在我们来试试第二个测试样本
这是一朵变色莺尾
来看看决策树如何判断
同样地 从树的顶端开始
这一次花朵宽度大于0.8厘米
答案是“否”
所以我们往右走
下一个问题是 “花瓣宽度是否小于1.75？"
它在试着得到一个区间
答案是”是“ 所以往左走
现在它问 “花瓣长度是否小于4.95？”
答案也是“是” 所以再往左走
最后 决策树提问 “花瓣宽度是否小于1.65？”
答案是“是” 往左走
那么现在我们就得到了一个判定：
这是一朵变色莺尾
决策树再次答对了
你可以自己试试最后一个样本
记住 我们使用决策树的方法
跟代码运行的方法相同
这就是快速将决策树可视化的方法
这其中还有很多要学的东西
尤其是从样本中 自动建立决策树的过程
我们在之后的视频中会提到
不过现在 我们先总结一下重点
决策树提出的每一个问题
必须针对某个特征
那就意味着你选的特征越可靠
决策树的准确性就越高
下一集中我们会详细讲
如何选择一个可靠的特征
感谢观看
我们下集再见