我正在尝试使用 CVXPY 库编写逻辑回归模型。到目前为止,我编写的代码“有效”,因为它可以执行,不会产生任何错误消息,并且
我正在尝试使用 CVXPY 库编写逻辑回归模型。到目前为止,我编写的代码“有效”,因为它可以执行,不会产生任何错误消息并提供解决方案。但是,此解决方案与逻辑回归的 scikit-learn 实现提供的解决方案不匹配。
我知道 scikit-learns 实现默认包含 L2 惩罚,在下面的代码示例中,您将看到我将其更改为 None。我还从 sklearn 模型中删除了截距。但解决方案仍然不匹配:
import cvxpy as cp
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
X, y = make_classification(n_features=10, random_state=42)
sk = LogisticRegression(penalty=None, fit_intercept=False)
sk.fit(X, y)
print(sk.coef_)
输出结果如下:
[[-13.46939518 -7.09935934 19.41989522 -10.36990818 3.76335965
2.84616038 3.32474461 -2.84162961 3.13246888 1.08887971]]
现在,cvxpy 实现:
beta = cp.Variable(X.shape[1])
log_likelihood = cp.sum(cp.multiply(y, X @ beta) - cp.logistic(X @ beta))
problem = cp.Problem(cp.Maximize(log_likelihood/X.shape[0]))
problem.solve()
beta = beta.value
print(beta)
得出解决方案:
[-31.38130594 -10.72178524 44.07489985 -34.06127916 8.01950276
5.96941765 9.6143194 -7.88785049 12.96349703 -0.13264449]