小伙伴们好!今天继续给大家讲讲树模型,以及怎样用Python 进行极端随机森林回归模型构建。介绍代码之前,是不是有必要介绍下集成算法的一些理论?
集成学习算法
集成学习算法是通过构建并结合多个机器学习器来完成学习任务。俗话说,“三个臭皮匠,抵过诸葛亮”,所以集成学习往往能在机器学习算法中拥有较高的准确率,劣势就是模型的训练过程可能比较复杂,速度慢。
目前常见的集成学习算法主要有2种:基于Bagging的算法和基于Boosting的算法,基于Bagging的代表算法有随机森林,而基于Boosting的代表算法则有Adaboost、GBDT、XGBOOST等。
Bagging算法是bootstrap aggregating的缩写,它主要对样本训练集合进行随机化抽样,通过反复的抽样训练新的模型,最终在这些模型的基础上取平均。
随机森林
随机森林是一种重要的基于Bagging的集成学习方法,可以用来解决分类、回归等问题。
随机森林由LeoBreiman(2001)提出,从原始训练样本集N中有放回地重复随机抽取k个样本生成新的训练样本集合,然后根据自助样本集生成k个分类树组成随机森林,新数据的分类结果按分类树投票多少形成的分数而定。单棵树的分类能力可能很小,但在随机产生大量的决策树后,一个测试样品可以通过每一棵树的分类结果经统计后选择最可能的分类。
之前我有详细讲过Python随机森林实战,想复习的小伙伴指路:
极端随机森林
极端随机森林模型在分类精度和训练时间等方面都要优于随机森林模型。同样是一种多棵决策树集成的分类器,与随机森林分类器比较,主要有两点不同:
对于每个决策树的训练集,随机森林采用的是随机采样bootstrap来选择采样集作为每个决策树的训练集,而极端随机森林Extra tree一般不采用随机采样,即每个决策树采用原始训练集。随机森林应用的是Bagging模型,ExtraTree使用的所有的样本,只是特征是随机选取的,因为分裂是随机的,所以在某种程度上比随机森林得到的结果更加好。
在选定了划分特征后,随机森林的决策树会基于信息增益,基尼系数,均方差之类的原则,选择一个最优的特征值划分点,这和传统的决策树相同。但是Extra tree比较激进,会随机的选择一个特征值来划分决策树。
准备工作
首先加载一些Python的库。一看这么多库,是不是容易懵?我给大家捋一下,Python自带数据集一般在sklearn.datasets里。集成学习方法,大部分都在sklearn.ensemble里可以找到。模型衡量在sklearn.metrics里。模型结果可视化在matplotlib里。而Pandas、numpy是数据处理的常用库,只要你用python处理数据就离不开这俩,安上就得了。
from sklearn import datasetsfrom sklearn.ensemble import ExtraTreesRegressorimport pandas as pdimport numpy as npfrom sklearn import metricsimport matplotlib.pyplot as pltfrom matplotlib.pylab import rcParamsfrom sklearn.metrics import mean_squared_error, r2_score,mean_absolute_errorimport mathfrom sklearn.model_selection import train_test_split#这里我们使用了鸢尾花数据集iris = datasets.load_iris()X=iris.datay=iris.target#划分训练集、测试集,测试集占比10%X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.1,random_state=111)
模型构建
接下来,咱们就正式进行极端随机森林回归建模。
reg = ExtraTreesRegressor(n_estimators=100, random_state=0).fit(X_train, y_train)y_predict = reg.predict(X_test)reg.score(X_test, y_test) #R2reg.feature_importances_ #特征重要性d = pd.DataFrame(reg.feature_importances_)d['variables'] = X_train.columnsd = pd.DataFrame(sorted(d[0], reverse=True)) #把重要性分数整成表格

模型评估
#MSEmse_predict = mean_squared_error(y_test, y_predict)mse_predict#RMSEmse_predict**0.5#MAEmae_predict = mean_absolute_error(y_test, y_predict)mae_predict

模型重要性排序及可视化
重要性排序的功能名称是feature_importances_,一定注意下划线哦。
有了重要性的分数,我们当然要绘个图看看,这样才能更加直观的看出哪些变量更重要。
feat_imp = pd.DataFrame(reg.feature_importances_)feat_imp.plot(kind='barh', title='Feature Importances')plt.ylabel('Feature Importance Score')plt.show()

这就是极端随机森林模型构建的主要内容啦,看完是不是觉得一点都不难?安装了Python的小伙伴可以试试代码哦~每天进步一点点,我们一起加油!
更多Python干货文章一键查收:


