机器学习xgboost模型,特性重要性输出的依据是什么?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
本文讨探xgboost
的稍稍基础一些的内容:“特征重要性”。对应到数据集里面,就是特征特性features
。对于任何一个模型的预测结果来说,它都是对这些特征进行各种分析得出的结论。这些特征都有一个重要性的说法。谁对结论的影响更大呢?是不是存在着一些影响不重要的特征?
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验文章。测试环境:python@3.12.3
,pandas@2.2.2
,numpy@1.26.4
,xlrd@2.0.1
,openpyxl@3.1.2
,scikit-learn@1.5.0
,xgboost@2.0.3
。
xgboost基模型
基础模型是基于树还是基于线性的,影响了特征重要性的输出依据。而xgboost
的booster
参数表示迭代的模型。包括:
gbtree
,基于树的模型。gblinear
,基于线性模型。
模型名 | 基于 | booster 默认 |
---|---|---|
gbtree | 树模型 | 默认值 |
gblinear | 线模型 | 非默认值 |
龙套代码
import pandas as pd
df = pd.read_csv("titanic.csv")
df = df.drop('Name', axis=1)
df = pd.get_dummies(df, columns=['Pclass', 'Sex'], drop_first=True)
target = df['Survived']
features = df.drop('Survived', axis=1)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_true = train_test_split(features, target, test_size=0.25, random_state=42)
import xgboost as xgb
model = xgb.XGBClassifier()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
重要性标准一 .feature_importances_
使用这个.feature_importances_
变量的前提是:模型的基模型是 的。
f_importance = pd.Series(model.feature_importances_, index=features.columns)
print(f_importance.sort_values(ascending=False))
重要性标准二 plot_importance()
默认
importance_type='gain'
其它
结论
使用上面的几种方法都可以得出特征重要性的排序结果。但是,可以看到,排序的结果并不一致。其中,默认的.feature_importances_
属性和plot_importance(importance_type='gain')
的结果是一致的。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。