机器学习 | MATLAB实现RF(随机森林)TreeBagger分类树参数设定

机器学习 | MATLAB实现RF(随机森林)TreeBagger分类树参数设定

目录

  • ​​基本介绍​​
  • ​​模型描述​​
  • ​​函数功能​​
  • ​​属性描述​​
  • ​​程序设计​​
  • ​​参考资料​​

基本介绍

MATLAB实现RF(随机森林)的函数有TreeBagger和fitrensemble/
fitcensemble。本篇介绍TreeBagger分类树参数设定。

模型描述

  • TreeBagger 将一组决策树打包用于分类或回归。 Bagging 代表引导聚合。集成中的每棵树都是在输入数据的独立绘制的引导副本上生长的。未包含的观察结果对于这棵树来说是“无用的”。
  • TreeBagger 依赖于 ClassificationTree 和 RegressionTree 功能来生长单个树。特别是,ClassificationTree 和 RegressionTree 接受为每个决策拆分随机选择的特征数量作为可选输入参数。也就是说,TreeBagger 实现了随机森林算法 。
  • 对于回归问题,TreeBagger 支持均值回归和分位数回归(即分位数回归森林 )。
  • 要预测平均响应或估计给定数据的均方误差,分别传递 TreeBagger 模型和要预测或错误的数据。要对袋外观察执行类似操作,使用 oobPredict 或 oobError。
  • 要估计响应分布的分位数或给定数据的分位数误差,将 TreeBagger 模型和数据分别传递给 quantilePredict 或 quantileError。要对袋外观察执行类似操作,使用 oobQuantilePredict 或 oobQuantileError。

函数功能

  • append 将新树添加到集合中
  • compact 决策树的紧凑集成
  • error 错误(误分类概率或 MSE)
  • fillprox 训练数据的近似矩阵
  • growTrees 训练额外的树并添加到集合中
  • margin 分类边距
  • mdsprox 邻近矩阵的多维缩放
  • meanMargin 平均分类边距
  • oobError 袋外错误
  • oobMargin 袋外激励
  • oobMeanMargin 袋外平均激励
  • oobPredict 袋外观察的集成预测
  • oobQuantileError 回归树袋的袋外分位数损失
  • oobQuantilePredict 来自回归树袋的袋外观察的分位数预测
  • partialDependence 计算部分依赖
  • plotPartialDependence 创建部分依赖图 (PDP) 和 个体条件期望 (ICE) 图
  • predict 使用袋装决策树的集合预测响应
  • quantileError 使用回归树袋的分位数损失
  • quantilePredict 使用回归树袋预测响应分位数

