lightgbm二分类问题shap的base value的相关问题
我发现lightgbm建模二分类问题,然后用shap输出某个样本点,预测值的情况,base value并不是p = avg(y),也并不等于log(p/(1-p)),但会比较接近base value,具体的话git上有很多讨论,有时间可以再认真研究一下,另外二分类问题,也可以不输出Z,输出y的,要多加一个参数link='logit'
shap.force_plot(explainer.expected_value,shap_values[600,:],X.iloc[600,:],link='logit')
2022-03-29补充:
0.36以上的版本二分类lightgbm的shap_values是一个list包含了0和1的shap_value,expected_value同理,所以force_plot是形如:
shap.force_plot(explainer.expected_value[1],shap_values[1][i,:],X.iloc[i,:])
在二分类问题中,base_value = explainer.expected_value[1] = np.log(train_prob/(1-train_prob)).mean()
其中train_prob是一个array,含训练集每条记录的prob,所以base_value不是先p = avg(y),然后ln(p/(1-p)),而是训练得到model后,用model去预测每条记录的prob,然后做Z = lnOdds,在avg(Z)
留言
張貼留言