为什么 statsmodel logreg 的结果与 scikit-learn logreg 不同?

数据挖掘 机器学习 预测建模 逻辑回归
2022-02-21 19:44:35

我正在尝试进行二进制分类。我只有 6 个输入变量和 1 个输出变量。标签 1 是 1554 条记录,标签 0 是 3558 条记录。

正如你在下面看到的,我从这两个中得到的指标是不同的。我不确定我可以分享更多关于这个问题的其他信息。我只是尝试通过不同的方法进行分类

# statsmodel logreg 的代码

model = smm.Logit(y_train, X_train_std)    #std indicates standardized inputs
result=model.fit()
result.summary()
y_pred = result.predict(X_test_std)
y_pred[y_pred > 0.5] = 1
y_pred[y_pred < 0.5] = 0
cm = confusion_matrix(y_test, y_pred)
print(cm)
print("Accuracy is ", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))
print("ACU score is ",roc_auc_score(y_test, y_pred))
print("Recall score is",recall_score(y_test,y_pred))
print("Precision score is",precision_score(y_test,y_pred))
print("F1 score is",f1_score(y_test,y_pred))

# scikit-learn 的代码

#log reg optimized parameters
op_param_grid = {'C': [0.01],'class_weight':['balanced'],'penalty': ['l1'], 'solver': ['saga'],'max_iter':[200]}
logreg=LogisticRegression(random_state=41)
logreg_cv=GridSearchCV(logreg,op_param_grid,cv=10,scoring='f1')
logreg_cv.fit(X_train_std,y_train)

我可以知道为什么会发生这种情况,我应该依靠哪一个?

在此处输入图像描述

在这两种方法上期望相同的结果是不对的吗?他们的工作方式不同吗?

任何人都可以帮忙吗?

1个回答

据我所知,您在一种方法中使用“正常”Logit,在另一种情况下使用 L1 惩罚的 Logit,penalty': ['l1']称为“ Lasso ”。在 Statsmodels L1 惩罚将按照文档中的说明执行。

Lasso 和“正常”Logit 是两种不同的方法。在第一种情况下,(一些)参数被缩小并且可以设置为零,而使用普通 Logit,没有参数被缩小。套索通常用于提高与嘈杂的配合x,进行特征选择,或者在高维数据的情况下(很多x)。比较统计学习导论中的第 4.3 章和第 6.2 章

ISLR 带有Python 实验室这可以为您提供一个很好的起点,如何以适当的方式应用一种或另一种方法。