为什么“值”之和不等于 scikit-learn RandomForestClassifier 中“样本”的数量?

2023-12-13

我通过 RandomForestClassifier 构建了一个随机森林并绘制了决策树。参数“值”(红色箭头所指)是什么意思?为什么[]中两个数字的总和不等于“样本”的数量?我看到了一些其他的例子,[]中的两个数字之和等于“样本”的数量。为什么我的情况没有?

df = pd.read_csv("Dataset.csv")
df.drop(['Flow ID', 'Inbound'], axis=1, inplace=True)
df.replace([np.inf, -np.inf], np.nan, inplace=True)
df.dropna(inplace = True)
df.Label[df.Label == 'BENIGN'] = 0
df.Label[df.Label == 'DrDoS_LDAP'] = 1
Y = df["Label"].values
Y = Y.astype('int')
X = df.drop(labels = ["Label"], axis=1)
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.5)
model = RandomForestClassifier(n_estimators = 20)
model.fit(X_train, Y_train)
Accuracy = model.score(X_test, Y_test)
        
for i in range(len(model.estimators_)):
    fig = plt.figure(figsize=(15,15))
    tree.plot_tree(model.estimators_[i], feature_names = df.columns, class_names = ['Benign', 'DDoS'])
    plt.savefig('.\\TheForest\\T'+str(i))

enter image description here


不错的收获。

尽管没有记录,但这是由于引导抽样默认情况下发生在随机森林模型中(请参阅我的答案为什么单棵树的随机森林比决策树分类器好得多?有关 RF 算法详细信息及其与单纯“一堆”决策树的区别的更多信息)。

让我们看一个例子iris data:

from sklearn.datasets import load_iris
from sklearn import tree
from sklearn.ensemble import RandomForestClassifier

iris = load_iris()

rf = RandomForestClassifier(max_depth = 3)
rf.fit(iris.data, iris.target)

tree.plot_tree(rf.estimators_[0]) # take the first tree

enter image description here

这里的结果与您报告的类似:对于除右下节点之外的所有其他节点,sum(value)不相等samples,因为它应该是这样的“简单”决策树.

谨慎的观察者可能会注意到这里看起来很奇怪的其他事情:虽然 iris 数据集有 150 个样本:

print(iris.DESCR)

.. _iris_dataset:

Iris plants dataset
--------------------

**Data Set Characteristics:**

    :Number of Instances: 150 (50 in each of three classes)
    :Number of Attributes: 4 numeric, predictive attributes and the class

树的基节点应包括所有这些节点,即samples第一个节点只有 89。

为什么会这样?到底发生了什么?为了看看,让我们安装第二个 RF 模型,这次无引导采样(即与bootstrap=False):

rf2 = RandomForestClassifier(max_depth = 3, bootstrap=False) # no bootstrap sampling
rf2.fit(iris.data, iris.target)

tree.plot_tree(rf2.estimators_[0]) # take again the first tree

enter image description here

好吧,既然我们已经禁用了引导采样,一切看起来都“很好”:value每个节点都等于samples,并且基节点确实包含整个数据集(150 个样本)。

因此,您描述的行为似乎确实是由于引导采样造成的,在创建样本时有更换(即最终以复制集合中每个单独决策树的样本),这些重复样本不会反映在sample树节点的值,显示树节点的数量unique样品;尽管如此,它is反映在节点上value.

这种情况与 RF 回归模型以及 Bagging 分类器完全类似 - 分别参见:

  • sklearn RandomForestRegressor 显示的树值存在差异
  • 为什么该决策树每一步的值之和不等于样本数?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么“值”之和不等于 scikit-learn RandomForestClassifier 中“样本”的数量? 的相关文章

