【问题标题】:using decision_path in Decision Tree in Python在 Python 的决策树中使用 decision_path
【发布时间】:2018-06-26 14:23:44
【问题描述】:

我想检索每个实例在决策树或 RandomForest 中的路径。 例如,我需要这样的输出:

# 1  1 3 4 8 NA NA
# 2  1 2 5 7 11 NA
# 3  1 3 4 9 10 13
# 4  1 3 4 8 NA NA
# etc

这意味着实例#1从节点1、3、4经过路径并在终端节点8结束,依此类推。很明显,某些实例的路径长度比其他实例短。

我使用了decision_path,但它给出了一个我无法理解的稀疏矩阵并找到了这样的路径。即使我无法读取输出。这是Iris数据库的示例代码:

from sklearn.datasets import load_iris
iris = load_iris()
import numpy as np
ytrain = iris.target
xtrain = iris.data
from sklearn.tree import DecisionTreeClassifier
dtree = DecisionTreeClassifier()
fitted_tree = dtree.fit(X=xtrain,y=ytrain)
predictiontree = dtree.predict(xtrain)
fitted_tree.decision_path(xtrain)

输出是这样的:

<150x17 sparse matrix of type '<class 'numpy.int64'>'
with 560 stored elements in Compressed Sparse Row format>

请帮助我制作我在顶部提到的矩阵。我不知道如何处理稀疏矩阵。

【问题讨论】:

  • @PatrickArtner 你能解释一下.todense 的输出吗?对于一个实例,它就像 [1 0 1 0 1 0 1 0 0 0 0 0 0 0 ]。你知道这是什么意思吗?
  • 它表示此 DecisionTreeClassifier 对您的数据所做的任何事情 - 您是否有一个经过 1,3,5,71,2,3,4,5,6,7,8,9,10,11,12,13,14 路径 - 如果您有更多“空”或“默认值”作为真实数据,因此仅存储数据点/at/索引然后存储整行“更便宜”。就像你有一个 1000x1000 数组,里面有 100 个整数,其余的 0 - 所以你存储 100 个 (x,y,value) 元组而不是 1.000.000 个值,其中大多数是 0
  • @PatrickArtner 非常感谢。您将问题标记为重复。不知何故,它被重复了,但它可能会发生在谁将在决策树中找到路径。我希望您让问题保持开放,并添加此评论作为答案。这对我真的很有帮助。我需要使其密集的原因是它应该是另一种不接受密集矩阵的方法的输入。

标签: python classification decision-tree


【解决方案1】:

感谢@Patrick Artner的评论,这就是答案:

dense_matrix = fitted_tree.decision_path(xtrain).todense()

它会给出类似的输出

#matrix([[1, 1, 0, ..., 0, 0, 0],
#        [1, 1, 0, ..., 0, 0, 0],
#        [1, 1, 0, ..., 0, 0, 0],
#        ..., 
#        [1, 0, 1, ..., 0, 0, 1],
#        [1, 0, 1, ..., 0, 0, 1],
#        [1, 0, 1, ..., 0, 0, 1]], dtype=int64)

第一行是第一个实例,依此类推。例如,这是第一行[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],这意味着第一个实例通过节点号 1 和 2,并且从不通过其他节点。

【讨论】:

    【解决方案2】:

    如果您需要对每个样本的决策路径进行更多控制,您也可以执行以下操作:

    decision_paths = fitted_tree.decision_path(xtrain)
    decision_path_list = list(decision_paths.toarray())
    for path in decision_path_list:
        *#Analyse different paths here*
    

    【讨论】:

      猜你喜欢
      • 2018-09-06
      • 2021-08-23
      • 1970-01-01
      • 2018-02-09
      • 2021-04-30
      • 2018-09-05
      • 2020-02-26
      • 2016-03-12
      • 2021-08-19
      相关资源
      最近更新 更多