python sklearn:从迭代输入器打印决策树回归树

lf5gs5x2  于 2022-12-21  发布在  Python
关注(0)|答案(2)|浏览(198)

我有一个使用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"。
我哪里做错了?

yuvru6vn

yuvru6vn1#

出现错误是因为iterative_imputer.estimator对象在适合每次迭代之前被克隆,它是所有其他估计量的来源示例。
拟合后,估计量作为_ImputerTriplet对象列表存储在imputation_sequence_属性下。可以使用以下命令访问(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]

...
nfzehxib

nfzehxib2#

下面是我应该如何做:
从sklearn.tree导入决策树从sklearn.impute导入迭代输入器

创建决策树回归对象估计器=决策树回归()

使用DecisionTreeRegressor作为估计量创建IterativeImputer对象,估计量= IterativeImputer(估计量=估计量)

根据您的数据调整迭代输入器imputer.fit(X)

打印用作迭代输入器打印的估计量的DecisionTreeRegressor树(estimator.export_text())

export_text方法将树输出为文本表示,然后可以将其打印到控制台或保存到文件中。
请记住,IterativeImputer使用DecisionTreeRegressor对象作为估计量来预测数据中的缺失值,并且DecisionTreeRegressor生成的树与插补过程没有直接关系。

相关问题