python - 逻辑回归和系数
问题描述
我正在尝试确定从逻辑回归(来自 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。
谁能向我解释发生了什么事?或如何估计接近我创建的测试版?
解决方案
逻辑回归是分类器,而不是回归器。当您使用逻辑函数将实际值折叠为 0 和 1 时,您会删除有关正例和负例之间实际分界线斜率的信息。
beta 的值决定了分隔 0 和 1 的线的陡度。要获得更高的 beta 值,您需要相邻的 0 和 1 值之间的间隙更小。例如,如果您替换a = np.random.random_sample(100) * 12 - 6
为a = np.linspace(-6, 6, 99)
您将获得大约2.4
. 如果您使用a = np.linspace(-6, 6, 999)
beta 将在5.2
. 但是你不应该期望恢复原始值,因为损失函数是 0s 和 1s 上的交叉熵,而不是原始线性值的均方误差,因此优化器没有奖励恢复原始斜率,只是正确分类事物。
推荐阅读
- url - golang 中的 http.NewRequest 将一些租船人转换为 % 值
- java - 理解 Java 的 Completable Future 的行为
- python - 从 C Visual Studio 调用 open cv python 代码进行图像显示
- python - 全连接层输出ValueError
- sql - 如何从sqlplus中的数字列中删除小数点后的尾随零?
- php - 在 php 上格式化和拆分 csv/json
- android - 使用属性 androidTextapperance 与属性样式时的继承问题
- php - WhereHas Clause 不起作用..它得到所有计划,我与计划和目标的关系是......计划有很多目标
- r - 在 data.table 中查找组中的前几行
- docker - 从 docker 容器发送 udp 广播