逻辑回归和系数
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 上的交叉熵,而不是原始线性值的均方误差,因此优化器没有奖励恢复原始斜率,只是正确分类事物。
【讨论】:
以上是关于逻辑回归和系数的主要内容,如果未能解决你的问题,请参考以下文章