为何调用IterativeImputer的estimator打印决策树会报未拟合错误?
问题原因
你调用的iterative_imputer.estimator是初始定义的未拟合DecisionTreeRegressor实例。IterativeImputer在fit时,会为每个待填补的特征单独训练一个估算器,这些训练好的模型并不保存在传入的原始estimator中,而是存储在iterative_imputer.estimators_(复数形式,末尾带下划线)属性里。
解决方法
使用estimators_属性获取所有训练完成的决策树模型,再逐个导出结构。示例代码如下:
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 # 构造带缺失值的示例数据(替换为你的真实数据df) df = pd.DataFrame({ 'a': [1, 2, None, 4, 5], 'b': [None, 2, 3, None, 5], 'c': [1, 2, 3, 4, 5] }) 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) # 遍历每个训练好的决策树并打印结构 for idx, est in enumerate(iterative_imputer.estimators_): print(f"===== 第{idx+1}个特征对应的决策树 =====") print(tree.export_text(est, feature_names=df.columns.tolist()))
补充说明
estimators_是一个列表,长度等于数据集的特征数量,每个元素对应一个特征的拟合好的DecisionTreeRegressor模型- 如果只需要查看特定特征的树,可以通过索引直接获取,比如
iterative_imputer.estimators_[0]对应第一个特征的模型
内容的提问来源于stack exchange,提问作者Daemon2017
相关产品推荐
相关产品推荐

