您的代码存在一些问题。
首先,您在此处显示的两个模型是not等效的:尽管您将scikit-learn LogisticRegression设置为fit_intercept=True(这是默认设置),但您并没有这样做statsmodels一;来自statsmodels docs:默认情况下不包括拦截器,用户应添加。参见statsmodels.tools.add_constant。
另一个问题是,尽管您处于二进制分类设置中,但您在multi_class='multinomial'中要求输入LogisticRegression,事实并非如此。[scikit-learn中无法关闭正则化,但是可以通过将调整参数C设置为较大的值来使其无效。
这使得这两个模型在原理上再次不可比,但是您已经通过设置C=1e8在此成功解决了。实际上,自那时(2016年)以来,scikit-learn确实添加了一种关闭正则化的方法,方法是根据penalty='none'设置docs:如果为'none'(liblinear求解器不支持),则不应用任何正则化。
现在应视为关闭正则化的规范方法。
因此,将这些更改合并到您的代码中,我们有:np.random.seed(42) # for reproducibility
#### Statsmodels
# first artificially add intercept to x, as advised in the docs:
x_ = sm.add_constant(x)
res_sm = sm.Logit(y, x_).fit(method="ncg&#