使用决策树模型、随机森林和梯度提升树对Iris数据集进行处理

 天顺注册招商   2021-04-05 07:51   8 人阅读  0 条评论
原标题:使用决策树模型、随机森林和梯度提升树对Iris数据集进行处理

本文中将决策树模型、随机森林和梯度提升树分别应用于Iris数据集(详见https://archive.ics.uci.edu/ml/datasets/iris)对鸢尾花进行分类,并展示如何简洁地实现上述树模型的训练和预测。Iris数据集包含了150个样本(三种鸢尾花各50个样本)和4个特征(萼片长度、萼片宽度、花瓣长度、花瓣宽度)。关于树模型在金融领域的应用详见《机器学习在量化金融中的应用》一书第9章的金融案例研究。

01

决策树的实现

Scikit-Learn提供了实现决策树分类器的DecisionTreeClassifler类。代码列表1调用函数flt训练决策树,并调用函数predict在测试集上进行预测,最后输出混淆矩阵和特征重要性。

代码列表1 使用决策树对Iris数据集进行分类

importpandas aspd

fromsklearn.datasets importload_iris

fromsklearn.model_selection importtrain_test_split

fromsklearn.tree importDecisionTreeClassifier

#加载Iris数据集

iris=load_iris

#划分训练集和测试集

X_train, X_test, y_train, y_test=train_test_split(iris.data, iris.target, test_size= 0.33, random_state= 0)

#构建决策树分类器

clf_dt=DecisionTreeClassifier(max_depth= 3, criterion= 'gini', random_state= 0)

clf_dt=clf_dt.fit(X_train, y_train)

y_test_est=clf_dt.predict(X_test)

#输出混淆矩阵

pd.crosstab(y_test, y_test_est, rownames=[ 'Actual Species'], colnames=[ 'Predicted Species'])

展开全文

#查看特征重要性

print(clf_dt.feature_importances_)

Graphviz(详见https://www.graphviz.org/)是一个开源的图形可视化软件。图形可视化是表示结构信息的一种常用方法。如代码列表2所示,Graphviz可以方便地实现决策树的可视化。相应的树模型见图1。

代码列表2 使用Graphviz可视化决策树模型

#安装Graphviz

pip install graphviz

#加载Graphviz

importgraphviz

fromsklearn importtree

dot_data=tree.export_graphviz(clf_dt, out_file= None, feature_names=iris.feature_names, class_names=iris.target_names, filled= True, rounded= True, special_characters= True)

graph=graphviz.Source(dot_data)

graph.render( "iris")

使用决策树模型、随机森林和梯度提升树对Iris数据集进行处理  第1张

图1 Iris数据集上拟合的决策树模型

02

随机森林的实现

现在继续将随机森林应用于Iris数据集,使用RandomForestClassifler类实现随机森林。这里需要指定森林中树的数量(n estimators)、树的最大深度(max depth)和不纯度指标(criterion)。在本例中,选择n estimators = 20, max depth = 3, criterion='gini', 如代码列表3所示。

代码列表3 使用随机森林对 Iris数据集进行分类

importnumpy asnp

fromsklearn.ensemble importRandomForestClassifier

#构建随机森林

clf_rf=RandomForestClassifier(n_estimators= 20, max_depth= 3, criterion= 'gini', n_jobs= 2,random_state= 0) 5clf_rf=clf_rf.fit(X_train, y_train)

y_test_est_rf=clf_rf.predict(X_test)

#输出混淆矩阵

pd.crosstab(y_test, y_test_est_rf, rownames=[ 'Actual Species'], colnames=[ 'Pred icted Species'])

#查看特征重要性

print(clf_rf.feature_importances_)

03

梯度提升树的实现

与决策树和随机森林类似,使用GradientBoostingClassifler类可以实现梯度提升树。代码列表4展示了使用梯度提升树对Iris数据集进行分类。

代码列表4 使用梯度提升树对Iris数据集进行分类

fromsklearn.ensemble importGradientBoostingClassifier

#构建梯度提升树

clf_gbt=GradientBoostingClassifier(random_state= 0)

clf_gbt.fit(X_train, y_train)

y_test_est_gbt=clf_rf.predict(X_test)

#输出混淆矩阵

pd.crosstab(y_test, y_test_est_gbt, rownames=[ 'ActualSpecies'], colnames=[ 'Pred icted Species'])

#查看特征重要性

print(clf_gbt.feature_importances_)

04

三种树模型的比较

如图2所示,在这个例子中,三种树模型在测试集上的混淆矩阵相同。图2(a)、图2(c)和图2(e)对应的是没有归一化的混淆矩阵,图2(b)、图2(d)和图2(f)对应的是归一化的混淆矩阵。但在使用其他数据集时三种树模型的数值结果可能会有明显的变化。

使用决策树模型、随机森林和梯度提升树对Iris数据集进行处理  第2张

使用决策树模型、随机森林和梯度提升树对Iris数据集进行处理  第3张

使用决策树模型、随机森林和梯度提升树对Iris数据集进行处理  第4张

图2 三种树模型在Iris数据集上的混淆矩阵

接下来看看特征重要性。从表1和图3中可以看到三种树模型中最重要的特征都是花瓣宽度。在决策树模型中花瓣宽度起着决定性的作用萼片长度和萼片宽度与预测无关。但是在随机森林中花瓣长度和花瓣宽度几乎一样重要。随机森林和梯度提升树的萼片长度和萼片宽度并不是无关特征这可以理解为集成方法带来的影响。

表1 三种树模型在Iris数据集上的特征重要性

使用决策树模型、随机森林和梯度提升树对Iris数据集进行处理  第5张

使用决策树模型、随机森林和梯度提升树对Iris数据集进行处理  第6张

使用决策树模型、随机森林和梯度提升树对Iris数据集进行处理  第7张

图3 图形化展示三种树模型在Iris数据集上的特征重要性

本文节选自 《机器学习在量化金融中的应用》

扫码,优惠购书

使用决策树模型、随机森林和梯度提升树对Iris数据集进行处理  第8张

本文地址:https://lkwed.com/post/17002.html
版权声明:本文为原创文章,版权归 天顺注册招商 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?