首页 > 解决方案 > 逻辑回归和系数

问题描述

我正在尝试确定从逻辑回归(来自 sklearn 库)估计的 beta 是否与我使用逻辑函数创建结果的 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。

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

标签: pythonnumpyscikit-learnlogistic-regression

解决方案


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

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


推荐阅读