Это код, который я запускаю:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.naive_bayes import GaussianNB, MultinomialNB
from sklearn.metrics import accuracy_score
from sklearn.neighbors import KNeighborsClassifier
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import precision_score, recall_score,auc
from sklearn.metrics import roc_curve,roc_auc_score, plot_roc_curve
Это была ошибка:
ImportError Traceback (most recent call last)
<ipython-input-3-d1b430d75826> in <cell line: 7>()
5 from sklearn.tree import DecisionTreeClassifier
6 from sklearn.naive_bayes import GaussianNB, MultinomialNB
----> 7 from sklearn.metrics import accuracy_score, precision_score, recall_score, roc_curve, roc_auc_score, plot_roc_curve
8 from sklearn.neighbors import KNeighborsClassifier
9 from sklearn.neural_network import MLPClassifier
ImportError: cannot import name 'plot_roc_curve' from 'sklearn.metrics' (/usr/local/lib/python3.10/dist-packages/sklearn/metrics/__init__.py)
Пожалуйста, дайте мне знать, если мой код неправильный или в нем чего-то не хватает?
Ошибка возникает потому, что plot_roc_curve
устарел в scikit-learn версии 1.0 и удален в версии 1.2. Вместо этого вы можете использовать RocCurveDisplay
из модуля sklearn.metrics
, поскольку Google Colab, похоже, сейчас использует версию 1.3.2:
# import sklearn
# print(sklearn.__version__) # 1.3.2
from sklearn.metrics import accuracy_score, precision_score, recall_score, roc_curve, roc_auc_score, RocCurveDisplay
А для построения кривой ROC вы можете использовать RocCurveDisplay
вот так:
RocCurveDisplay.from_estimator(your_model, your_X_test, your_y_test)
plt.show()
Знак ImportError
, с которым вы столкнулись, означает, что plot_roc_curve
и он недоступен в той версии scikit-learn
, которую вы используете. Функция plot_roc_curve
была добавлена в scikit-learn
в версии 0.22, и если вы используете более старую версию, вам может потребоваться обновить scikit-learn
, поэтому у вас есть варианты: либо обновить scikit-learn, либо использовать альтернативные методы для построения кривой ROC.
Чтобы решить эту проблему, вы можете обновить scikit-learn, просто вставив это в свой терминал:
pip install --upgrade scikit-learn
или pip3 install --upgrade scikit-learn
В качестве альтернативы, если вы не можете обновить scikit-learn
, вы можете использовать функцию roc_curve
вместе с matplotlib
, чтобы вручную построить кривую ROC. Пример приведен здесь:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.naive_bayes import GaussianNB, MultinomialNB
from sklearn.metrics import accuracy_score, precision_score, recall_score, roc_curve, roc_auc_score
from sklearn.neighbors import KNeighborsClassifier
from sklearn.neural_network import MLPClassifier
# Sample data
X, y = np.random.rand(100, 10), np.random.randint(0, 2, 100)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Train a classifier
classifier = DecisionTreeClassifier()
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
y_proba = classifier.predict_proba(X_test)[:, 1]
# Calculate ROC curve
fpr, tpr, _ = roc_curve(y_test, y_proba)
roc_auc = roc_auc_score(y_test, y_proba)
# Plot ROC curve
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc = "lower right")
plt.show()
У вас устаревшая версия?