Python 绘制多种算法的精度召回曲线

Python 绘制多种算法的精度召回曲线,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,我想为我用于文本分类的三种算法绘制一条精确召回曲线。我是个初学者,有人能告诉我如何在现有代码中添加该功能吗 nb_classifier = MultinomialNB() svm_classifier = LinearSVC() lr_classifier = LogisticRegression(multi_class="ovr") X_train, X_test, y_train, y_test = model_selection.train_test_split(df_

我想为我用于文本分类的三种算法绘制一条精确召回曲线。我是个初学者,有人能告诉我如何在现有代码中添加该功能吗

nb_classifier = MultinomialNB()
svm_classifier = LinearSVC()
lr_classifier = LogisticRegression(multi_class="ovr")
X_train, X_test, y_train, y_test = model_selection.train_test_split(df_train.data, df_train.label, test_size=0.2 , stratify = df_train['label'])
vect = CountVectorizer(stop_words='english', max_features=10000,
                       token_pattern=r'[a-zA-Z]{3,}' , ngram_range=(1,2))
X_train_dtm = vect.fit_transform(X_train)
X_test_dtm = vect.transform(X_test)
nb_classifier.fit(X_train_dtm, y_train)
svm_classifier.fit(X_train_dtm, y_train)
lr_classifier.fit(X_train_dtm, y_train)
nb_predictions = nb_classifier.predict(X_test_dtm)
svm_predictions = svm_classifier.predict(X_test_dtm)
lr_predictions = lr_classifier.predict(X_test_dtm)

您可以使用sklearn.metrics的plot_precision_recall_curve来绘制以下方法的精度召回曲线:

nb_classifier = MultinomialNB()
svm_classifier = LinearSVC()
lr_classifier = LogisticRegression(multi_class="ovr")
X_train, X_test, y_train, y_test = model_selection.train_test_split(df_train.data, df_train.label, test_size=0.2 , stratify = df_train['label'])
vect = CountVectorizer(stop_words='english', max_features=10000,
                       token_pattern=r'[a-zA-Z]{3,}' , ngram_range=(1,2))
X_train_dtm = vect.fit_transform(X_train)
X_test_dtm = vect.transform(X_test)
nb_classifier.fit(X_train_dtm, y_train)

svm_classifier.fit(X_train_dtm, y_train)
lr_classifier.fit(X_train_dtm, y_train)
nb_predictions = nb_classifier.predict(X_test_dtm)
svm_predictions = svm_classifier.predict(X_test_dtm)
lr_predictions = lr_classifier.predict(X_test_dtm)

#plot Precision-Recall curve and display average precision-recall score
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import plot_precision_recall_curve
import matplotlib.pyplot as plt
from sklearn.metrics import average_precision_score

disp = plot_precision_recall_curve(svm_classifier, X_test_dtm, y_test) #display Precision-Recall curve for svm_classifier
average_precision = average_precision_score(y_test, svm_predictions)
print('Average precision-recall score for svm_classifier: {0:0.2f}'.format(
      average_precision))

disp = plot_precision_recall_curve(nb_classifier, X_test_dtm, y_test) #display Precision-Recall curve for nb_classifier
average_precision = average_precision_score(y_test, nb_predictions)
print('Average precision-recall score for nb_classifier: {0:0.2f}'.format(
      average_precision))

disp = plot_precision_recall_curve(lr_classifier, X_test_dtm, y_test) #display Precision-Recall curve for nb_classifier
average_precision = average_precision_score(y_test, lr_predictions)
print('Average precision-recall score for lr_classifier: {0:0.2f}'.format(
      average_precision))

您可以使用sklearn.metrics的plot_precision_recall_curve来绘制以下方法的精度召回曲线:

nb_classifier = MultinomialNB()
svm_classifier = LinearSVC()
lr_classifier = LogisticRegression(multi_class="ovr")
X_train, X_test, y_train, y_test = model_selection.train_test_split(df_train.data, df_train.label, test_size=0.2 , stratify = df_train['label'])
vect = CountVectorizer(stop_words='english', max_features=10000,
                       token_pattern=r'[a-zA-Z]{3,}' , ngram_range=(1,2))
X_train_dtm = vect.fit_transform(X_train)
X_test_dtm = vect.transform(X_test)
nb_classifier.fit(X_train_dtm, y_train)

svm_classifier.fit(X_train_dtm, y_train)
lr_classifier.fit(X_train_dtm, y_train)
nb_predictions = nb_classifier.predict(X_test_dtm)
svm_predictions = svm_classifier.predict(X_test_dtm)
lr_predictions = lr_classifier.predict(X_test_dtm)

#plot Precision-Recall curve and display average precision-recall score
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import plot_precision_recall_curve
import matplotlib.pyplot as plt
from sklearn.metrics import average_precision_score

disp = plot_precision_recall_curve(svm_classifier, X_test_dtm, y_test) #display Precision-Recall curve for svm_classifier
average_precision = average_precision_score(y_test, svm_predictions)
print('Average precision-recall score for svm_classifier: {0:0.2f}'.format(
      average_precision))

disp = plot_precision_recall_curve(nb_classifier, X_test_dtm, y_test) #display Precision-Recall curve for nb_classifier
average_precision = average_precision_score(y_test, nb_predictions)
print('Average precision-recall score for nb_classifier: {0:0.2f}'.format(
      average_precision))

disp = plot_precision_recall_curve(lr_classifier, X_test_dtm, y_test) #display Precision-Recall curve for nb_classifier
average_precision = average_precision_score(y_test, lr_predictions)
print('Average precision-recall score for lr_classifier: {0:0.2f}'.format(
      average_precision))

非常感谢。然而,我得到了一个“绘图精度曲线”的导入错误。我可以导入“精确回忆曲线”你的sklearn版本是什么?我使用的是版本0.22.1。这可能就是问题所在。我使用的是0.21.3,我会在更新后尝试解决方案。另一个选项是使用“精度-召回曲线”作为“精度,召回,召回=精度-召回曲线(y\u测试,分类器预测)”,计算“精度”和“召回”,并使用matplotlib.pyplot绘制它们。谢谢。我想试试你的牙套。然而,我得到了一个“绘图精度曲线”的导入错误。我可以导入“精确回忆曲线”你的sklearn版本是什么?我使用的是版本0.22.1。这可能就是问题所在。我使用的是0.21.3,我会在更新后尝试解决方案。另一个选项是使用“精度-召回曲线”作为“精度,召回,召回=精度-召回曲线(y\u测试,分类器预测)”,计算“精度”和“召回”,并使用matplotlib.pyplot绘制它们。谢谢。我也会试试