随机森林:修订间差异

来自决策链云智库
无编辑摘要
无编辑摘要
 
(未显示2个用户的10个中间版本)
第5行: 第5行:
|simpleicon=Random Forest_Pure.svg
|simpleicon=Random Forest_Pure.svg
|developer=Dev.Team-DPS
|developer=Dev.Team-DPS
|productionstate=PC可用
|productionstate={{图标文件|Win}} / {{图标文件|W10}} Win10及以上可用
|productionstatedesc=在[[DecisionLinnc | V1.0]]部署
|productionstatedesc=在[[Update:DecisionLinnc 1.0.0.8|V1.0]]部署
|nodeenglishname=[[Has english name::Random Forest]]
|nodeenglishname=Random Forest
|abbreviation=[[Has abbreviation::RF_Model]]
|abbreviation=RF
|funcmaincategory=机器学习
|funcmaincategory=机器学习
|funcsubcategory=[[DataML Lv1 Cat::分类训练器]]
|funcsubcategory=[[DataML Lv1 Cat::分类训练器]]
第20行: 第20行:
|nodeavailableplotlist=nodenoplotoutput
|nodeavailableplotlist=nodenoplotoutput
|nodeavailabletablelist=Table_For_Downstream
|nodeavailabletablelist=Table_For_Downstream
|nodeconfiguration=VariableList;DropManu;Text
|nodeconfiguration=VariableList;DropMenu;Text
|nodeinputports=WorkFlow-Control ➤;Transfer-Table ■
|nodeinputports=WorkFlow-Control ➤;Transfer-Table ■
|nodeoutputports=WorkFlow-Control ➤;Transfer-Model ▶;Transfer-Table ■
|nodeoutputports=WorkFlow-Control ➤;Transfer-Model ▶;Transfer-Table ■
第27行: 第27行:
|nextnode=[[朴素贝叶斯]]
|nextnode=[[朴素贝叶斯]]
}}
}}
==算法概述==
==算法概述==
决策树通常用于运筹学,特别是决策分析,以帮助确定最有可能达到目标的策略,但也是机器学习中的一种流行工具<ref>{{cite journal |author=De Ville, Barry |title=Decision trees |journal=Wiley Interdisciplinary Reviews: Computational Statistics |volume=5 |number=6 |pages=448--455 |year=2013 |publisher=Wiley Online Library }}</ref>。机器学习中的决策树是一种用于分类和回归的非参数监督学习方法。目标是创建一个模型,通过学习从数据特征推断出的简单决策规则来预测目标变量的值。树可以看作是分段常数近似。
随机森林是一种用于分类、回归和其他任务的集成学习方法。它通过对训练数据集进行有放回的随机抽样(bootstrap采样),并在每个[[决策树]]上进行随机特征选择,来构建多个[[决策树]]模型。最终的预测结果是基于所有决策树的投票或平均结果。对于分类任务,随机森林的输出是大多数树选择的类别。对于回归任务,返回各个树的均值或平均预测。随机森林可以纠正[[决策树]]过度拟合训练集的缺点。
 
===优缺点===
决策树的一些优点是:
# 易于理解和解释。树木可以被形象化。
# 需要很少的数据准备。其他技术通常需要数据标准化、创建虚拟变量并删除空白值。一些树和算法组合支持 缺失值。
# 使用树(即预测数据)的成本是用于训练树的数据点数量的对数。
# 使用白盒模型。如果给定的情况在模型中是可观察到的,则该条件的解释很容易通过布尔逻辑来解释。相比之下,在黑盒模型中(如神经网络),结果可能更难以解释。
# 可以使用统计测试来验证模型。这使得可以解释模型的可靠性。
# 即使生成数据的真实模型在某种程度上违反了其假设,也表现良好。


