逻辑回归和系数

时间:2018-07-01 01:38:51

标签: python numpy scikit-learn logistic-regression

我正在尝试确定从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?

1 个答案:

答案 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上具有交叉熵,而不是原始线性值的均方误差,因此,优化器没有任何回报来恢复原始斜率,仅是为了正确分类。