我正在尝试确定从logistic回归估计的beta(来自sklearn库)是否与我使用logistic函数创建结果的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。
有人可以向我解释发生了什么吗?或估算的beta如何接近我创建的beta?
答案 0 :(得分:0)
逻辑回归是分类器,而不是回归器。使用logistic函数将实数值折叠为0和1时,将删除有关正例和负例之间实际分界线的斜率的信息。
β值确定将0s与1s分开的线的陡度。要获得更高的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
。但是您不应该期望恢复原始值,因为损失函数在0和1上具有交叉熵,而不是原始线性值的均方误差,因此,优化器没有任何回报来恢复原始斜率,仅是为了正确分类。