决策树又称为判定树,决策树在机器学习中有着广泛的应用,主要是因为它易于解释。比如,我们现在要做一个决策,周末是否要打球,我们可能要考虑几个因素。 第一,天气因素,如果是晴天,我们就打球,如果是雨天我们就不打球。 第二,球场是否满员,如果满员,我们就不打球,如果不满员我们就打球。 第三,是否需要加班,如果加班则不打球,如果不需要加班则打球。这样我们就形成了一个决策树,如图所示。
我们可以将这个决策过程抽象一下,每个决策点我们称之为分支节点,如图所示
例:现在我需要做一个是否去逛街购物的决策,其中有几个因素共同影响我做这个决策:空余的时间、合适的天气、足够的资金和志同道合的伙伴。首先是时间是否空余,如果有空闲的时间就可以去,否则不去;其次是天气是否合适,阴天适合逛街,晴天和雨天都不适合;再次是手中的资金是否足够自己去购物,如果资金足够就去,否则不去;最后是是否有一起去的伙伴,如果有伙伴,那么就去,否则不去。根据以上因素,就能用图的决策树帮助我做这个决策。
随机森林是多个决策树的组合,最后的结果是各个决策树结果的综合考量。随机森林的工作流程如下图。随机森林的随机主要体现在两点:第一是随机抽取样本,第二是随机抽取特征。随机森林通过随机有放回地抽取数据样本集n个,然后用这n个样本集训练n棵决策树。如果做的是分类任务,就将n棵树的结果投票作为最后的输出结果,如果做的是回归任务,就将最后的n棵树的结果的均值作为最后的输出结果。
案例实战:用决策树和随机森林对sklearn自带的红酒数据集wine进行分类。
#导入需要的模块
from sklearn.tree import DecisionTreeClassifier
from matplotlib import pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
#导入数据集
wine = load_wine()
X=wine.data
y=wine.target
#划分训练测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)
clf = DecisionTreeClassifier(random_state=0)
rfc = RandomForestClassifier(random_state=0)
clf.fit(X_train, y_train)
rfc.fit(X_train, y_train)
score_c = clf.score(X_test, y_test)
score_r = rfc.score(X_test, y_test)
print("单棵树的准确率为: {}".format(score_c), "随机森林的准确率为:{}".format(score_r))