繁体   English   中英

sklearn:从 IterativeImputer 打印 DecisionTreeRegressor 的树

[英]sklearn: print DecisionTreeRegressor's tree from IterativeImputer

我有一个使用 DecisionTreeRegressor 作为估算器的 IterativeImputer,我想用 export_text 方法打印它的树:

import pandas as pd
from sklearn import tree
from sklearn.experimental import enable_iterative_imputer  # noqa
from sklearn.impute import IterativeImputer
from sklearn.tree import DecisionTreeRegressor

regressor = DecisionTreeRegressor(criterion="squared_error", 
                                  max_depth=None, 
                                  min_samples_split=2,
                                  min_samples_leaf=1, 
                                  random_state=0)
iterative_imputer = IterativeImputer(
    estimator=regressor,
    sample_posterior=False,
    max_iter=10,
    initial_strategy='mean',
    imputation_order='roman',
    verbose=2,
    random_state=0)
iterative_imputer.fit(df)
print(tree.export_text(iterative_imputer.estimator))

但我收到一个错误:

sklearn.exceptions.NotFittedError:此 DecisionTreeRegressor 实例尚未安装。 在使用此估算器之前,使用适当的参数调用“fit”。

我究竟做错了什么?

发生此错误是因为iterative_imputer.estimator对象在每次迭代中都适合之前被克隆。 这是所有其他估计量都来自的实例。

拟合后,估计量存储为imputation_sequence_属性下的_ImputerTriplet对象列表。 可以通过以下方式访问它们( scikit-learn==1.2.0 ):

import numpy as np
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
from sklearn.tree import DecisionTreeRegressor
from sklearn.tree import export_text

regressor = DecisionTreeRegressor(random_state=0)
iterative_imputer = IterativeImputer(
    estimator=regressor,
    max_iter=10,
    imputation_order='roman',
    random_state=0,
)

iterative_imputer.fit([[7, 2, 3], [4, np.nan, 6], [10, 5, 9]])

for _, _, estimator in iterative_imputer.imputation_sequence_:
    print(export_text(estimator))
|--- feature_1 <= 7.50
|   |--- feature_0 <= 2.75
|   |   |--- value: [7.00]
|   |--- feature_0 >  2.75
|   |   |--- value: [4.00]
|--- feature_1 >  7.50
|   |--- value: [10.00]

...

这是我会怎么做的:

从 sklearn.tree 导入 DecisionTreeRegressor 从 sklearn.impute 导入 IterativeImputer

##创建一个DecisionTreeRegressor对象estimator = DecisionTreeRegressor()

##使用 DecisionTreeRegressor 作为估计器创建一个 IterativeImputer 对象 imputer = IterativeImputer(estimator=estimator)

##Fit IterativeImputer 到你的数据 imputer.fit(X)

##打印用作 IterativeImputer print(estimator.export_text()) 估计器的 DecisionTreeRegressor 树


export_text 方法会将树输出为文本表示形式,然后您可以将其打印到控制台或保存到文件中。

请记住,IterativeImputer 使用 DecisionTreeRegressor 对象作为估计器来预测数据中的缺失值,并且由 DecisionTreeRegressor 生成的树与插补过程没有直接关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM