当前最火爆的人工智能技术应该就是深度学习技术了,有了深度学习,为什么还要使用传统的机器学习技术呢?主要原因,当然是深度学习的成本太高了。深度学习技术需要大量的GPU资源,现在的GPU多贵就不用说了,并且需要大量的数据来喂养,如果数据不足,效果还不如传统的机器学习。
深度学习技术最大的优点就是效果出色,如果是计算机视觉,自然语言处理,自动驾驶等领域,肯定首选深度学习技术,如果是其他的分类和回归应用,完全可以考虑用机器学习算法来实现,毕竟现在有了集成算法和模型融合,机器学习的效果也很好。
优先推荐anaconda,下载地址: anaconda | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirroranaconda 使用帮助 | 镜像站使用帮助 | 清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。https://mirror.tuna.tsinghua.edu.cn/help/anaconda/
选中graphviz和python-graphviz进行安装
我们用一个小案例来说明决策树的使用,sklearn使用起来及其简单,一共就四步
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个,说明是三分类的数据集。
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%,还不错,反正比自己瞎猜强。
什么样的模型才是好模型呢?一般从三个维度来衡量
一件可喜的事情是,决策树的可解释性相当好,让我们来展示下决策树
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)
可以看到,根节点的samples是124个,与训练集数量吻合。当脯氨酸小于765时,进入第二层左边那个节点,可以看到进入这个节点的样本一共77个,有44个是罗曼尼康帝,31个是皇家礼包,所以还不能确定到底是哪个,当类黄酮小于1.4时进入第三层最左边的节点,这时36个样本中有31个皇家礼炮,所以脯氨酸小于765并且类黄酮小于1.4大概率是皇家礼炮了。
PS:皇家礼炮不是威士忌么,怎么变成红酒了?其实这个标签名是我随便写的,因为在机器学习的数据集中,很多数据做了脱敏处理,你既看不到原始数据,也看不到真实的标签名,不过这不影响学习与使用