为啥我在逻辑回归和支持向量机中得到相同的输出

Posted

技术标签:

【中文标题】为啥我在逻辑回归和支持向量机中得到相同的输出【英文标题】:Why am i getting same output In Logistic Regression and Support Vector Machine为什么我在逻辑回归和支持向量机中得到相同的输出 【发布时间】:2020-10-04 00:06:48 【问题描述】:

我已经在 J​​upyter Notebook(使用 Anaconda)以及 Pycharm 中的单独文件中运行了我的代码,但我仍然使用(“线性”内核)得到了逻辑回归和支持向量机的相同输出。 Accuracy、Recall、Precision 以及混淆矩阵都具有相同的输出。 两种情况下的 ROC 曲线不同,AUC 也不同。 起初,所有代码都在一个 Jupyter Notebook 中,得到相同的输出,我将每个算法放在一个单独的笔记本中,但得到了相同的结果。我将 Pycharm 中的代码复制到单独的文件中,但仍然得到相同的输出。两者的输出可以完全相同吗? 下面是逻辑回归的代码:

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
X_train, X_test, Y_train, Y_test = train_test_split(X,Y,test_size=0.1,random_state=1)
lr = LogisticRegression(max_iter=1000)
lr.fit(X_train,Y_train)
Y_pred = lr.predict(X_test)
print("Accuracy:",metrics.accuracy_score(Y_test, Y_pred))
print("Precision:",metrics.precision_score(Y_test, Y_pred))
print("Recall:",metrics.recall_score(Y_test, Y_pred))
Y_pred_proba = lr.predict_proba(X_test)[::,1]
auc = metrics.roc_auc_score(Y_test, Y_pred_proba)
print("AUC:",auc)

下面是SVM的代码

from sklearn.model_selection import train_test_split
from sklearn import svm
X_train, X_test, Y_train, Y_test = train_test_split(X,Y,test_size=0.1,random_state=1)
clf = svm.SVC(kernel='linear',probability=True)
clf.fit(X_train,Y_train)
Y_pred = clf.predict(X_test)
print("Accuracy:",metrics.accuracy_score(Y_test, Y_pred))
print("Precision:",metrics.precision_score(Y_test, Y_pred))
print("Recall:",metrics.recall_score(Y_test, Y_pred))
Y_pred_proba = clf.predict_proba(X_test)[::,1]
auc = metrics.roc_auc_score(Y_test, Y_pred_proba)
print("AUC:",auc)

以下是线性回归的输出

Accuracy: 0.8709677419354839
Precision: 0.8235294117647058
Recall: 0.9333333333333333
13 3 1 14
AUC: 0.9208333333333334

SVM 的输出

Accuracy: 0.8709677419354839
Precision: 0.8235294117647058
Recall: 0.9333333333333333
13 3 1 14
AUC: 0.925

【问题讨论】:

可能是因为您在这两种情况下都使用变量 clf 进行预测?所以,你基本上在这两种情况下都在做 SVM。 比较他们预测的实际概率。 【参考方案1】:

我不认为它可以在两个不同的分类器上得到完全相同的分数,

我怀疑以下两件事;

    这取决于数据。你有多少样本,你的数据是什么?是分类的吗? 为什么只使用 10% 的数据作为测试数据?它太少了。您应该增加数据以更好地预测。 random_state=parameter => 有助于随机测试 您应该使用 predict 方法而不是 predict_oba

我相信这些观察可以帮助你。

【讨论】:

以上是关于为啥我在逻辑回归和支持向量机中得到相同的输出的主要内容,如果未能解决你的问题,请参考以下文章

支持向量机

哪个更快?逻辑回归或线性核支持向量机?

机器学习支持向量机SVM逻辑回归LR决策树DT的直观对比和理论对比,该如何选择(面试回答)?

机器学习简单实践——支持向量机

梯度下降算法

在 RBF 支持向量机中训练和预测