属性描述

  • ClassNames
    包含响应变量 Y 的类名的元胞数组。
  • ComputeOOBPrediction
    一个逻辑标志,指定是否应计算训练观察的袋外预测。 默认值为假。如果此标志为真,则以下属性可用:OOBIndices、OOBInstanceWeight
    如果此标志为真,则可以调用以下方法: oobError、oobMargin、oobMeanMargin
  • ComputeOOBPredictorImportance
    一个逻辑标志,指定是否应计算变量重要性的袋外估计。 默认值为假。 如果此标志为真,则 ComputeOOBPrediction 也为真。如果此标志为真,则以下属性可用:
    OOBPermutedPredictorDeltaError
    OOBPermutedPredictorDeltaMeanMargin
    OOBPermutedPredictorCountRaiseMargin
  • Cost
    Cost(i,j) 是将一个点分类到类别 j 的成本,如果它的真实类别是 i(即,行对应于真实类别,列对应于预测类别)。 Cost 的行和列的顺序对应于 ClassNames 中类的顺序。 Cost 中的行数和列数是响应中唯一类的数量。
  • DefaultYfit
    predict 和 oobPredict 返回的默认值。 DefaultYfit 属性控制在无法进行预测时返回的预测值。 例如,当 oobPredict 需要预测集合中所有树的袋内观察时。
    对于分类,您可以将此属性设置为 ‘’ 或 ‘MostPopular’。 如果您选择“MostPopular”(默认),则属性值将成为训练数据中最有可能的类的名称。 如果您选择“”,则袋内观察值将被排除在袋外误差和边际的计算之外。
    对于回归,您可以将此属性设置为任何数值标量。 默认值是训练数据响应的平均值。 如果将此属性设置为 NaN,则袋内观察值将被排除在袋外误差和边际的计算之外。
  • DeltaCriterionDecisionSplit
    拆分标准中大小为 1×Nvars 的数字数组对每个变量的拆分求和,在整个生长树集合中取平均值。
  • InBagFraction
    为每个引导副本随机选择替换的观察值的一部分。 每个副本的大小为 Nobs×InBagFraction,其中 Nobs 是训练集中的观察数。 默认值为 1。
  • MergeLeaves
    指定是否具有相同父级的决策树叶子的逻辑标志被合并用于不降低总风险的拆分。 默认值为假。
  • Method
    树使用的方法。 可能的值是分类集成的“分类”和回归集成的“回归”。
  • MinLeafSize
    每片树叶的最小观察次数。 默认情况下,MinLeafSize 为 1 用于分类,5 用于回归。 对于决策树训练,MinParent 值设置为等于 2*MinLeafSize。
  • NumTrees
    标量值等于集成中决策树的数量。
  • NumPredictorSplit
    一个大小为 1×Nvars 的数值数组,其中每个元素在该预测变量上给出了对所有树求和的多个拆分。
  • NumPredictorsToSample
    为每个决策拆分随机选择的预测变量或特征变量的数量。 默认情况下,NumPredictorsToSample 等于分类变量总数的平方根,以及回归变量总数的三分之一。
  • OOBIndices
    大小为 Nobs-by-NumTrees 的逻辑数组,其中 Nobs 是训练数据中的观察数,NumTrees 是集成中的树数。 (i,j) 元素的真值表示观测值 i 对于树 j 而言是袋外的。 换句话说,观察 i 没有被选择用于生长树 j 的训练数据。
  • OOBInstanceWeight
    大小为 Nobs-by-1 的数值数组,包含用于计算每个观察的袋外响应的树的数量。 Nobs 是用于创建集成的训练数据中的观察数。
  • OOBPermutedPredictorCountRaiseMargin
    一个大小为 1×Nvars 的数值数组,其中包含每个预测变量(特征)的变量重要性度量。 对于任何变量,如果该变量的值在袋外观察中置换,则度量是提高的边距数和降低的边距数之间的差异。 该度量是针对每棵树计算的,然后在整个集成上取平均值,然后除以整个集成上的标准差。 对于回归树,此属性为空。
  • OOBPermutedPredictorDeltaError
    一个大小为 1×Nvars 的数值数组,其中包含每个预测变量(特征)的重要性度量。 对于任何变量,如果该变量的值在袋外观察中置换,则度量是预测误差的增加。 这个度量是针对每棵树计算的,然后在整个集成上取平均值,然后除以整个集成上的标准差。
  • OOBPermutedPredictorDeltaMeanMargin
    一个大小为 1×Nvars 的数值数组,其中包含每个预测变量(特征)的重要性度量。 对于任何变量,如果该变量的值在袋外观察中置换,则度量是分类边际的减少。 这个度量是针对每棵树计算的,然后在整个集成上取平均值,然后除以整个集成上的标准差。 对于回归树,此属性为空。
  • OutlierMeasure
    一个大小为 Nobs×1 的数值数组,其中 Nobs 是训练数据中的观察数,包含每个观察的异常值测量值。
  • Prior
    每个类的先验概率的数值向量。 Prior 的元素顺序对应于 ClassNames 中类的顺序。
  • Proximity
    一个大小为 Nobs-by-Nobs 的数值矩阵,其中 Nobs 是训练数据中的观测数,包含观测值之间接近度的度量。 对于任何两个观测值,它们的接近度定义为这些观测值落在同一片叶子上的树木的比例。 这是一个对称矩阵,对角线元素和非对角线元素上的 1,范围从 0 到 1。
  • Prune
    如果决策树被修剪,则 Prune 属性为 true,否则为 false。 不建议对集成进行修剪决策树。 默认值为假。
  • SampleWithReplacement
    一个逻辑标志,指定是否为每个具有替换的决策树采样数据。 如果 TreeBagger 使用替换采样数据,则此属性为 true,否则为 false。 默认值为真。
  • TreeArguments
    fitctree 或 fitrtree 的参数元胞数组。 TreeBagger 在为 ensemble 种植新树时使用这些参数。
  • Trees
    一个大小为 NumTrees-by-1 的元胞数组,其中包含集合中的树。
  • SurrogateAssociation
    一个大小为 Nvars-by-Nvars 的矩阵,具有变量关联的预测度量,在整个生长树集合中进行平均。 如果您将集成设置“代理”设置为“开”,则每棵树的此矩阵都充满了对代理拆分进行平均的关联预测度量。 如果您将整体设置“代理”设置为“关闭”(默认),则 SurrogateAssociation 是对角线。
  • PredictorNames
    包含预测变量(特征)名称的元胞数组。 TreeBagger 从可选的“名称”参数中获取这些名称。 默认名称为“x1”、“x2”等。
  • W
    长度为 Nobs 的权重数值向量,其中 Nobs 是训练数据中的观察(行)数。 TreeBagger 使用这些权重来增长集成中的每棵决策树。 默认 W 是个 (Nobs,1)。
  • X
  • 大小为 Nobs-by-Nvars 的表格或数值矩阵,其中 Nobs 是观察值(行)数,Nvars 是训练数据中的变量数(列)。 如果您使用预测值表来训练集成,则 X 是一个表。 如果您使用预测值矩阵训练集成,则 X 是一个矩阵。 此属性包含预测变量(或特征)值。
  • Y
    响应数据的大小 Nobs 数组。 Y 的元素对应于 X 的行。对于分类,Y 是真实类标签的集合。 标签可以是任何分组变量,即数字或逻辑向量、字符矩阵、字符串数组、字符向量元胞数组或分类向量。 TreeBagger 将标签转换为字符向量元胞数组以进行分类。 对于回归,Y 是一个数值向量。

