使用RandomForestRegressor时出现Not Fitted错误的解决方法咨询
解决RandomForestRegressor的Not Fitted错误并输出特征重要性
嘿,我来帮你搞定这个问题!出现NotFittedError的核心原因很明确:你还没让随机森林回归器完成训练(也就是没调用fit()方法),就急着去拿特征重要性了。毕竟模型得先从数据里学到东西,才能告诉你哪些特征更重要嘛~
先给你一套完整的可运行代码,涵盖从数据准备到输出排序后特征重要性的全流程,你可以参考着调整自己的代码:
import numpy as np from sklearn.ensemble import RandomForestRegressor from sklearn.datasets import make_regression from sklearn.model_selection import train_test_split # 生成符合你需求的模拟数据:4个特征变量,1个浮点型目标变量 X, y = make_regression(n_samples=1000, n_features=4, random_state=42) # 划分训练集和测试集(机器学习常规操作,避免过拟合) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 初始化随机森林回归器实例 rf_reg = RandomForestRegressor(n_estimators=100, random_state=42) # 重中之重:调用fit()方法让模型在训练数据上完成拟合! # 这一步绝对不能省略,否则模型就是个空架子,拿不到任何训练后的属性 rf_reg.fit(X_train, y_train) # 现在可以安全地获取特征重要性并排序了 feature_importances = rf_reg.feature_importances_ # 用argsort拿到按重要性升序排列的索引,再反转成降序 sorted_indices = np.argsort(feature_importances)[::-1] sorted_importances = feature_importances[sorted_indices] # 格式化输出结果 print("特征重要性(按降序排列):") for idx, importance in zip(sorted_indices, sorted_importances): print(f"特征{idx+1}: {importance:.4f}")
另外,再给你几个排查问题的小要点:
- 检查代码里有没有漏掉
fit()调用:这是最常见的原因,一定要确保在访问feature_importances_之前执行了model.fit(X_train, y_train) - 注意拼写细节:
feature_importances_是双下划线结尾,别漏写;fit()是小写开头,别写成大写的Fit() - 如果是在函数或类里实现的,要确认模型实例没有被重复初始化:比如你在调用fit()之后,又重新创建了一个新的RandomForestRegressor实例,那之前的训练结果就丢了
内容的提问来源于stack exchange,提问作者stone rock
相关产品推荐
相关产品推荐

