为什么我在Logistic回归和支持向量机中获得相同的输出

时间:2020-06-14 14:08:16

标签: python machine-learning scikit-learn svm logistic-regression

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

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

1 个答案:

答案 0 :(得分:0)

我认为在两个不同的分类器上分数不可能完全相同

我从以下两点怀疑:

  1. 这取决于数据。您有多少样本,您的数据是什么?是绝对的吗?
  2. 为什么只使用10%的数据作为测试数据?太少了。您应该增加数据以更好地进行预测。
  3. random_state = parameter =>它有助于洗牌测试
  4. 您应该使用预测方法,而不是predict_oba

我相信这些观察可以为您提供帮助。

相关问题