首页 > 解决方案 > 这是 sklearn 逻辑回归的错误吗?

问题描述

我是新来的,如有错误请见谅。

所以,我有以下问题:我正在模拟一个逻辑回归数据集,其中包含一个自变量 (X) 和一个响应变量 Y。然后我创建了两个设计矩阵:一个包含 X,另一个包含 X 和 X,即两次同一个变量。然后我使用两个不同的设计矩阵拟合两个模型。显然,系数估计应该是“相同的”,即 intercept_1 = intercept_2 和 coef_1 = sum(coef_2)。但这种情况并非如此。此外,似然比检验应该返回 p 值 = 1,但情况也并非如此。为什么会这样?

我的代码:

import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import log_loss
from scipy.stats import chi2
N = 100
X = np.random.randn(N)
XX = np.array([X, X]).T
probs = np.exp(X)/(1+np.exp(X))
Y = np.random.binomial(1, probs, N)
myLogReg = LogisticRegression(solver = 'newton-cg', max_iter=1000, fit_intercept=True, random_state=1)
myLogReg.fit(X.reshape(-1, 1), Y)
y_prob = myLogReg.predict_proba(X.reshape(-1, 1))
currentMinusTwoLogLik = 2*len(Y)*log_loss(Y, y_prob)
print(myLogReg.intercept_)
print(myLogReg.coef_)
print("")
myLogRegUpdateCandidate = LogisticRegression(solver = 'newton-cg', max_iter=1000, fit_intercept=True, random_state=1)
myLogRegUpdateCandidate.fit(XX, Y)
y_probCandidate = myLogRegUpdateCandidate.predict_proba(XX)
candidateMinusTwoLogLik = 2*len(Y)*log_loss(Y, y_probCandidate)
print(myLogRegUpdateCandidate.intercept_)
print(myLogRegUpdateCandidate.coef_)
print("")
print(chi2.sf(currentMinusTwoLogLik-candidateMinusTwoLogLik, 1))

标签: pythonnumpyscikit-learn

解决方案


推荐阅读