python画一片树叶_有没有办法在决策树的每一片叶子下获取样本?

如果你只想要每个样本的叶子,你可以使用clf.apply(iris.data)array([ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

1,

1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,

5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,

5, 5, 14, 5, 5, 5, 5, 5, 5, 10, 5, 5, 5, 5, 5, 10, 5,

5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 16, 16,

16, 16, 16, 16, 6, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,

8, 16, 16, 16, 16, 16, 16, 15, 16, 16, 11, 16, 16, 16, 8, 8, 16,

16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16])

如果要获取每个节点的所有样本,可以使用

^{2}$

然后在决策路径上循环,用toarray()将它们转换为数组,并检查它们是否属于某个节点。所有内容都存储在defaultdict中,其中键是节点号,值是样本号。在for d, dec in enumerate(dec_paths):

for i in range(clf.tree_.node_count):

if dec.toarray()[0][i] == 1:

samples[i].append(d)

完整代码import sklearn.datasets

import sklearn.tree

import collections

clf = sklearn.tree.DecisionTreeClassifier(random_state=42)

iris = sklearn.datasets.load_iris()

clf = clf.fit(iris.data, iris.target)

samples = collections.defaultdict(list)

dec_paths = clf.decision_path(iris.data)

for d, dec in enumerate(dec_paths):

for i in range(clf.tree_.node_count):

if dec.toarray()[0][i] == 1:

samples[i].append(d)

输出print(samples[13])[70, 126, 138]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值