逻辑回归和系数

Posted

技术标签:

【中文标题】逻辑回归和系数【英文标题】:logistic regression and coefficient 【发布时间】:2018-12-09 17:06:49 【问题描述】:

我正在尝试确定从逻辑回归(来自 sklearn 库)估计的 beta 是否与我使用逻辑函数 (1/(1 + exp(- (b*x))). 这是我使用的代码

import numpy as np
from sklearn.linear_model import LogisticRegression

a = np.random.random_sample(100) * 12 - 6
a = np.sort(a)
t = 1/(1 + np.exp(-1 * (6 * (a)))) # I create a beta of 6
for i in range(len(t)):
    if t[i] >= 0.5:
        t[i] = 1
    else:
        t[i] = 0
a = np.array([a]).T
ones = np.array([[1]*len(a)]).T
a = np.concatenate((ones, a), axis=1)
lg = LogisticRegression()
lg.fit(a, t)
print(lg.coef_) # the estimated beta from the logistic regression model is [[ 0.24941991  2.41880381]]

我预设的 beta 是 6,但是逻辑回归的 beta 是 2.39662781。尽管我做了一个只得到 1 和 0 的近似值,但这两个 beta 仍然相差太大。此外,当我增加我预设的 beta 时,模型估计的 beta 有时会增加但有时会降低,例如,如果我将 beta 预设为 7,则模型估计的 beta 为 2.15344631。

谁能向我解释发生了什么事?或如何估计接近我创建的测试版?

【问题讨论】:

【参考方案1】:

逻辑回归是分类器,而不是回归器。当您使用逻辑函数将实际值折叠为 0 和 1 时,您会删除有关正例和负例之间实际分界线斜率的信息。

beta 的值决定了分隔 0 和 1 的直线的陡度。要获得更高的 beta 值,您需要相邻的 0 和 1 值之间的间隙更小。例如,如果您将a = np.random.random_sample(100) * 12 - 6 替换为a = np.linspace(-6, 6, 99),您将获得大约2.4 的beta。如果您使用a = np.linspace(-6, 6, 999),beta 将在5.2 附近。但是你不应该期望恢复原始值,因为损失函数是 0s 和 1s 上的交叉熵,而不是原始线性值的均方误差,因此优化器没有奖励恢复原始斜率,只是正确分类事物。

【讨论】:

以上是关于逻辑回归和系数的主要内容,如果未能解决你的问题,请参考以下文章

逻辑回归模型系数

在python中查找逻辑回归的系数

如何解释逻辑回归的系数和截距

从逻辑回归系数在python中编写函数

从逻辑回归系数中推导出新的连续变量

使用插入符号的岭逻辑回归系数的标准误差