程序设计

  • 加载 Fisher 的 iris 数据集。
  • 使用整个数据集训练一组袋装分类树。 指定 50 个弱学习器。 存储每棵树的哪些观察结果是无用的。
  • 绘制第一个经过训练的分类树的图。
load fisheriris
rng(1); % For reproducibility
Mdl = TreeBagger(50,meas,species,'OOBPrediction','On',...
'Method','classification')
view(Mdl.Trees{1},'Mode','graph')
  • 运行结果
Mdl = 
TreeBagger
Ensemble with 50 bagged decision trees:
Training X: [150x4]
Training Y: [150x1]
Method: classification
NumPredictors: 4
NumPredictorsToSample: 2
MinLeafSize: 1
InBagFraction: 1
SampleWithReplacement: 1
ComputeOOBPrediction: 1
ComputeOOBPredictorImportance: 0
Proximity: []
ClassNames: 'setosa' 'versicolor' 'virginica'

Properties, Methods
  • Mdl 是一个 TreeBagger 。
  • Mdl.Trees 存储构成集成的训练分类树(CompactClassificationTree 模型对象)的 50×1 单元向量。
  • 默认情况下,TreeBagger 会长出很深的树。
  • Mdl.OOBIndices 将袋外索引存储为逻辑值矩阵。
  • 在生长的分类树的数量上绘制袋外误差。
figure;
oobErrorBaggedEnsemble = oobError(Mdl);
plot(oobErrorBaggedEnsemble)
xlabel 'Number of grown trees';
ylabel 'Out-of-bag classification error';

机器学习 | MATLAB实现RF(随机森林)TreeBagger分类树参数设定

  • 袋外误差随着树木数量的增加而减少。
  • 要标记袋外观察,请将 Mdl 传递给 oobPredict。