极简sklearn-决策树(一)

前言

当前最火爆的人工智能技术应该就是深度学习技术了,有了深度学习,为什么还要使用传统的机器学习技术呢?主要原因,当然是深度学习的成本太高了。深度学习技术需要大量的GPU资源,现在的GPU多贵就不用说了,并且需要大量的数据来喂养,如果数据不足,效果还不如传统的机器学习。

深度学习技术最大的优点就是效果出色,如果是计算机视觉,自然语言处理,自动驾驶等领域,肯定首选深度学习技术,如果是其他的分类和回归应用,完全可以考虑用机器学习算法来实现,毕竟现在有了集成算法和模型融合,机器学习的效果也很好。

环境安装

优先推荐anaconda,下载地址: anaconda | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirroranaconda 使用帮助 | 镜像站使用帮助 | 清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。https://mirror.tuna.tsinghua.edu.cn/help/anaconda/

安装graphviz,在本机搜索里面搜 

选中graphviz和python-graphviz进行安装

极简sklearn-决策树(一)_第1张图片

 分类红酒数据集

我们用一个小案例来说明决策树的使用,sklearn使用起来及其简单,一共就四步

  1. 导入数据集,探索数据,同时切割训练集和测试集
  2. 实例化模型,参数配置就是在这一步
  3. 用训练集训练模型
  4. 使用测试集测试模型效果

首先让我们来探索下红酒数据集

from sklearn import tree #导入决策树模型
from sklearn.datasets import load_wine  #导入红酒数据集
from sklearn.model_selection import train_test_split #导入训练集测试集分隔器

wine = load_wine() #加载红酒数据集

打印数据集,可以看到data就是数据,target就是标签,target_names一共3个,说明是三分类的数据集。

极简sklearn-决策树(一)_第2张图片

wine.data.shape #查看数据维度,返回值第一个数字表示一共多少条数据,第二个表示多少个特征

可以看到一共178条数据,13个特征,数据量不大 

接下来切分数据集

#切割数据为训练集,测试集,x表示data(特征),y表示target(标签),test_size表示测试集比例
xtrain, xtest, ytrain, ytest = train_test_split(wine.data, wine.target, test_size=0.3)
print(xtrain.shape)
print(xtest.shape)

第二步,实例化模型

#第二步,实例化模型
clf = tree.DecisionTreeClassifier()

第三步,使用训练集训练模型

#第三步,训练模型
clf.fit(xtrain, ytrain)

第四步,使用测试集测试模型效果

#第四步,测试模型效果
score = clf.score(xtest, ytest)
print(score)

结果:

没进行任何调参,准确率88.8%,还不错,反正比自己瞎猜强。

论模型效果 

什么样的模型才是好模型呢?一般从三个维度来衡量

  1. 模型效果,效果永远是第一位的,比如人脸识别的准确率,没人愿意用时灵时不灵的产品
  2. 运算速度,速度也很重要,要是一个产品识别一个人脸要一分钟,相信这个产品是没有市场的
  3. 可解释性,当人工智能决定解雇你的时候,你肯定很想知道为什么,可惜可解释性在AI领域是件可望不可求的事,往往功能越强大的模型,可解释性越差,往后人类需要适应没有原因的结果

可视化决策树

一件可喜的事情是,决策树的可解释性相当好,让我们来展示下决策树

feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸']

import graphviz
dot_data = tree.export_graphviz(clf                                            #模型
                                ,feature_names= feature_name                   #特证名
                                ,class_names=["拉菲","罗曼尼康帝","皇家礼炮"]  #标签名
                                ,filled=True                                  #是否填充颜色
                                ,rounded=True                                 #是否圆角
                                )
graph = graphviz.Source(dot_data)

极简sklearn-决策树(一)_第3张图片

 可以看到,根节点的samples是124个,与训练集数量吻合。当脯氨酸小于765时,进入第二层左边那个节点,可以看到进入这个节点的样本一共77个,有44个是罗曼尼康帝,31个是皇家礼包,所以还不能确定到底是哪个,当类黄酮小于1.4时进入第三层最左边的节点,这时36个样本中有31个皇家礼炮,所以脯氨酸小于765并且类黄酮小于1.4大概率是皇家礼炮了。

PS:皇家礼炮不是威士忌么,怎么变成红酒了?其实这个标签名是我随便写的,因为在机器学习的数据集中,很多数据做了脱敏处理,你既看不到原始数据,也看不到真实的标签名,不过这不影响学习与使用

你可能感兴趣的:(机器学习,sklearn,决策树,人工智能)