You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用XGBRegressor遇AttributeError:无feature_names_in_属性求助

解决XGBRegressor无feature_names_in_属性的问题

出现AttributeError: 'XGBRegressor' object has no attribute 'feature_names_in_'的核心原因是模型实例未保存特征名称信息,常见场景及解决方法如下:

常见原因与对应方案

  • X_train是numpy数组而非带列名的DataFrame
    numpy数组本身不包含列名元数据,即使你知道特征名是字符串,模型也无法自动获取并存储为feature_names_in_。此时直接使用你已知的特征名列表或原始数据集的列名即可:

    # 假设你有特征名列表feature_names,或者从原始DataFrame获取(如df_train.columns)
    feature_names = ['特征1', '特征2', ...]  # 替换为你的实际特征名
    fi = pd.DataFrame(data=reg.feature_importances_, index=feature_names, columns=['importance'])
    fi.sort_values('importance').plot(kind='barh', title='Feature Importance')
    plt.show()
    
  • XGBoost版本过低不支持feature_names_in_属性
    feature_names_in_是XGBoost与scikit-learn兼容的属性,需要XGBoost版本≥1.3.0才支持。先检查当前版本:

    import xgboost as xgb
    print(xgb.__version__)
    

    如果版本低于1.3.0,执行升级命令:

    pip install --upgrade xgboost
    
  • X_train是DataFrame但仍无法获取属性
    直接绕过模型的feature_names_in_,从X_train本身提取列名更可靠:

    fi = pd.DataFrame(data=reg.feature_importances_, index=X_train.columns, columns=['importance'])
    fi.sort_values('importance').plot(kind='barh', title='Feature Importance')
    plt.show()
    

内容的提问来源于stack exchange,提问作者Osca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:07:06