我对 Python 中的回归分析比较陌生。我正在使用 Statsmodels 包对数据框中的数据集运行逻辑回归。
我看过几个例子,包括下面链接的例子,其中一个常量列(例如“拦截”)被添加到数据集中并为每一行填充 1.0。然后将截距变量作为参数包含在回归分析中。
我的问题是:这样做的目的是什么,是否有必要?(我怎么知道是否有必要?)
(参考:逻辑回归:Scikit Learn vs Statsmodels)
谢谢!
我对 Python 中的回归分析比较陌生。我正在使用 Statsmodels 包对数据框中的数据集运行逻辑回归。
我看过几个例子,包括下面链接的例子,其中一个常量列(例如“拦截”)被添加到数据集中并为每一行填充 1.0。然后将截距变量作为参数包含在回归分析中。
我的问题是:这样做的目的是什么,是否有必要?(我怎么知道是否有必要?)
(参考:逻辑回归:Scikit Learn vs Statsmodels)
谢谢!
这几乎总是必要的。我说几乎总是因为它改变了其他系数的解释。当您对分类预测变量的结果进行回归时,省略 1 列可能很好,但我们通常包括连续预测变量。
当我们有一个连续的预测变量时,让我们比较有和没有截距的逻辑回归。假设数据以均值为中心。没有 1s 的列,模型看起来像
什么时候(即当协变量等于样本均值时),那么结果的对数几率为 0,对应于. 所以这说明了当是样本均值,那么成功的概率是 50%(这似乎有点限制)。
如果我们确实有截距,那么模型就是
现在,当对数赔率等于我们可以根据数据自由估计。
简而言之,除非您有充分的理由这样做,否则请包括 1 列。
看来您可能不必手动包含一个常数,以便在模型中存在截距。通过查看下面类中的默认参数,有一个布尔参数默认为 True 用于拦截。
class sklearn.linear_model.LogisticRegression(penalty='l2', *, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100, multi_class='auto', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)
对该参数给出的解释如下:
fit_interceptbool, default=True:指定是否应将常数(也称为偏差或截距)添加到决策函数中。