2021年战胜机器学习纸老虎-第二周 决策树(一)

2021-02-01 11:18:09 浏览数 (1)

大家好,很高兴来到了2021年战胜机器学习纸老虎-第二周 决策树(一)的内容时间。我一步一步从简单的例子,进入机器学习的世界。(PPT大小限制,压缩了会变形,就一页一页贴吧)

【这段交代了解即可,咱们在未来的实例当中,会不断遇到,然后逐渐学习。我说不出过程,但我会做,岂不是也很好?】

机器学习的关键是统计学习,是从大量的数据经验中学会如何判断和反馈,就恰似一个小朋友,他看到了、学到了一个汽车是什么样子的,下一次他可能遇到汽车,就能认出汽车。说回机器学习,在数据的基础上,用策略、算法、模型来模拟学习过程,最终输出结果。

机器学习的步骤,概括下来就是以上六个步骤,每次做机器学习的时候,走一遍完整的过程,就能得到一个结果,无论它是否满足需求,优化它,是不变的追求。

实现统计学习方法的步骤如下:

1、得到一个有限的训练数据集合

2、确定包含所有可能的模型的假设空间,即学习模型的集合

3、确定模型选择的准则,即学习的策略

4、实现求解最优模型的算法,即学习的算法

5、通过学习方法选择最优模型

6、利用学习的最优模型对新数据进行预测或分析

好了,正文开始咱们还是从简单的慢慢深入,慢慢学习!

假设机器学习也是个打怪升级的任务,初入新手村,我们接到了第一个任务,总会出现一个老铁匠说,选件武器防身吧!对于机器学习的方法,我觉得它们也像是武器一样,你得做出选择,哪个好?还得看看你遇到的实际情况。

这些个奇怪的武器,我先不进行一一的介绍,我要化身成为老铁匠,来带你逐一领略一番,看看哪个兵器适合你。随手抛给你一个叫做决策树的玩意儿,让你试试!

看到这颗树了吗,倒过来就是咱们的决策树,从根部按照一定的条件分叉,满足条件走一边,不满足就走另一边就好了,像极了非黑即白的思考方式,每次的选择并不多,做出选择就好。走到了尽头,你将获得一个答案,下面就由一个小例子,试试身手吧。

你看到了一只叫蟒蛇的动物,你想判断它是否是哺乳动物。你以前就认识一些动物,像【人,野猪、狮子】什么的,其实或许也没亲眼看到它们,但是我们知道它们的一些特点,比如会不会飞?是不是生活在水里,是不是靠生个蛋来孕育下一代,是不是啥都吃什么的,现在通过悄悄的观察,发现这蟒蛇【吃肉,生蛋繁衍下一代,不喜欢生活在水里,不会飞】,那它是哺乳动物吗?

1、导入用到的库:

代码语言:python代码运行次数:0复制
import pandas as pd
from sklearn import tree
from sklearn.feature_extraction import DictVectorizer  # 字典特征向量化

2、加载数据

代码语言:python代码运行次数:0复制
df = pd.read_csv(r'./data-animals.csv')
df.columns  # 查看下列名,数据量少,数据量多的话选取哪些特征
Index(['动物', '饮食习性', '胎生动物', '水生动物', '会飞', '哺乳动物'], dtype='object')

以下是数据集:
动物	饮食习性	胎生动物	水生动物	会飞	哺乳动物
0	人类	杂食动物	是	否	否	是
1	野猪	杂食动物	是	否	否	是
2	狮子	肉食动物	是	否	否	是
3	苍鹰	肉食动物	否	否	是	否
4	鳄鱼	肉食动物	否	是	否	否
5	巨蜥	肉食动物	否	否	否	否
6	蝙蝠	杂食动物	是	否	是	是
7	野牛	草食动物	是	否	否	是
8	麻雀	杂食动物	否	否	是	否
9	鲨鱼	肉食动物	否	是	否	否
10	海豚	肉食动物	是	是	否	是
11	鸭嘴兽	肉食动物	否	否	否	是
12	袋鼠	草食动物	是	否	否	是
13	蟒蛇	肉食动物	否	否	否	否
14	海豚	肉食动物	是	是	否	是
15	鸭嘴兽	肉食动物	否	否	否	是
16	袋鼠	草食动物	是	否	否	是
17	蟒蛇	肉食动物	否	否	否	否

3、构造方法

代码语言:python代码运行次数:0复制
vec = DictVectorizer()  # 将分类数据向量化
clf = tree.DecisionTreeClassifier()  # 构建决策树,这里default:criterion='gini'

4、构造训练数据集

代码语言:python代码运行次数:0复制
train_x = df[['饮食习性', '胎生动物', '水生动物', '会飞']]  # 选择了这四个特征
train_y = df['哺乳动物']  # 这是分类结果,标签列,也就是想知道的答案

5、操作模型

代码语言:python代码运行次数:0复制
X = vec.fit_transform(train_x.to_dict('records')).toarray()  # 分类特征向量化
vec.get_feature_names()  # 可了解新列各代表的意义
['会飞=否',
 '会飞=是',
 '水生动物=否',
 '水生动物=是',
 '胎生动物=否',
 '胎生动物=是',
 '饮食习性=杂食动物',
 '饮食习性=肉食动物',
 '饮食习性=草食动物']
 
clf.fit(X, y)  # 将数据喂给模型,进行训练,这样我们就学习了第一个模型。

6、决策树结果输出

代码语言:python代码运行次数:0复制
import graphviz
dot_data = tree.export_graphviz(clf, out_file=None, feature_names=vec.get_feature_names(),class_names=y)  
graph = graphviz.Source(dot_data)  
graph 

以上图左为构建的决策树,简单说下格子当中的数据含义,例如第一格内:

第一行:代表决策树首先按照【胎生动物=否 <= 0.5】这个条件进行判断,由于分类数据的向量化,该特征不是0,就是1,按照这个条件,就是以0.5为界,那这行的意思,该特征为0的是True走左侧支线,1则是False,走右侧支线。

第二行:代表用‘gini’系数算出来的值

第三行:表示训练集当中的样本数

第四行:代表训练集全部样本中,标签值的类型,如本数据集,有7个非哺乳动物,11个哺乳动物

第五行:不太懂,等我再学一下

7、进行预测:

代码语言:python代码运行次数:0复制
df.iloc[17]
clf.predict([X[17,:]])  # 预测特定的特征下,样本的标签值

现在蟒蛇的位置在第17个,我们来预测它是否是哺乳动物,答案是否定的。

好了,第一个模型咱们就掌握了,拥有了构造这个模型的能力,遇到了分类问题和数据,就可以用决策树试试了。

决策树的第一次分享,就到这里了,下周将迎来关于决策树的第二次分享,谢谢大家。

0 人点赞