决策树中特定类的 Sklearn 决策规则

2024-02-04

我正在创建决策树。我的数据属于以下类型

X1 |X2 |X3|.....X50|Y
_____________________________________
1  |5  |7 |.....0  |1
1.5|34 |81|.....0  |1
4  |21 |21|.... 1  |0
65 |34 |23|.....1  |1

我正在尝试执行以下代码:

X_train = data.iloc[:,0:51]
Y_train = data.iloc[:,51]
clf = DecisionTreeClassifier(criterion = "entropy", random_state = 100,
                           max_depth=8, min_samples_leaf=15)
clf.fit(X_train, y_train)

我想要的是预测特定类别的决策规则(在本例中为“0”)。例如,

when X1 > 4 && X5> 78 && X50 =100 Then Y = 0 ( Probability =84%)
When X4 = 56 && X39 < 100 Then Y = 0 ( Probability = 93%)
...

所以基本上我想要所有的叶节点,附加到它们的决策规则以及 Y=0 到来的概率,那些预测类 Y =“0”。我还想以上面指定的格式打印这些决策规则。

我对预测 (Y=1) 的决策规则不感兴趣

谢谢,任何帮助将不胜感激


基于http://scikit-learn.org/stable/auto_examples/tree/plot_unveil_tree_struct.html http://scikit-learn.org/stable/auto_examples/tree/plot_unveil_tree_structure.html

假设概率等于每个节点中类的比例,例如 如果叶子包含 68 个类 0 的实例和 15 个类 1 的实例(即value in tree_是 [68,15]) 概率是[0.81927711, 0.18072289].

生成一个简单的树,4个特征,2个类:

import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification
from sklearn.cross_validation import train_test_split
from sklearn.tree import _tree

X, y = make_classification(n_informative=3, n_features=4, n_samples=200, n_redundant=1, random_state=42, n_classes=2)
feature_names = ['X0','X1','X2','X3']
Xtrain, Xtest, ytrain, ytest = train_test_split(X,y, random_state=42)
clf = DecisionTreeClassifier(max_depth=2)
clf.fit(Xtrain, ytrain)

可视化它:

from sklearn.externals.six import StringIO  
from sklearn import tree
import pydot 
dot_data = StringIO() 
tree.export_graphviz(clf, out_file=dot_data) 
graph = pydot.graph_from_dot_data(dot_data.getvalue()) [0]
graph.write_jpeg('1.jpeg')

创建一个函数来打印一个实例的条件:

node_indicator = clf.decision_path(Xtrain)
n_nodes = clf.tree_.node_count
feature = clf.tree_.feature
threshold = clf.tree_.threshold
leave_id = clf.apply(Xtrain)


def value2prob(value):
    return value / value.sum(axis=1).reshape(-1, 1)


def print_condition(sample_id):
    print("WHEN", end=' ')
    node_index = node_indicator.indices[node_indicator.indptr[sample_id]:
                                        node_indicator.indptr[sample_id + 1]]
    for n, node_id in enumerate(node_index):
        if leave_id[sample_id] == node_id:
            values = clf.tree_.value[node_id]
            probs = value2prob(values)
            print('THEN Y={} (probability={}) (values={})'.format(
                probs.argmax(), probs.max(), values))
            continue
        if n > 0:
            print('&& ', end='')
        if (Xtrain[sample_id, feature[node_id]] <= threshold[node_id]):
            threshold_sign = "<="
        else:
            threshold_sign = ">"
        if feature[node_id] != _tree.TREE_UNDEFINED:
            print(
                "%s %s %s" % (
                    feature_names[feature[node_id]],
                    #Xtrain[sample_id,feature[node_id]] # actual value
                    threshold_sign,
                    threshold[node_id]),
                end=' ')

在第一行调用它:

>>> print_condition(0)
WHEN X1 > -0.2662498950958252 && X0 > -1.1966443061828613 THEN Y=1 (probability=0.9672131147540983) (values=[[ 2. 59.]])

在预测值为零的所有行上调用它:

[print_condition(i) for i in (clf.predict(Xtrain) == 0).nonzero()[0]]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

