python - 这是 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))
解决方案
推荐阅读
- go - 如何连接结构的字符串字段而忽略空字符串?
- python - Python io.StringIO 在末尾添加额外的换行符
- datebox - 为 zul datebox 设置默认日期
- r - ggalluvial - 对地层的顺序进行排序
- reactjs - onChange 事件重新呈现整个表
- kubernetes - 如何在 Kubernetes 1.13 中监控持久卷指标?
- amazon-web-services - 如何在本地运行访问受保护资源的 Lambda 函数
- javascript - 在 TS 中使用带有类型的映射将对象转换为数组
- c++ - 是否可以通过使用 std::variant 来避免继承?
- c# - 在 Unity 中使用 Resources.Load 时搜索所有子文件夹