2 回答

TA贡献1779条经验 获得超6个赞
根据我们是训练modelusingscikit-learn还是lightgbm方法,为了获得重要性,我们应该分别选择feature_importances_属性或feature_importance()函数,就像在这个例子中一样(其中model是lgbm.fit() / lgbm.train(), 和的结果train_columns = x_train_df.columns):
import pandas as pd
def get_lgbm_varimp(model, train_columns, max_vars=50):
if "basic.Booster" in str(model.__class__):
# lightgbm.basic.Booster was trained directly, so using feature_importance() function
cv_varimp_df = pd.DataFrame([train_columns, model.feature_importance()]).T
else:
# Scikit-learn API LGBMClassifier or LGBMRegressor was fitted,
# so using feature_importances_ property
cv_varimp_df = pd.DataFrame([train_columns, model.feature_importances_]).T
cv_varimp_df.columns = ['feature_name', 'varimp']
cv_varimp_df.sort_values(by='varimp', ascending=False, inplace=True)
cv_varimp_df = cv_varimp_df.iloc[0:max_vars]
return cv_varimp_df
请注意,我们依赖于这样一个假设,即特征重要性值的排序就像训练期间模型矩阵列的排序(包括 one-hot dummy cols),请参阅LightGBM #209。
添加回答
举报