【问题标题】:How to reverse the OneHotEncoding to calculate the coef_ with sklearn?如何反转 OneHotEncoding 以使用 sklearn 计算 coef_?
【发布时间】:2021-11-24 05:43:21
【问题描述】:

在计算线性回归并计算我的 R2 分数后,我想计算我的特征的系数(使用 sklearn coef_ 属性)。

关键是在我的特征中,我有一些数字和一些分类数据。为了处理 LinearRegression() 我有 OneHotEncoded 我的分类值。所以这种情况下不能直接计算每个特征的coef_。

您将如何恢复流程以使每个类别特征具有一列(因为 OneHotEncoding 意味着每个类别特征的列值尽可能多)。

我看到了这篇很棒的帖子:https://katstam.com/regression-feature_importance/,它可以解决我的问题。我将此行添加到我的笔记本中(在文章的底部):

onehot_columns = list(clf.named_steps['preprocessor'].named_transformers_['cat'].named_steps['one_hot'].get_feature_names(input_features=categorical_features))

和:

numeric_features_list = list(numeric_features)
numeric_features_list.extend(onehot_columns)

但我不知道“clf”指的是什么。

在文章中,“clf”指的是这个对象:

clf = Pipeline(steps=[('preprocessor', preprocessor),
                      ('classifier', LinearRegression())])

但在我的笔记本中,我分两步处理预处理和线性回归,所以我没有这个“clf”对象的等价物。

你有什么想法或者其他方法可以使用吗?

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    你所指的帖子的作者在帖子开头有这些特征:房价、位置、年龄、利息、利率、年份 突然间他/她正在显示来自 ELI5 的重要性权重,特征是:relationship、ma​​rital_status、education_num 等。换句话说,我不认为作者展示了他/她声称使用过的数据集的权重。

    话虽如此,但你想做的事情是不可能的,而且是有原因的。如果您考虑一下,您已经为您的模型(线性回归)提供了一组特征。这些特征是数字特征,但也是 one-hot 编码特征。该模型已经学习了那些最终特征的权重,而不是初始(原始)特征!因此,即使您确实检索了所有特征的权重,您也会有一个浮点数数组(权重),它们对应于您用于训练模型的最终特征向量。

    让我给你一张照片:

    假设您将 gender 作为分类特征,并且您执行 One-Hot Encoding。最后,您将拥有 gender_malegender_femalegender_non-binary 特征,以及 位置、年龄、兴趣...... ..这是模型将要暴露的特征空间。在这个特征空间上,模型将学习它的权重。最后,您将获得分类变量 gender 的每个类别的权重。

    【讨论】:

      猜你喜欢
      • 2020-06-30
      • 2017-07-01
      • 2020-04-11
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      相关资源
      最近更新 更多