【问题标题】:Logistic Regression using Python statsmodel使用 Python statsmodel 进行逻辑回归
【发布时间】:2020-09-27 17:14:43
【问题描述】:

我是分析领域的新手,我几乎没有任何疑问。 我希望我能在这里得到我的答案。

我正在使用 python 实现逻辑回归。 如果我们需要对分类变量应用逻辑,我已经为此实现了 get_dummies。假设列名是房屋类型(Beach、Mountain 和 Plain)。 我们在这里所做的是在这种情况下创建三个虚拟变量并删除其中一个,因为我们可以使用其他 2 个虚拟变量来推断平原。

但是当我对数据实施 RFE 时。我需要包括所有 3 个变量吗? (我在一些博客中看到了这个,其中 dummy 没有被丢弃并感到困惑)

另外,我还需要添加一个拦截列,因为我使用的是 statsmodel(它自己不添加拦截)。那么,在这种情况下,如果有多个分类变量(并且我们为每个分类变量删除了一个虚拟变量)就不会有任何问题吗?

【问题讨论】:

    标签: python logistic-regression data-analysis statsmodels dummy-variable


    【解决方案1】:

    您最终应该会看到多重共线性,因为第三个虚拟列始终与前两个的总和相反(如果总和为 0,则为 1,如果总和为 1,则为 0)。

    这应该在特征选择之前移除,例如 RFE。

    如果您不这样做,statsmodel 将在摘要中发出警告,如果您在拟合后检查特征的 VIF,您将看到不可接受的分数,表明共线特征。

    在任何情况下,一旦完成此操作,您的一个虚拟列实际上可能是一个常数,例如,如果您的数据集中没有海滨别墅。当存在常量时,statsmodel 的默认行为会忽略 add_constant 语句。为了解决这个问题,您可以考虑使用 has_constant 参数,传递 'add' 以表明您想要截取,即使已经有一个常量列。

    X = sm.add_constant(X, has_constant='add')

    【讨论】:

    • 对不起,我没有得到你的部分(添加常量)。另外,您能帮我理解为什么我们要添加拦截吗?
    • 不要太担心代码,如果你想要截取,只要确保在拟合之前添加一个常量到你的数据中。如果您的列之一已经是常量(具有所有相同的值),则 has_constant 通过添加截距来提供帮助。您可以将截距视为房屋仅存在的价值,而无需考虑任何其他变量。其他特征,例如在海滩上、有车库等,将从该值中增加或减少,从而为您提供估计值,然后可用于在您的后勤登记中对房屋进行分类。
    • 非常感谢。还有一个小疑问,如果我们将 2-3 个分类变量转换为虚拟变量,我们会为每一列删除一个?对于所有的列,只有一个常数,对吧?另外,get_dummies 和 label 编码一样吗?
    • 我建议您在继续之前查找相关矩阵,以更好地了解为什么或何时删除特征。这应该可以解决您的大部分问题。
    • 如果它解决了原来的问题,也许可以接受这个答案,然后提出一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 2020-05-29
    • 2015-12-19
    • 2015-02-21
    • 2018-08-11
    • 2018-01-14
    • 1970-01-01
    相关资源
    最近更新 更多