SAS PROC LOGISTIC 和 Python sklearn LogisticRegression 之间的小偏差来源(未受惩罚)?

Source of small deviance between SAS PROC LOGISTIC and Python sklearn LogisticRegression (unpenalized)?

提问人:Hack-R 提问时间:4/17/2021 最后编辑:Hack-R 更新时间:4/22/2021 访问量:873

问:

我正在尝试将 SAS 的结果与 Python 3 中的结果相匹配。SAS 使用未受惩罚的回归,我可以通过选项或 .PROC LOGISTICsklearnsklearn.linear_model.LogisticRegressionC = 1e9penalty='none'

这应该是故事的结局,但是当我使用加州大学洛杉矶分校的公共数据集并尝试复制它们的多重回归时,我仍然注意到一个很小的差异。FEMALEMATHhiwrite

这是我的 Python 脚本:

# module imports
import pandas as pd
from sklearn.linear_model import LogisticRegression

# read in the data
df = pd.read_sas("~/Downloads/hsb2-4.sas7bdat")

# FE
df["hiwrite"] = df["write"] >= 52

print("\n\n")
print("Multiple Regression of Female and Math on hiwrite:")
feature_cols = ['female','math']

y=df["hiwrite"]
X=df[feature_cols]

# sklearn output
model = LogisticRegression(fit_intercept = True, C = 1e9)
mdl = model.fit(X, y)
print(mdl.intercept_)
print(mdl.coef_)

其结果为:

Multiple Regression of Female and Math on hiwrite:
[-10.36619688]
[[1.63062846 0.1978864 ]]

加州大学洛杉矶分校(UCLA)从SAS获得以下结果:

             Analysis of Maximum Likelihood Estimates
                               Standard          Wald
Parameter    DF    Estimate       Error    Chi-Square    Pr > ChiSq
Intercept     1    -10.3651      1.5535       44.5153        <.0001
FEMALE        1      1.6304      0.4052       16.1922        <.0001
MATH          1      0.1979      0.0293       45.5559        <.0001

这很接近,但正如你所看到的,截距参数估计值在小数点后第 3 位不同,在小数点后第 4 位的估计值不同。我尝试更改其他一些参数(如 和 ),但它没有改变结果。我也尝试了 - 它匹配 ,而不是 SAS。R 在截距和第一系数上与 Python 匹配,但在第二个系数上与 SAS 和 Python 略有不同......femaletolmax_itersolverLogitstatsmodel.apisklearn

更新:我去SAS社区寻找答案,有人提到这可能是由于迭代最大似然算法收敛的差异。我觉得这听起来很对,尽管我已经尝试过使用 Python 中的可用选项来解决这个问题。

关于错误的来源以及如何使 Python 与 SAS 匹配的任何想法?

python scikit-learn sas logistic-回归

评论

1赞 Reeza 4/17/2021
SAS 中的 MLE 容差级别,并检查 Python/SciKit learn 用于 MLE 算法中的容差级别或它正在执行的任何操作。
0赞 Hack-R 4/17/2021
@Reeza谢谢。我自己没有 SAS,但在 Python 中我尝试更改 ,但它们对这个小数据集没有区别。tolsolvermax_iter
0赞 Reeza 4/17/2021
您是否在文档中查找了 SAS 的默认容差设置并将 Python 设置为相同?不幸的是,如果情况不同,那么您需要开始比较实现细节,但同样,所有这些都在详细信息下的文档中。documentation.sas.com/doc/en/pgmsascdc/9.4_3.4/statug/......
1赞 Hack-R 4/17/2021
@Reeza谢谢。是的,我确实尝试过,但是就您而言,我只是发现了一些可能提供也可能不提供线索的东西(我也在查看 R 和 sklearn 之间的区别以寻找线索)。我将根据您的建议分为实施细节。tol

答: 暂无答案