Python logit和sklearn管道的一个热编码

Python logit和sklearn管道的一个热编码,python,scikit-learn,pipeline,dalex,Python,Scikit Learn,Pipeline,Dalex,我试图使用Python中的Dalex包来可视化二进制logit模型的某些特征 我从示例书中复制了一段代码 (整个第五个代码单元)但现在我不太确定结果应该如何解释 在我使用statsmodels创建的基本logit模型中,我为每个类别手动选择了一个参考级别变量,以避免多重共线性(这意味着模型的所有结果都是根据参考级别进行解释的) 但是当我使用上面链接中的代码(也复制到本文下面)时,它首先在sklearn中创建一些管道对象,一个热编码分类变量,然后管道对象被拟合到数据中,并在Dalex解释程序中用作

我试图使用Python中的Dalex包来可视化二进制logit模型的某些特征

我从示例书中复制了一段代码 (整个第五个代码单元)但现在我不太确定结果应该如何解释

在我使用
statsmodels
创建的基本logit模型中,我为每个类别手动选择了一个参考级别变量,以避免多重共线性(这意味着模型的所有结果都是根据参考级别进行解释的)

但是当我使用上面链接中的代码(也复制到本文下面)时,它首先在
sklearn
中创建一些管道对象,一个热编码分类变量,然后管道对象被拟合到数据中,并在Dalex解释程序中用作要解释的模型

问题是,当我在Dalex中使用类似于
model_profile()
的函数时,它应该输出一个图表,显示变量对预测的其他同等影响,我不知道如何解释结果,因为似乎一个分类变量中的所有值都包含在图表中

例如,该模型显示了“性别”分类变量对男性和女性平均预测的影响

这也显示了一条名为“平均预测”的水平线,但什么是“平均预测”?是以男性作为参考水平,还是以女性为参考水平

我在这里真的很困惑结果意味着什么。。。有人能澄清一下吗?我尝试使用的函数
model\u profile()
也在笔记本中进行了说明。谢谢大家!

我复制的代码片段:

numerical_features=['age'、'fare'、'sibsp'、'parch']
数字变压器=管道(
台阶=[
('inputer',simplemputer(strategy='median')),
('scaler',StandardScaler())
]
)
分类特征=['性别','阶级','职业']
分类变压器=管道(
台阶=[
('inputer',simplemputer(strategy='constant',fill_value='missing'),
('onehot',onehotcoder(handle_unknown='ignore'))
]
)
预处理器=列转换器(
变形金刚=[
('num',数字变压器,数字特征),
('cat',分类变压器,分类特性)
]
)
分类器=MLP分类器(隐藏层大小=(150100,50),最大值=500,随机状态=0)
clf=管道(步骤=[(“预处理器”,预处理器),
(“分类器”,分类器)])
clf.配合(X,y)
exp=dx.Explainer(clf,X,y)
为什么会发生这种情况? 这是因为默认情况下,
sklearn
onehotcoder
对数据中的每个类别进行一次热转换。然而,对于像logit这样的线性模型,为了避免多重共线性,并使您的结果相对于参考点具有可解释性,通常倾向于省略其中一个类别。在这种情况下,您需要更改编码器的默认设置

例子 您可以通过设置
drop=“first”
来实现这一点,这将删除一个热编码过程的第一个类别。下面的示例说明了如何在一个简单的示例中使用该方法。在这里,“女性”类别从一个热编码中删除,只有“男性”类别被编码,这将返回您期望的结果。请注意,这也适用于非二进制功能

from sklearn.preprocessing import OneHotEncoder
X = pd.DataFrame({"gender":["male","female","female","male"]})
OHE = OneHotEncoder(drop="first")
OHE.fit_transform(X).toarray()
#[[1.],
# [0.],
# [0.],
# [1.]]
OHE.get_feature_names()
#['x0_male']
你需要做什么 因此,您需要在代码中更改的只是管道定义中的以下行:

'onehot', OneHotEncoder(drop='first', handle_unknown='ignore')

谢谢,但恐怕我解释得不好。现在我知道了如何从变量中省略一个类别,以便不将其包含在模型中。然而,对于Dalex,我试图理解分类变量(其所有级别)是如何影响因变量的。看看我在原始问题中发布的笔记本/链接。他们使用了性别,并计算了男性和女性对预测的影响。怎么可能呢?如果在模型中使用这两个类别进行预测,如何计算平均预测值?