决策树中特定类的 Sklearn 决策规则 的相关文章

  • DataFrame 中的字符串,但 dtype 是对象

    为什么 Pandas 告诉我我有对象 尽管所选列中的每个项目都是一个字符串 即使在显式转换之后也是如此 这是我的数据框
  • Pytest:如何使用从夹具返回的列表来参数化测试?

    我想使用由固定装置动态创建的列表来参数化测试 如下所示 pytest fixture def my list returning fixture depends on other fixtures return a dynamically
  • 如何用xlrd读取公式

    我正在尝试做一个解析器 它读取几个 Excel 文件 我通常需要位于行底部的值 您可以在其中找到所有上部元素的总和 因此 单元格值实际上是 sum 或 A5 0 5 可以说 对于使用 Excel 打开此文件的用户来说 它看起来像一个数字 这
  • 如何在 openpyxl 中设置或更改表格的默认高度

    我想通过openpyxl更改表格高度 并且我希望首先默认一个更大的高度值 然后我可以设置自动换行以使我的表格更漂亮 但我不知道如何更改默认高度 唯一的到目前为止 我知道更改表格高度的方法是设置 row dimension idx heigh
  • 一起使用 Argparse 和 Json

    我是 Python 初学者 我想知道 Argparse 和 JSON 是否可以一起使用 说 我有变量p q r 我可以将它们添加到 argparse 中 parser add argument p param1 help x variabl
  • 使用 Python 解析 XML,解析外部 ENTITY 引用

    在我的 S1000D xml 中 它指定了一个带有对公共 URL 的引用的 DOCTYPE 该 URL 包含对包含所有有效字符实体的许多其他文件的引用 我使用 xml etree ElementTree 和 lxml 尝试解析它并得到解析错
  • 以编程方式将列名称添加到 numpy ndarray

    我正在尝试将列名称添加到 numpy ndarray 然后按名称选择列 但这不起作用 我无法判断问题是在添加名称时出现 还是在稍后尝试调用它们时出现 这是我的代码 data np genfromtxt csv file delimiter
  • 将具有不同大小的行的数据加载到 Numpy 数组中

    假设我有一个包含如下数据的文本文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 如何将它加载到 numpy 数组中 使其看起来像这样 1 2 3 4 5 0 6 7 8 0 0 0 9 1
  • Docker 日志中的 Python 异常标记为流:stdout

    我想解析和处理来自 docker 容器的所有错误 但当我期望 stderr 时 Python 异常标记为 stdout 举个简单的例子app py raise Exception 然后我在 docker 容器中运行这个文件 但在 var l
  • 从 Apache 运行 python 脚本的最简单方法

    我花了很长时间试图弄清楚这一点 我基本上正在尝试开发一个网站 当用户单击特定按钮时 我必须在其中执行 python 脚本 在研究了 Stack Overflow 和 Google 之后 我需要配置 Apache 以便能够运行 CGI 脚本
  • Keras 中的损失函数和度量有什么区别? [复制]

    这个问题在这里已经有答案了 我不清楚 Keras 中损失函数和指标之间的区别 该文档对我没有帮助 损失函数用于优化您的模型 这是优化器将最小化的函数 指标用于判断模型的性能 这仅供您查看 与优化过程无关
  • python 中的基本矩阵转置

    我尝试了 python 中矩阵转置的最基本方法 但是 我没有得到所需的结果 接下来是代码 A 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 print A def TS A B A for i in range len A
  • Scikit Learn - K-Means - 肘部 - 标准

    今天我想学习一些关于 K means 的知识 我已经了解该算法并且知道它是如何工作的 现在我正在寻找正确的 k 我发现肘部准则作为检测正确的 k 的方法 但我不明白如何将它与 scikit learn 一起使用 在 scikit learn
  • 如何表示类的实例与将其作为输入的类之间的关系?

    我有一堂课叫House 这个类的实例是house class House def init self height length self height height self length length def housePlan hou
  • Windows 与 Linux 文本文件读取

    问题是 我最近从 Windows 切换到 Ubuntu 我的一些用于分析数据文件的 python 脚本给了我错误 我不确定如何正确解决 我当前仪器的数据文件输出如下 Header 有关仪器等的各种信息 Data 状态 代码 温度 字段等 0
  • 在 python 查询参数中使用 %20 而不是 + 作为空格

    我使用 python requests 编写了以下 python 脚本 http requests readthedocs org en latest http requests readthedocs org en latest impo
  • Python“self”关键字[重复]

    这个问题在这里已经有答案了 我是 Python 新手 通常使用 C 最近几天开始使用它 在类中 是否需要在对该类的数据成员和方法的任何调用前添加前缀 因此 如果我在该类中调用方法或从该类获取值 我需要使用self method or sel
  • 字母尺度和随机文本上的马尔可夫链

    我想使用 txt 文件中的一本书中的字母频率生成随机文本 以便每个新字符 string lowercase 取决于前一个 如何使用马尔可夫链来做到这一点 或者使用每个字母都有条件频率的 27 个数组更简单 我想使用来自的字母频率生成随机文本
  • Python - 打印漂亮的 XML 为空标签文本创建开始和结束标签

    我正在编写一个 python 应用程序 它创建一个 ElementTree XML 然后使用 minidom 的 toprettyxml 将其写入文件 final tree minidom parseString ET tostring r
  • 从 Flask 中的 S3 返回 PDF

    我正在尝试在 Flask 应用程序的浏览器中返回 PDF 我使用 AWS S3 来存储文件 并使用 boto3 作为与 S3 交互的 SDK 到目前为止我的代码是 s3 boto3 resource s3 aws access key id