决策树的缺点包括:
===历史===
# 决策树学习者可以创建过于复杂的树,而这些树不能很好地概括数据。这称为过度拟合。为了避免这个问题,需要采用剪枝、设置叶节点所需的最小样本数或设置树的最大深度等机制。
随机森林的一般方法最初由Ho在1995年提出<ref>{{cite journal |last1=Ho |first1=Tin Kam |title=Random decision forests |journal=Proceedings of the 3rd International Conference on Document Analysis and Recognition |volume=1 |pages=278–282 |year=1995 |publisher=IEEE}}</ref>。 Ho证明了使用倾斜超平面进行树的分割的森林可以在增长过程中提高准确性,同时不会遭受过度训练的问题,只要森林在随机选择的特征维度上进行限制。随后的一项研究<ref>{{cite journal |last1=Breiman |first1=Leo |title=Random forests |journal=Machine Learning |volume=45 |issue=1 |pages=5–32 |year=2001}}</ref>得出了类似的结论,即只要其他分割方法在随机选择的特征维度上被强制不敏感,它们的行为也是类似的。需要注意的是,这种更复杂分类器(更大的森林)几乎单调地变得更准确的观察结果,与常见的观念相反,即分类器的复杂性在达到一定准确性水平后会受到过拟合的影响。随机决策森林对过度训练的抵抗力的解释可以在Kleinberg的随机判别理论中找到<ref>{{Cite web |url=https://en.wikipedia.org/wiki/Random_forest |title=Random forest |website=Wikipedia |access-date=2024-01-17}}</ref>。
# 决策树可能不稳定,因为数据的微小变化可能会导致生成完全不同的树。通过在集成中使用决策树可以缓解这个问题。
# 决策树的预测既不是平滑的也不是连续的,而是分段常数近似,如上图所示。因此,他们不擅长推断。
# 已知学习最优决策树的问题在最优性的几个方面甚至对于简单的概念来说都是 NP 完全的。因此,实用的决策树学习算法基于启发式算法,例如贪婪算法,其中在每个节点做出局部最优决策。此类算法不能保证返回全局最优决策树。这可以通过在集成学习器中训练多个树来缓解,其中特征和样本是通过替换随机采样的。
# 有些概念很难学习,因为决策树不容易表达它们,例如异或、奇偶校验或多路复用器问题。
# 如果某些类占主导地位,决策树学习器会创建有偏差的树。因此,建议在拟合决策树之前平衡数据集。


==示例代码-决策树分类节点==
==示例代码-随机森林分类节点==
该节点使用Python编写,调用scikit-learn包<ref>{{cite journal |author=Kramer, Oliver |title=Scikit-learn |journal=Machine learning for evolution strategies |pages=45--53 |year=2016 |publisher=Springer }}</ref>。以下为示例代码:
该节点使用Python编写,调用scikit-learn包<ref>{{cite journal |author=Kramer, Oliver |title=Scikit-learn |journal=Machine learning for evolution strategies |pages=45--53 |year=2016 |publisher=Springer }}</ref>。以下为示例代码:
<syntaxhighlight lang="Python">
<syntaxhighlight lang="Python">
from sklearn import ensemble
from sklearn.ensemble import RandomForestClassifier
X = [[0, 0], [1, 1]]
from sklearn.datasets import make_classification
Y = [0, 1]
X, y = make_classification(n_samples=1000, n_features=4,
clf = tree.DecisionTreeClassifier()
                          n_informative=2, n_redundant=0,
clf = clf.fit(X, Y)
                          random_state=0, shuffle=False)
clf = RandomForestClassifier(max_depth=2, random_state=0)
clf.fit(X, y)
print(clf.predict([[0, 0, 0, 0]]))
</syntaxhighlight>
</syntaxhighlight>


第61行: 第49行:


=='''节点使用指南'''==
=='''节点使用指南'''==
* 最适用的场景:决策树可用于解决分类问题,其中目标是将数据分为不同的类别或预测数据的类别。
* 最适用的场景:随机森林可用于解决分类问题,其中目标是将数据分为不同的类别或预测数据的类别。
* 处理的数据类型:结局变量为二分类,特征变量大多数为连续型的变量。
* 处理的数据类型:结局变量为二分类,特征变量大多数为连续型的变量。
===变量配置===
===变量配置===

2024年1月19日 (五) 19:29的最新版本

Random Forest.png
节点状态
Windows / Windows 10 Win10及以上可用
V1.0部署
随机森林Random Forest.svg
节点开发者决策链算法研发部 (Dev.Team-DPS)
节点英文名Random Forest
功能主类别机器学习
英文缩写RF
功能亚类别分类训练器
节点类型数据挖掘
开发语言Python
节点简介

随机森林(Random Forest)是一种基于集成学习的机器学习算法,由多个决策树组成。它通过对训练数据集进行有放回的随机抽样(bootstrap采样),并在每个决策树上进行随机特征选择,来构建多个决策树模型。最终的预测结果是基于所有决策树的投票或平均结果。

端口数量与逻辑控制(PC)
Input-入口2个
Output-出口3个
Loop-支持循环
If/Switch-支持逻辑判断
输入输出
可生成图片类型(推荐)
可生成数据表类型(推荐)
相关节点
上一节点LightGBM
下一节点朴素贝叶斯



算法概述

随机森林是一种用于分类、回归和其他任务的集成学习方法。它通过对训练数据集进行有放回的随机抽样(bootstrap采样),并在每个决策树上进行随机特征选择,来构建多个决策树模型。最终的预测结果是基于所有决策树的投票或平均结果。对于分类任务,随机森林的输出是大多数树选择的类别。对于回归任务,返回各个树的均值或平均预测。随机森林可以纠正决策树过度拟合训练集的缺点。

历史

随机森林的一般方法最初由Ho在1995年提出[1]。 Ho证明了使用倾斜超平面进行树的分割的森林可以在增长过程中提高准确性,同时不会遭受过度训练的问题,只要森林在随机选择的特征维度上进行限制。随后的一项研究[2]得出了类似的结论,即只要其他分割方法在随机选择的特征维度上被强制不敏感,它们的行为也是类似的。需要注意的是,这种更复杂分类器(更大的森林)几乎单调地变得更准确的观察结果,与常见的观念相反,即分类器的复杂性在达到一定准确性水平后会受到过拟合的影响。随机决策森林对过度训练的抵抗力的解释可以在Kleinberg的随机判别理论中找到[3]

示例代码-随机森林分类节点

该节点使用Python编写,调用scikit-learn包[4]。以下为示例代码:

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=1000, n_features=4,
                           n_informative=2, n_redundant=0,
                           random_state=0, shuffle=False)
clf = RandomForestClassifier(max_depth=2, random_state=0)
clf.fit(X, y)
print(clf.predict([[0, 0, 0, 0]]))

拟合后,模型可以用于预测样本的类别,可以在通用预测模块实现内外部测试集的预测。

节点使用指南

  • 最适用的场景:随机森林可用于解决分类问题,其中目标是将数据分为不同的类别或预测数据的类别。
  • 处理的数据类型:结局变量为二分类,特征变量大多数为连续型的变量。

变量配置

  • 选择特征变量:作为特征进行学习的变量(X),多选。
  • 选择目标变量:作为结局的二分类变量(y),单选。

参数配置

  • 设置随机数:控制模型的随机性。
  • 拆分策略:用于在每个节点选择分裂的策略,包含最佳分割和随机分割。
  • 损失函数算法选择:衡量分割质量的函数。支持的标准为
    • 'gini':基尼纯度(Gini impurity),
    • 'log_loss',
    • 'entropy':信息熵。
  • 最大深度:树的最大深度。如果没有,则扩展节点,直到所有叶子都是纯的或直到所有叶子包含少于"最小拆分样本数"的样本。
  • 最小拆分样本数:分裂内部节点所需的最小样本数。
  • 叶节点最小样本数:叶节点所需的最小样本数。该参数仅当任何深度的分割点在左右分支中至少留下训练样本时,才会被考虑。这可能具有使模型平滑的效果,尤其是在回归中。
  • 最大特征数:寻找最佳分割时要考虑的特征数量。
  • 最大叶节点数:以最佳优先的方式种植一棵树。最佳节点定义为杂质的相对减少。如果没有,则叶节点数量不受限制。
  • 最小不纯度衰减阈值:如果分裂导致杂质减少大于或等于该值,则节点将被分裂。

注意事项

  • 不支持带空值运算,用多重插补插补空值进行插补,
  • 节点不出图,
  • 导入该节点的数据端口为训练数据集,导入前注意转换。

参考文献

  1. Ho, Tin Kam (1995). "Random decision forests". Proceedings of the 3rd International Conference on Document Analysis and Recognition. IEEE. 1: 278–282.
  2. Breiman, Leo (2001). "Random forests". Machine Learning. 45 (1): 5–32.
  3. "Random forest". Wikipedia. Retrieved 2024-01-17.
  4. Kramer, Oliver (2016). "Scikit-learn". Machine learning for evolution strategies. Springer: 45--53.


查找其他类别的节点,请参考以下列表