决策树回归特征重要性输出报错及DataFrame保存问题求助
问题分析与解决方案
核心错误原因
你使用的是回归树模型(DecisionTreeRegressor),但交叉验证时指定了分类任务专属的评估指标scoring='accuracy'。accuracy仅适用于目标变量为离散类别的分类场景,而你的y_airbnb是连续值(回归任务),因此触发ValueError: continuous is not supported。
特征重要性的DataFrame生成逻辑本身没问题,报错是因为交叉验证的评估环节失败,导致后续循环输出伴随错误信息。
修正后的代码
步骤1:替换回归任务的评估指标
回归任务常用评估指标包括'r2'、'neg_mean_squared_error'、'neg_mean_absolute_error'等,以下以'r2'为例:
from sklearn.tree import DecisionTreeRegressor from sklearn.model_selection import cross_validate import pandas as pd dtr = DecisionTreeRegressor(random_state=42) # 训练基准模型 model = dtr.fit(X_airbnb, y_airbnb) # 生成单模型特征重要性并保存 feat_importances = pd.DataFrame(model.feature_importances_, index=X_airbnb.columns, columns=["Importance"]) feat_importances.sort_values(by='Importance', ascending=False, inplace=True) feat_importances.to_csv('single_model_feature_importances.csv') # 保存到本地文件 # 修正交叉验证的评估指标 output = cross_validate(dtr, X_airbnb, y_airbnb, cv=2, scoring='r2', return_estimator=True) # 遍历交叉验证模型,生成并保存每个模型的特征重要性 for idx, estimator in enumerate(output['estimator']): print(f"Features sorted by their score for estimator {idx}:") feature_importances = pd.DataFrame(estimator.feature_importances_, index=X_airbnb.columns, columns=['importance']).sort_values('importance', ascending=False) print(feature_importances) # 保存每个交叉验证模型的特征重要性 feature_importances.to_csv(f'cv_estimator_{idx}_feature_importances.csv')
关键说明
- 任务匹配指标:严格区分分类/回归任务的评估指标,避免跨场景误用。
- 特征重要性保存:通过
to_csv()或to_excel()可直接将DataFrame导出为本地文件,解决无法保存的问题。 - 交叉验证结果:修正评估指标后,
output['test_score']会返回各折的有效评分,不再出现nan。
内容的提问来源于stack exchange,提问作者nic.o
相关产品推荐
相关产品推荐

