AttributeError: 'LGBMRegressor' object has no attribute 'feature_name_'

AttributeError: 'LGBMRegressor' object has no attribute 'feature_name_'

我试图在使用下面的代码训练模型后获取特征名称,然后我 运行 陷入这样的错误。

我查看了 lightgbm 的文档,lightgbm.LGBMRegressor 具有属性 'feature_name_',

(这是link https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.LGBMRegressor.html#lightgbm.LGBMRegressor)

我在 jupyter notebook 上 运行 这个,我的 lightGBM 版本是 2.3.1

我真的不知道,谁能给我一个线索??

from lightgbm import LGBMRegressor
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.externals import joblib

# load data
iris = load_iris()
data = iris.data
target = iris.target

# split dataset
X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2)

# training
gbm = LGBMRegressor(objective='regression', num_leaves=31, learning_rate=0.05, n_estimators=20)
gbm.fit(X_train, y_train, eval_set=[(X_test, y_test)], eval_metric='l1', early_stopping_rounds=5)

# save the model
joblib.dump(gbm, 'loan_model.pkl')


# load the model
gbm = joblib.load('loan_model.pkl')

y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration_)

print('The rmse of prediction is:', mean_squared_error(y_test, y_pred) ** 0.5)

# importances and feature_name_
print('Feature importances:', list(gbm.feature_importances_))

print('Feature names',gbm.feature_name_)# this is where went wrong

这是错误日志

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-1-d982fd40dcd0> in <module>
     32 print('Feature importances:', list(gbm.feature_importances_))
     33 
---> 34 print('Feature names',gbm.feature_name_)

AttributeError: 'LGBMRegressor' object has no attribute 'feature_name_'

非常感谢!

github 所述:

feature_name_ attribute has been merged in master recently and is not included in any official release yet. You can download nightly build or install from sources

注意,为了访问特征名称,您必须将 pandas df 传递给回归器,而不是 numpy 数组:

data = pd.DataFrame(iris.data, columns=iris.feature_names)

因此,考虑到这一点,即使没有 feature_name_ 属性,您也可以这样做:

iris.feature_names

要获取 LGBMRegressorlightgbm 的任何其他 ML 模型 class 的特征名称,您可以使用存储基础的 booster_ 属性该模型的助推器。

gbm = LGBMRegressor(objective='regression', num_leaves=31, learning_rate=0.05, n_estimators=20) 
gbm.fit(X_train, y_train, eval_set=[(X_test, y_test)], eval_metric='l1', early_stopping_rounds=5)

boost = gbm.booster_
print('Feature names',boost.feature_name())