随机推荐

  • VSCode jsconfig.json 给出 ts 错误指定用于编译的根文件

    我已经在 stackoverflow 上寻找答案了jsconfig json 给出 ts 错误 https stackoverflow com questions 66868663 jsconfig json gives ts errors
  • 使用“expo build:android”构建 Android 应用程序后出现“应用程序未安装”错误

    我跑后expo build android我成功构建了 apk 文件 但是当我尝试在许多设备上安装它时 它没有被安装 并且显示 应用程序未安装 错误 image https res cloudinary com dqueufbs7 imag
  • 覆盖android中的文件删除

    是否可以重写 File delete 函数 每当我从其他应用程序 不由我的应用程序使用 删除 SD 卡中的任何文件时 我需要一个通知 例如该文件将被删除 我尝试过的示例代码片段是 public class ExtendFile extend
  • 主线程和UI线程一样吗?

    Android 文档说 与活动和其他组件一样 服务在应用程序进程的主线程中运行 这里的主线程和UI线程是同一个东西吗 看起来是这样 引自http android developers blogspot com 2009 05 painles
  • 在列中显示 php-cli 输出

    我想在 php cli 脚本的列中输出可变长度的数据 Example pepole Array Mirco Dellarovere gt Artista Nino Pepe gt Attore Zoe Yan gt Futurista Mi
  • 我在 GitHub 上的目录发生了什么?

    我在 git 存储库中添加了一个新的子目录 git add feeds 然后提交了这个并将其推送到 GitHub 但似乎我提交了一个符号链接 快捷方式 但没有提交其中的实际目录和文件 看这里 http github com G4EGK RS
  • 在 Core Data 中按属性获取对象

    在我的 iPhone 项目中 我想编写一个函数来检查我的 Core Data ManagedObjectContext 中是否存在具有特定属性给定值的对象 例如some property 如果已经有一个对象some property 12
  • 使用 pci_enable_msi_block

    我正在尝试在内核模块中启用多个 MSI irq 线 我正在 RC 模式下操作 问题是当我打电话时pci enable msi block 它不会分配超过 1 个 MSI 如果我打电话pci enable msi block dev 32 它
  • 为什么绑定不能与转换一起使用

    我有一个Circle和它的centerX财产绑定到text标签的属性 这是为了查看屏幕上对象的位置 每当我在圆圈上应用过渡时 绑定似乎就会停止工作 这是代码片段 ERRONEOUS PART OF CODE Circle circle ne
  • “系列对象是可变的,无法进行散列”错误

    我正在尝试让以下脚本正常工作 输入文件由 3 列组成 基因关联类型 基因名称和疾病名称 cols Gene type Gene name Disorder name no headers pd read csv orphanet infon
  • Rspec - 将输出格式化为进度/文档/HTML

    使用 Rspec 我希望能够看到标准进度条 and输出到包含生成的文档格式规格表的文件 and还生成了一个 html 文件 无需多次运行测试 如何分配多种格式以及这些格式的文件目标 我想出了如何做到这一点 您可以将以下内容添加到您的 rsp
  • Crosswalk WebView 中启用了 Chrome 的流量节省功能吗?

    在 Chrome 版本 45 0 2454 85 中 开发人员工具在窗口顶部显示黄色警告 并显示文本 考虑禁用Chrome 数据保护程序 https support google com chrome answer 2392284 hl e
  • 在 OSX 上安装了 GNU grep,但无法使用

    我尝试在 OSX 上安装 GNU grep 它似乎已安装 但我无法使用它 我已经使用自制程序完成了此操作 Macports 目前遇到了一些问题 所以我无法使用它 安装 brew tap homebrew dupes brew install
  • tomcat-dbcp 与 commons-dbcp

    这两个连接池库之间似乎存在很多混淆 我想知道哪一个更好 如果有的话 以下是我想提出的一些要点 有人可以验证吗 Tomcat DBCP 使用默认的 tomcat dbcp jar 该jar 将出现在 tomcat lib 目录中 你do no
  • 如何重新启动我自己的qt应用程序?

    我只是问自己如何重新启动我自己的qt应用程序 有人可以给我举个例子吗 要重新启动应用程序 请尝试 include
  • Matplotlib Savefig 不会覆盖旧文件

    这看起来一定是我的机器上的权限问题 在 Windows 10 上进行系统更新后 当我运行 import matplotlib pyplot as plt make figure plt plot 1 2 3 4 plt ylabel som
  • python 处理无尽的 XML

    我正在开发一个应用程序 我的工作只是为该应用程序开发一个示例 Python 接口 应用程序可以提供基于XML的文档 我可以通过HTTP Get方法获取文档 但问题是基于XML的文档是无限的 这意味着不会有结束元素 我知道文件应该由SAX来处
  • 在 JSX 中拥有变量属性的最佳方式是什么?

    希望我的问题很清楚 我主要是在寻找一种将属性动态附加到 JSX 输入的方法
  • Python 人们使用哪个路径模块或类来代替 os.path?

    只是想知道有多少人在 Python 中使用路径模块 例如 Jason Orendorff 的路径模块 而不是使用os path用于连接和分割路径 您是否使用过 Jason 的路径模块 http wiki python org moin Pa
  • 决策树中特定类的 Sklearn 决策规则

    我正在创建决策树 我的数据属于以下类型 X1 X2 X3 X50 Y 1 5 7 0 1 1 5 34 81 0 1 4 21 21 1 0 65 34 23 1 1 我正在尝试执行以下代码 X train data iloc 0 51 Y