当前位置:   article > 正文

XGBoost结合SHAP应用:回归、二分类、多分类模型_shap 多分类

shap 多分类

引言

XGBoost用于建模,SHAP用于模型的可视化解释。
多分类实例:
https://blog.csdn.net/weixin_45520028/article/details/109003707
XGBoost原理参考推荐:
https://zhuanlan.zhihu.com/p/75217528
https://www.cnblogs.com/wj-1314/p/9402324.html
官方参数解释
XGB中文解释
SHAP参考推荐:
https://blog.csdn.net/weixin_45520028/article/details/108857908
另外,多分类模型解释参考:
https://developer.aliyun.com/article/715920

XGBoost建模

1 数据准备

XGB准备原始数据为一个dataframe,其中一列为输出的结果值,其他列为模型的特征值。

  • 输出结果值:
    二分类模型:只能为’0’或’1’
    多分类模型:从’0’开始的数字
  • 模型特征值:
    必须为数值型,如整数、小数;如果为字符,如中文描述,需要先进行转换。

字符转数值方法:
法一:直接转稀疏矩阵:

# 将col1和col2两列的内容转稀疏矩阵。一列中有n个不同的值,该列将转成n列稀疏矩阵
pd.get_dummies(data, drop_first=True, columns=['col1','col2'])
  • 1
  • 2

法二:函数转数值LabelEncoder

# data为原数据dataframe,data_deal为需要转换的dataframe
data_deal = data[['col1', 'col2',
                  'col3', ......]]
# 先转为str格式,中/英文都需要先转str便于后续函数处理
data_deal['col1'] = data_deal['col1'].astype(str)
# ......

# 字符转换为数值
# features用于记录转换完成的数值
# feature_tables用于记录完整的原字符和转换后数值
features = []
feature_tables = []

for i in range(0, data_deal.shape[1]):
    label_encoder = LabelEncoder()
    feature = label_encoder.fit_transform(data_deal.iloc[:, i])
    feature_table = label_encoder.inverse_transform(feature)
    features.append(feature)
    feature_tables.append(feature)
    feature_tables.append(feature_table)
	# 如需反转使用label_encoder.inverse_transform(feature)
data_deal2 = np.array(features)
data_deal2 = data_deal2.reshape(data_deal.shape[0], data_deal.shape[1])
data_deal3 = pd.DataFrame(data_deal2)

# data返回替换,完成数值型转换
data['col1'] = data_deal3.iloc[:, 0]
data['col2'] = data_deal3.iloc[:, 1]
data['col3'] = data_deal3.iloc[:, 2]
# ......

# 额外查看操作,不影响建模过程
# 查看字符-数字转换替换表
# 特征对应完整表
feature_tables = pd.DataFrame(np.array(feature_tables)).T
# 去重查看转换对照表
# subsidy_sensitive对应表
fea_sub_sens = feature_tables.iloc[:,:2].drop_duplicates().reset_index(drop=True).sort_values(by=1)
# order_subsidy_sensitive_level对应表
fea_ord_sub_sens = feature_tables.iloc[:,2:4].drop_duplicates().reset_index(drop=True).sort_values(by=3)
# 二second_level_stage_net对应表
fea_sec_lv_stage = feature_tables.iloc[:,4:6].drop_duplicates().reset_index(drop=True).sort_values(by=5)
# ......
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

法三:函数转数值OneHotEncoder
输出与法一类似。

原数据抽样
根据需要使用,可以选择随机抽样,抽出不同分类的数据总行数相同的分类组。

# 结果1、结果2、结果0抽取同数量组数
data_s1 = data[data['col_result'] == 1].sample(n=650000, random_state=1)
data_s2 = data[data['col_result'] == 2].sample(n=650000, random_state=1)
data_s0 = data[data['col_result'] == 0].sample(n=650000, random_state=1)

# 拼接新的数据集
data = pd.concat([data_s1, data_s2, data_s0], ignore_index=True, axis=0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2 数据处理

准备XGB的输入和输出数据,训练集和测试集。

# XGBoost建模数据准备,输入特征值和输出结果
data_result = data.iloc[:, 17]
data_input = data.iloc[:, 1:17]

# 准备xgb训练输入、测试输入、训练输出、测试输出
# 测试集选1%的原数据规模
train_x, test_x, train_y, test_y = train_test_split(data_input, data_result, test_size=0.01, random_state=0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3 XGB模型

# xgb处理训练集和测试集
dtrain = xgb.DMatrix(train_x, label=train_y)
dtest = xgb.DMatrix(test_x)

# 参数
params = {'booster': 'gbtree',
          'objective': 'multi:softprob', #多分类'multi:softmax'返回预测的类别(不是概率),'multi:softprob'返回概率
          'num_class': 3,
          'eval_metric': 'merror', #二分类用’auc‘,多分类用'mlogloss'或'merror'
          'max_depth': 7,
          'lambda': 15,
          'subsample': 0.75,
          'colsample_bytree': 0.75,
          'min_child_weight': 1,
          'eta': 0.025,
          'seed': 0,
          'nthread': 8,
          'silent': 1,
          'gamma': 0.15,
          'learning_rate': 0.01}

watchlist = [(dtrain, 'train')]

# 建模与预测:NUM_BOOST_round迭代次数和数的个数一致
model = xgb.train(params, dtrain, num_boost_round=50, evals=watchlist)
ypred = model.predict(dtest)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

4 模型评估

4 模型评估

XGBoost使用笔记

1 XGBoost模型参数解释

'objective’参数解释

“reg:linear”  # 线性回归模型
“reg:logistic”  # 逻辑回归模型
“binary:logistic”  # 二分类的逻辑回归模型,输出为概率。
“binary:logitraw”  # 二分类的逻辑回归问题,输出的结果为wTx
“count:poisson”  # 计数问题的poisson回归,输出结果为poisson分布。在poisson回归中,max_delta_step的缺省值为0.7
“multi:softmax”  # 多分类模型,同时需设置参数num_class(分类个数),输出为分类结果
“multi:softprob”  # 和softmax一样,但输出的是概率,为n * m 的向量(n行,m分类数)
“rank:pairwise”  # set XGBoost to do ranking task by minimizing the pairwise loss
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2 XGBoost通用参数解释

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/97414
推荐阅读
相关标签
  

闽ICP备14008679号