随机推荐

  • ODOO:在特定时间运行 cron

    我想添加一个在特定时间运行的 cron 作业 我已经在 xml 中添加了 cron 但它有interval number and interval type 如何让它在一天中的特定时间运行
  • 带渐变层的 iOS UISLider

    我正在构建一个 iOS 应用程序 我必须在其中实现自定义 UISlider 问题是内置的UISlider不支持渐变轨迹 另一个问题是我的 UI 风格指南显示当前跟踪值矩形应该是两种颜色的渐变 如图所示 如何构建 UISlider 的自定义版
  • Git:如何将 rebase 与他们的策略结合使用

    基本上 我只想 重新 设置父级 假设提交A 特定提交 commitB 这是某个分支的根提交x 建议here在其中一个答案中 我可以通过移植来做到这一点 稍后我会尝试一下 也许这是更好的方法 然而 在阅读本文之前 我认为这应该可以通过reba
  • C# 中的日期格式

    我有一个用于显示日期时间的字符串 例如 Mon dd Dec YYYY hh mm ss 我想这样显示它 dd Dec YYYY 有什么简单的方法可以做到吗 您可以调用 DateTime 类上的格式化方法 DateTime time Dat
  • 在 C# 中隐藏/显示 Windows 窗体面板 [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我尝试在 C 中显示 隐藏面板 但是当我单击 button1 时 我想看到 panel1 但出现了 panel2 当我点击按钮 2 时 面板 2 就消失了 但是当我第一次点击按钮2时 面板
  • M 以下 Android 版本的 Android 运行时权限?

    最近我的ola 出租车应用程序 最新更新后 运行时请求位置权限 它没有打开位置设置屏幕 但只需单击 是 设备的我的位置 GPS 就会打开 并且应用程序会继续进行 而无需进入位置设置或任何设置屏幕 此功能即将在 Android M 中推出 并
  • 将数据帧列表中的变量聚合到单个数据帧中

    我正在 R 中执行每个保单的人寿保险估值 每月现金流量预测是按每个保单执行的 并返回以下格式的数据框 例如 Policy1 data frame ProjM 1 200 Cashflow1 rep 5 200 Cashflow2 rep 1
  • 如何在 Selenium 中测试“记住我”复选框功能

    我正在尝试测试登录表单的 记住我 功能 我可以输入用户名和密码 单击复选框 单击提交 然后quit or close 浏览器 但是当我重新打开浏览器时new ChromeDriver 或任何其他WebDriver实现 测试站点不记得任何东西
  • 是否可以强制存在量化类型变量仅具有单一类型?

    考虑下面的代码 trait Foo T def one Foo gt T def two T def three x T def test T f Foo T val b f one b three b two 方法测试无法进行类型检查 它
  • Excel:从工作表调用 vba 函数时将当前单元格作为参数传递

    我正在尝试创建一个 VBA 函数 该函数接受一个单元格作为参数 并使用各种 Range Offset 从那里开始工作 该函数将在工作表单元格中调用 为了进行测试 我使用这个简单的脚本 Public Function testPublic t
  • 使用 chrome 和 safari 查看时,html 页面中的“tt”、“ti”、“ff”等字符消失

    在特定的 html 文件中 查看时所有 ti fi tt 字符都丢失 当我们在inspect element 例如 解决方案 拼写错误为 解决方案 示例截图 相同的 html 在 FireFox 上运行良好 上述问题在 Chrome 和 S
  • Ajax.BeginForm 不调用 onSuccess

    在 ASP NET MVC 3 应用程序中 我使用 Ajax BeginForm 将书面文本发布到控制器 using Ajax BeginForm Post Forum new threadId Model Thread Id new Aj
  • 在 Fabric.js 中使用 setAngle() 后,旋转和缩放控件关闭

    我想让用户旋转对象Fabric js动力画布 但将其旋转限制为 90 度增量 想法是 当它们旋转然后停止时 物体会以最接近的角度 卡入 到位 通过监听 object rotating 设置最近的角度 然后调用 object setAngle
  • 为什么我的 Breeze.js 实体没有创建 ko.observables?

    我使用的 Breeze js 没有服务器端组件 并使用以下代码在客户端创建实体 根据沃德的要求 我简化了一切 并添加了更多信息 我的 MetaDataStore 配置功能 function configureMetadataStore me
  • F2PY找不到模块

    我在 Python 中使用 f2py 编译模块时遇到困难 我有一个用 Fortran 编写的软件 可以在 Linux 64 位机器上编译良好 此外 F2Py 还编译了一个使用 Fortran 位的 Python 模块 Python 模块的编
  • 如何使用 C++ 检查进程是否正在运行

    如果一个进程没有运行 我不应该显示某些上下文菜单选项 我正在使用进程名称检查进程是否正在运行 但问题是 进程名称在不同的 Windows 平台上显示方式不同 即 Windows 任务栏上的 Windows 64 位进程名称是 应用程序名 e
  • 解密 TripleDES“坏数据”

    我是加密 解密新手 我正在尝试解密已加密且长度为 44 个字符的输入字符串 这是我到目前为止所拥有的 但当它尝试执行 TransformFinalBlock 函数时 我不断收到 坏数据 public static String Decryp
  • 如何将 getElementById 切换为 getElementsByClassName [重复]

    这个问题在这里已经有答案了 我试图将 getElementById 切换为 getElementsByClassName 对于这样的项目 http jsfiddle net 2waZ2 21 我的简单努力不起作用 http jsfiddle
  • 删除 Chrome 的“翻译”DOM 属性

    我正在处理一些遗留代码 其中原始开发人员大量使用生成具有名为的非标准属性的 HTML DOM 节点translate span My Account span 然后使用 JavaScript 代码遍历 搜索这些节点 如下所示 if tar
  • 为什么“值”之和不等于 scikit-learn RandomForestClassifier 中“样本”的数量?

    我通过 RandomForestClassifier 构建了一个随机森林并绘制了决策树 参数 值 红色箭头所指 是什么意思 为什么 中两个数字的总和不等于 样本 的数量 我看到了一些其他的例子 中的两个数字之和等于 样本 的数量 为什么我的