繁体   English   中英

使用LogisticRegression()将R的GLMNET输出与Python进行比较

[英]Comparing the GLMNET output of R with Python using LogisticRegression()

我正在使用L1规范(LASSO)进行Logistic回归。

我已选择使用的glmnet在包RLogisticRegression()sklearn.linear_modelpython 以我的理解,这应该给出相同的结果,但事实并非如此。

请注意,我没有缩放数据。

对于python我已使用以下链接作为参考:

https://chrisalbon.com/machine_learning/logistic_regression/logistic_regression_with_l1_regularization/

对于R我使用以下链接:

http://www.sthda.com/zh-CN/articles/36-classification-methods-essentials/149-penalized-logistic-regression-essentials-in-r-ridge-lasso-and-elastic-net/?fbclid=IwAR0ZTjoGqRgH5vNum9CloeGVaHdwlqDH

这是R使用的代码

###################################
#### LASSO LOGISTIC REGRESSION ####
##################################
x <- model.matrix(Y~., Train.Data.SubPop)[,-1]
y <- Train.Data.SubPop$Y
lambda_seq = c(0.0001, 0.01, 0.05, 0.0025)

cv_output <- cv.glmnet(x,y,alpha=1, family = "binomial", lambda = lambda_seq)

cv_output$lambda.min

lasso_best <- glmnet(x,y, alpha = 1, family = "binomial", lambda = cv_output$lambda.min)

下面是我的Python代码:

C = [0.001, 0.01, 0.05, 0.0025]

for c in C:
    clf = LogisticRegression(penalty='l1', C=c, solver='liblinear')
    clf.fit(X_train, y_train)
    print('C:', c)
    print('Coefficient of each feature:', clf.coef_)
    print('Training accuracy:', clf.score(X_train_std, y_train))
    print('Test accuracy:', clf.score(X_test_std, y_test))
    print('')

当我从Rcv.glment()函数导出最优值时,它给出的最优lambda是0.0001但是,如果我从python看分析,则最佳精度/召回率是0.05

我试图用0.05的R拟合模型,只有1个非零系数给我,但是在phython我有7个。

有人可以帮助我理解为什么这种差异和差异吗?

另外,如果有人可以指导我如何在R复制python代码,那将非常有帮助!

乍一看,我看到了几个问题:

  1. 错别字:查看您的代码,在R中,您的第一个lambda0.0001 在Python中,您的第一个C0.001

  2. 不同的参数化:查看文档,我认为Python中R和C中的lambda名称有所不同。 glmnet ,更高的lambda意味着更多的收缩。 但是,在sklearn文档中C被描述为“正则化强度的倒数……较小的值表示更强的正则化”。

  3. 缩放:您说: “请注意,我没有缩放数据。” 这是不正确的。 在R中,您做到了。 有一个standardizeglmnet参数用于缩放数据,默认值为TRUE 在Python中,您没有。

  4. 使用交叉验证。 在R中,您可以使用cv.glmnet对您的训练集进行k折交叉验证。 在Python中,您使用LogisticRegression而不是LogisticRegressionCV ,所以没有交叉验证。 请注意,交叉验证依赖于随机抽样,因此,如果您在两者中均使用CV,则应期望结果接近,但不完全匹配。

可能还有其他问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM