matlab随机森林案例,随机森林算法简单实例
朋友们好~o(((())),首先请注意。我的开发环境是Jupyter实验室。使用的库和版本仅供您参考。
Python 3.7.1(您的版本至少需要3.4或更高版本
sci kit-学习0.20.0(您的版本至少需要0.19
Numpy 1.15.3,Pandas 0.23.4,Matplotlib 3.0.1和SciPy 1.1.0。
1摘要
1.1综合算法概述
集成学习是目前非常流行的机器学习算法。它不是单一的机器学习算法,而是通过在数据上建立多个模型,综合所有模型的建模结果。融合学习几乎在所有机器学习领域都能看到,在现实中也有相当大的作用。还可以用于营销模拟建模、客户源统计、留存和流失、疾病风险和患者敏感度预测。目前在各种算法竞赛中,随处可见随机森林、梯度提升树(GBDT)、XG boost等集成算法的身影,可见其效果之好,应用之广。
综合算法的目标
该算法通过考虑多个评价者的建模结果,可以得到一个综合的结果,无论是在回归还是分类上都优于单一模型。
由多个模型整合而成的模型称为“集合估计量”,构成集合估计量的每个模型称为基本估计量。一般有三种综合算法:装袋、装袋、堆码。
bagging方法的核心思想是建立几个独立的评价者,通过对综合评价者的预测进行平均或多数投票的原则来确定综合评价者的结果。套袋法的代表模型是随机森林。
在提升方法中,基赋值器是相互关联的,并按顺序逐个构造。其核心思想是结合弱评价者的力量,对难以评价的样本进行一次性预测,形成强评价者。提升方法的代表模型有Adaboost和梯度提升树。
1.2 sklearn的综合算法sk learn的综合算法模块集成
在合成算法中,有一半以上是树合成模型,决策树在合成中有很好的效果。本课程以随机森林为例,逐步揭示集成算法的奥秘。回顾:sklearn的决策树
启动随机林之前,请查看决策树。决策树是一种简单且应用广泛的模型,可以同时用于分类和回归问题。决策树的主要作用是通过从带有特征和标签的表格中查询特定的特征,总结出一系列的决策规则,然后用树形图表示这些决策规则。
决策树有两个中心问题,一个是如何找到合适的特征并提出问题,即如何分支,另一个是树应该在什么时候生长才能停止。
对于第一个问题,我们定义了用于测量分支质量的不纯指数。分类树的纯度用基尼系数或信息熵来衡量,回归树的纯度用MSE均方误差来衡量。在每次分支过程中,决策树计算所有特征的不纯净度,并选择不纯净度最低的特征进行分支。分支后,在分支后的每个值下计算每个特征的不纯程度,连续选择不纯程度最低的特征进行分支。
一旦每一个分支,整棵树的纯度就越来越小,决策树就追求最小纯度。因此,决策树均匀地分支,直到不再有特征,或者当整体杂质指数达到最佳时停止生长。
决策树很容易过度拟合。这意味着在训练集中表现良好,但在测试集中表现不佳。为了防止决策树过度拟合,请修剪决策树。Sklearn提供了大量的剪枝参数,后面会回顾。sklearn的基本建模流程
首先,我们来看看sklearn建模的基本流程。
在这个过程中,随机森林对应的代码与决策树基本一致:
FromKlearn。TreeimportRandomForestClassifier #导入所需的模块
RFC=randomforestclassifier(#实例化
RFC=RFC.fit(x_train,y_train) #使用训练集中的数据来训练模型。
导入result=RFC.score(x_test,y_test)测试集,通过接口调用所需信息。
2随机森林分类器
classs kle arn . ensemble . randomforestclassifier(n _ estimators= 10 ,criterion=Gini ,
max_depth=None,min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0,
max _ features=auto ,max_leaf_nodes=None,min _ infinity _ decrease=0.0,min _ infinity _ split=None
bootstrap=True,oob_score=False,n_
jobs=无,random _ state=无,verbose=0,warm_start=False,
class_weight=None)
随机森林是一种非常有代表性的Bagging集成算法,它的所有基评价器都是决策树。分类树组成的森林称为随机森林分类器,回归树集成的森林称为随机森林回归器。本节主要解释RandomForestClassifier,一个随机森林分类器。
2.1重要参数
2.1.1控制基评估器的参数
这些参数在随机森林中的意义和我们在决策树中解释的完全一样。单个决策树的精度越高,随机森林的精度也越高,因为bagging方法是依靠平均值或者少数服从多数的原则来确定整合结果的。
2.1.2 n估计量
这是森林中的树木数量,也就是基本评价者的数量。该参数对随机森林模型精度的影响是单调的,n _估计量越大,模型效果越好。但相应的,任何模型都有一个决策边界。当n _估计量达到一定水平时,随机森林的精度往往不上升或开始波动。此外,n估计量越大,所需的计算量和存储量就越大,训练时间也就越长。对于这个参数,我们渴望在训练难度和模型效果之间取得平衡。
在sklearn的现有版本中,n_estimators的默认值是10,但在即将到来的0.22版本中,它将被修改为100。这种修正显示了用户调整参数的倾向:较大的n估计量。
来建一片森林吧。
模型的优点是容易理解,可视化后每个人都能理解树。不幸的是,随机森林无法可视化。所以,为了让大家更直观的体验随机森林的效果,我们来比较一下随机森林和单一决策树的好处。我们仍然使用红酒数据集。导入我们需要的包。
%matplotlib内联
从sklearn.tree导入决策树分类器
从sklearn.ensemble导入RandomForestClassifier
Fromsklearn.datasets导入load _ wine导入所需的数据集。
wine=load_wine()
葡萄酒.数据
Wine.target回顾:sklearn建模的基本流程
从sklearn.model_selection导入训练_测试_拆分
Xtrain,Xtest,Ytrain,y test=train _ test _ split(wine . data,wine.target,test_size=0.3)
clf=决策树分类器(random_state=0)
RFC=RandomForestClassifier(random _ state=0)
clf=clf.fit(Xtrain,Ytrain)
rfc=rfc.fit(Xtrain,Ytrain)
score_c=clf.score(Xtest,Ytest)
score_r=rfc.score(Xtest,Ytest)
打印(单个树:{} 。格式(分数_c)
,随机森林:{} 。格式(分数_r)
)画出随机森林和决策树在十组交叉验证下的对比。
#让我们回顾一下交叉验证。
#交叉验证:是将数据集分成N个点,每个点依次作为测试集,n-1个副本中的每一个作为训练集,对模型进行多次训练,观察模型的稳定性的方法。
rfc_l=[]
clf_l=[]
对于范围(10)内的I:
RFC=RandomForestClassifier(n _ estimators=25)
rfc_s=cross_val_score(rfc,wine.data,wine.target,cv=10)。平均值()
rfc_l.append
clf=DecisionTreeClassifier()
clf_s=cross_val_score(clf,wine.data,wine.target,cv=10)。平均值()
clf_l.append
plt.plot(range(1,11),rfc_l,label=随机森林)
plt.plot(range(1,11),clf_l,label=决策树)
plt .图例()
plt.show()
#有没有注意到单个决策树的波动轨迹和随机森林是一致的?
#再次验证了我们之前提到的,单个决策树的准确率越高,随机森林的准确率越高。n _估计量的学习曲线
#####【时间警告:2分30秒】#####
superpa=[]
对于范围内的I(200):
RFC=RandomForestClassifier(n _ estimators=I 1,n_jobs=-1)
rfc_s=cross_val_score(rfc,wine.data,wine.target,cv=10)。平均值()
superpa.append(rfc_s)
print(max(superpa),superpa.index(max(superpa)))
plt.figure(figsize=[20,5])
plt.plot(范围(1,201),superpa)
plt.show()
思考?
森林随机使用什么方法保证集成的效果比单个分类器好?
2.2重要属性和接口
随机森林中有三个非常重要的属性:估计量_,oob_score_ and。功能_重要性_。estimators_用于查看随机森林中所有树的列表。
Oob_score_指的是自付费用分数。随机森林为了确保森林中的每棵树都是不同的,对训练集进行采样并放回以形成字母的训练集。在这个过程中,有些数据从来不是随机选取的,它们被称为“袋外数据”。模型不使用这些现金支付的数据进行训练。sklearn可以帮我们用它们测试模型。测试结果来源于这个属性oob_score_,本质是模型的准确性。
而。feature _ importance _ and。决策树中的feature _ importance _有相同的用法和含义,就是返回特征的重要性。
森林的随机接口和决策树完全一致,所以还是有四个常用接口:应用、拟合、预测、评分。另外还要注意random forest的predict_proba接口,它返回每个测试样本被分类到每个类别标签的概率,如果有几个类别的标签就返回几个概率。如果是二进制分类问题,predict_proba返回的值大于0.5则分为1,小于0.5则分为0。sklearn中传统的随机森林采用包法的规则,平均值或少数服从多数来确定整合结果,而sklearn中的随机森林对每个样本对应的predict_proba的返回概率进行平均得到一个平均概率,从而确定测试样本的分类。
#您可以分别尝试这些属性和接口。
RFC=RandomForestClassifier(n _ estimators=25)
rfc=rfc.fit(Xtrain,Ytrain)
rfc.score(Xtest,Ytest)
rfc.feature_importances_
应用RFC(Xtest)
预测(Xtest)
rfc.predict_proba(Xtest)
有了以上知识,实现随机森林分类基本没问题。从红酒数据集的表现来看,随机森林的效用比简单决策树强很多。可以自己改其他数据试试。