Я пытаюсь запустить следующий код, но в последней строке постоянно появляется ошибка

Это код, который я запускаю:

    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)

Пожалуйста, дайте мне знать, если мой код неправильный или в нем чего-то не хватает?

У вас устаревшая версия?

Julien 31.07.2024 04:30
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ошибка возникает потому, что 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()



Другие вопросы по теме