如何用Pandas数据框替代波士顿数据集feature_names设置Matplotlib Y轴刻度?
当然可以!完全不用纠结,只需要把原代码里的boston.feature_names替换成你自己DataFrame的特征列名就行,下面给你详细拆解操作步骤和示例:
核心思路
原代码里的boston.feature_names本质就是Scikit-Learn内置数据集的特征名称列表,你只需要用自己Pandas DataFrame的特征列名来替代它——不管是直接用DataFrame的.columns属性,还是你手动定义的特征名称列表,只要和排序后的特征重要性对应上就没问题。
完整适配代码示例
假设你的自定义数据已经存在Pandas DataFrame中,这里给你一套可直接复用的代码:
import pandas as pd from sklearn.ensemble import GradientBoostingRegressor import matplotlib.pyplot as plt # 1. 加载并处理你的自定义数据 my_data = pd.read_csv("your_dataset.csv") # 替换成你的数据路径/加载方式 X = my_data.drop("target_column", axis=1) # 替换成你的目标变量列名 y = my_data["target_column"] # 2. 训练梯度提升回归模型 gbr = GradientBoostingRegressor(random_state=42) gbr.fit(X, y) # 3. 绘制变量重要性图(重点修改部分) importances = gbr.feature_importances_ sorted_idx = importances.argsort() # 按特征重要性排序的索引 pos = range(len(sorted_idx)) plt.barh(pos, importances[sorted_idx], align="center") # 关键修改:用自己DataFrame的特征列名替换原数据集的feature_names plt.yticks(pos, X.columns[sorted_idx]) plt.xlabel("Feature Importance") plt.title("Variable Importance") plt.tight_layout() plt.show() # 4. 绘制偏差(Deviance)图(这部分不需要改特征名,直接复用逻辑即可) test_score = [] for i, y_pred in enumerate(gbr.staged_predict(X)): test_score.append(gbr.loss_(y, y_pred)) plt.figure() plt.plot(range(1, gbr.n_estimators_ + 1), gbr.train_score_, label="Training Deviance") plt.plot(range(1, gbr.n_estimators_ + 1), test_score, label="Test Deviance") plt.legend(loc="upper right") plt.xlabel("Boosting Iterations") plt.ylabel("Deviance") plt.title("Gradient Boosting Deviance") plt.show()
额外说明
如果你的特征名称是手动定义的列表(比如custom_feature_names = ['area', 'room_num', ...]),直接把代码里的X.columns换成这个列表就行,核心是保证传入plt.yticks的名称顺序和sorted_idx排序后的特征重要性一一对应。
内容的提问来源于stack exchange,提问作者bbartling
相关产品推荐
相关产品推荐

