Герои, рад знакомству. Вот одноимённый «Алгоритм» по всей сети. 0 основ перенесено в AI. Несколько конкурсов по алгоритмам обновляются каждый день, чтобы больше людей могли ими насладиться. удовольствие от интеллекта».
В мире машинного обучения и науки о данных оценка качества модели является очень важным шагом. Кривая ROC (рабочая характеристика приемника) и AUC (площадь под кривой) являются важными инструментами для оценки эффективности моделей классификации.
Этот пункт знаний также очень часто появляется в интервью.。Хотя разобраться в самих понятиях не сложно,Но многие люди легко запутываются при просмотре,Или забудьте, когда нервничаете перед собеседованием,повлиять на реакцию.
Эта статья начнется с основных понятий и постепенно углубится в практические действия. Мы подробно объясним определение и значение кривой ROC и AUC, поможем вам освоить использование этих инструментов с помощью примеров и демонстрации кода и, наконец, постараемся полностью понять и гибко использовать ROC и AUC путем сравнения некоторых практических случаев применения и связанных с ними. концепции.
Кривая ROC — это кривая рабочей характеристики приемника. Кривая ROC была получена во время Второй мировой войны и впервые использовалась в области обнаружения сигналов для обнаружения транспортных средств противника (самолетов, кораблей) на поле боя. В настоящее время это широко используемый графический инструмент для оценки производительности моделей двоичной классификации. Это помогает нам понять возможности классификации модели, показывая компромисс между истинно положительным показателем (TPR) и ложным положительным показателем (FPR).
AUC, или Площадь под кривой, представляет собой числовое представление площади под кривой ROC. Он предоставляет количественный показатель для измерения общей производительности модели классификации. Значения AUC варьируются от 0 до 1, причем большие значения указывают на лучшую производительность модели.
В задачах классификации, особенно когда набор данных несбалансирован, полагаться исключительно на точность может ввести в заблуждение. Чтобы лучше понять это, давайте проиллюстрируем это на примере.
Примеры
Предположим, у нас есть набор данных по элементам боевых искусств, в котором 95% образцов — обычные ученики, а 5% — мастера.
Продемонстрируем это на примере кода (код предназначен для воспроизведения, часть приезжатьобъяснять можно пропустить):
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve, roc_auc_score, accuracy_score, confusion_matrix
# Создайте чрезвычайно несбалансированный набор данных о боевых искусствах.
# Предположим, что характеристики представляют собой время обучения боевым искусствам, процент побед в бою и т. д., а метка показывает, подходит ли мастеру
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, weights=[0.95, 0.05], random_state=42)
# Разделите набор данных на обучающий набор и тестовый набор.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Создайте модель, которая всегда прогнозирует среднее число учеников.
class AlwaysNegativeModel:
def predict(self, X):
return np.zeros(X.shape[0])
# Обучение и прогнозирование
model = AlwaysNegativeModel()
y_pred = model.predict(X_test)
# вычислитьматрица путаницыи Точность
cm = confusion_matrix(y_test, y_pred)
accuracy = accuracy_score(y_test, y_pred)
# вычислить ROC Сумма кривой AUC
# Здесь нам нужен вероятностный прогноз, чтобы вычислить ROC Сумма кривой AUC, для демонстрации, мы предполагаем, что модель выдает постоянную вероятность
y_pred_prob = np.zeros(X_test.shape[0])
fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob)
auc = roc_auc_score(y_test, y_pred_prob)
# Визуализируйте результаты
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.title("матрица путаницы")
plt.imshow(cm, interpolation='nearest', cmap=plt.cm.Blues)
plt.colorbar()
plt.xlabel("метка прогноза")
plt.ylabel("настоящая метка")
plt.xticks([0, 1], ["Обычный ученик", "Владелец"])
plt.yticks([0, 1], ["Обычный ученик", "Владелец"])
for i in range(2):
for j in range(2):
plt.text(j, i, cm[i, j], ha="center", va="center", color="red")
print(f"Точность: {accuracy:.2f}")
print(f"AUC: {auc:.2f}")
Анализ результатов
Если мы используем простой классификатор, он всегда предсказывает все образцы как обычных учеников.
С точностью 95% эта модель выглядит великолепно, но на самом деле она вообще не может идентифицировать мастеров и является бесполезным классификатором.
Этот классификатор не обладает какой-либо реальной способностью классификации, поскольку он не может идентифицировать настоящих мастеров.
Точность говорит нам только о том, какая часть общих прогнозов модели верна, но в случае дисбаланса классов этот показатель может ввести нас в заблуждение. Кривые ROC и AUC дают более полное представление, показывая эффективность модели при различных пороговых значениях, помогая нам более точно оценить способность модели к классификации.
Для получения дополнительной информации см. Планета свободных знаний.
Чтобы понять кривую ROC, сначала необходимо разобраться с понятиями TPR и FPR:
Среди них TP (True Positives) — это количество образцов, которые правильно классифицируют положительный класс как положительный класс, а FN (False Negatives) — это количество образцов, которые неправильно классифицируют положительный класс как отрицательный класс.
Среди них FP (ложноположительные результаты) — это количество образцов, которые неправильно классифицируют отрицательный класс как положительный класс, а TN (истинно отрицательные результаты) — это количество образцов, которые правильно классифицируют отрицательный класс как отрицательный класс.
AUC (площадь под кривой) — это площадь под кривой ROC, которая используется для оценки эффективности модели классификации. Значения AUC варьируются от 0 до 1, причем большие значения указывают на лучшую производительность модели.
Математически AUC можно рассчитать путем интегрирования:
В дискретном случае AUC можно аппроксимировать правилом трапеций:
Шаги для построения кривой ROC следующие:
from sklearn.metrics import roc_curve
# Прогнозирование вероятности набора тестов
y_pred_prob = model.predict_proba(X_test)[:, 1]
# вычислить ROC изгиб
fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob)
# Выходной частичный порогценить
print("порогценить: ", thresholds[:10]) # Показать только первые 10 порогов
# Выходной частичный порогценить соответствующий TPR и FPR
for i in range(10): # Отображаются только соответствующие цены первых 10 порогов.
print(f"порогценить: {thresholds[i]:.2f} -> ложноположительный уровень (FPR): {fpr[i]:.2f}, истинно положительный показатель (TPR): {tpr[i]:.2f}")
import matplotlib.pyplot as plt
# Визуализация ROC изгиб
plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, color='blue', lw=2, label='ROC изгиб')
plt.plot([0, 1], [0, 1], color='gray', lw=1, linestyle='--', label='случайное предположение')
plt.xlabel("ложноположительный уровень (FPR)")
plt.ylabel("истинно положительный показатель (TPR)")
plt.title("ROC изгиб")
plt.legend(loc="lower right")
# Отметьте несколько пороговых точек на изгибе.
threshold_points = [0.2, 0.5, 0.8]
for threshold in threshold_points:
idx = np.where(thresholds >= threshold)[0][0]
plt.scatter(fpr[idx], tpr[idx], marker='o', color='red')
plt.text(fpr[idx], tpr[idx],f"порогценить={threshold:.2f}", fontsize=12)
plt.show()
Чем больше значение AUC, тем лучше производительность модели. Конкретно:
下面наспроходитьпример кода Приходитьвычислить AUC и объясните его значение:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, roc_auc_score, accuracy_score, confusion_matrix
# Сгенерируйте несбалансированный набор данных о боевых искусствах
# Предположим, что характеристики представляют собой время обучения боевым искусствам, процент побед в бою и т. д., а метка показывает, подходит ли мастеру
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, weights=[0.9, 0.1], random_state=42)
# Разделите набор данных на обучающий набор и тестовый набор.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Обучите модель логистической регрессии
model = LogisticRegression()
model.fit(X_train, y_train)
# Прогнозировать набор тестов
y_pred_prob = model.predict_proba(X_test)[:, 1]
# вычислить ROC Сумма кривой AUC
fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob)
auc = roc_auc_score(y_test, y_pred_prob)
# Визуализируйте результаты
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.title("ROC изгиб")
plt.plot(fpr, tpr, color='blue', lw=2, label=f"AUC = {auc:.2f}")
plt.plot([0, 1], [0, 1], color='gray', lw=1, linestyle='--')
plt.xlabel("ложноположительный уровень")
plt.ylabel("истинно положительный показатель")
plt.legend(loc="lower right")
plt.subplot(1, 2, 2)
plt.title("Значение Индикация AUC")
plt.fill_between(fpr, tpr, color='blue', alpha=0.3)
plt.plot(fpr, tpr, color='blue', lw=2, label=f"AUC = {auc:.2f}")
plt.xlabel("ложноположительный уровень")
plt.ylabel("истинно положительный показатель")
plt.legend(loc="lower right")
plt.tight_layout()
plt.show()
print(f"AUC: {auc:.2f}")
С помощью этих двух графиков вы можете визуально увидеть эффективность классификации модели при различных пороговых значениях, а также количественно оценить эту эффективность с помощью значения AUC.
Чтобы герои лучше поняли практическое применение ROC и AUC, мы продемонстрируем их применение в разных областях, таких как медицинская диагностика и оценка финансовых рисков, а также реализуем код на реальных случаях.
медицинский диагноз
существоватьмедицинский диагнозсередина,ROC Сумма кривой AUC Он широко используется для оценки эффективности диагностических тестов. Например, при скрининге на рак врачи хотят, чтобы тест правильно идентифицировал пациентов, у которых есть это заболевание, и тех, у кого его нет. РПЦ Кривая может помочь врачам выбрать лучший порог для максимизации точности обнаружения.
оценка финансовых рисков
В финансах ROC и AUC используются для оценки эффективности моделей кредитного скоринга. Например, банки хотят выявить заемщиков с высоким уровнем риска, чтобы снизить уровень невозврата кредитов. Кривая ROC может помочь банкам выбрать соответствующие пороговые значения для баланса риска и доходности.
Мы будем использовать симуляцию медицинского набор данных диагностики, чтобы продемонстрировать, как применять ROC и АУК. Предположим, у нас есть набор данных, содержащий различные характеристики пациентов и наличие у них определенного заболевания.
пример кодаи Анализ результатов
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, roc_auc_score, accuracy_score, confusion_matrix
# Загрузить набор данных о раке молочной железы
data = load_breast_cancer()
X = data.data
y = data.target
# Разделите набор данных на обучающий набор и тестовый набор.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Обучите модель логистической регрессии
model = LogisticRegression(max_iter=10000)
model.fit(X_train, y_train)
# Прогнозировать набор тестов
y_pred = model.predict(X_test)
y_pred_prob = model.predict_proba(X_test)[:, 1]
# вычислитьматрица путаницыи Точность
cm = confusion_matrix(y_test, y_pred)
accuracy = accuracy_score(y_test, y_pred)
# вычислить ROC Сумма кривой AUC
fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob)
auc = roc_auc_score(y_test, y_pred_prob)
# Визуализируйте результаты
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.title("матрица путаницы")
plt.imshow(cm, interpolation='nearest', cmap=plt.cm.Blues)
plt.colorbar()
plt.xlabel("метка прогноза")
plt.ylabel("настоящая метка")
plt.xticks([0, 1], ["не болен", "больной"])
plt.yticks([0, 1], ["не болен", "больной"])
for i in range(2):
for j in range(2):
plt.text(j, i, cm[i, j], ha="center", va="center", color="red")
plt.subplot(1, 2, 2)
plt.title("ROC изгиб")
plt.plot(fpr, tpr, color='blue', lw=2, label=f"AUC = {auc:.2f}")
plt.plot([0, 1], [0, 1], color='gray', lw=1, linestyle='--', label='случайное предположение')
plt.xlabel("ложноположительный уровень")
plt.ylabel("истинно положительный показатель")
plt.legend(loc="lower right")
plt.tight_layout()
plt.show()
print(f"Точность: {accuracy:.2f}")
print(f"AUC: {auc:.2f}")
Анализ результатов
объяснять
В этом разделе мы рассмотрим индекс ROC/AUC и другие оценки для сравнения, чтобы герои могли более полно понять роль этих индексов в оценке модели.
матрица «путаницы» — это инструмент, используемый для оценки эффективности моделей классификации путем отображения количества истинных положительных результатов (TP), ложных положительных результатов (FP), истинных отрицательных результатов (TN) и ложных отрицательных результатов (FN). РПЦ Сумма кривой AUC Целью является всесторонняя оценка эффективности модели при различных пороговых значениях.
Пример кода:
from sklearn.metrics import confusion_matrix, accuracy_score
# Прогнозировать набор тестов
y_pred = model.predict(X_test)
y_pred_prob = model.predict_proba(X_test)[:, 1]
# вычислитьматрица путаницы
cm = confusion_matrix(y_test, y_pred)
accuracy = accuracy_score(y_test, y_pred)
# Выходная матрица путаницыи Точность
print("матрица путаницы:")
print(cm)
PR Кривая (точность-отзыв Кривая) Другой способ оценки моделей двоичной классификации, особенно подходящий для несбалансированных наборов данных. Он оценивает производительность модели, показывая соотношение между Точностью и Отзывать.
Пример кода:
from sklearn.metrics import precision_recall_curve
# вычислить PR изгиб
precision, recall, _ = precision_recall_curve(y_test, y_pred_prob)
# Визуализация PR изгиб
plt.figure()
plt.plot(recall, precision, color='blue', lw=2, label='PR изгиб')
plt.xlabel("Отзыв")
plt.ylabel("степень точности")
plt.title("PR изгиб")
plt.legend(loc="lower left")
plt.show()
Кроме ROC/AUC и PR Кривая, другие часто используемые индикаторы оценки включают:
Пример кода:
from sklearn.metrics import precision_score, recall_score, f1_score
# вычислить точность, скорость полноты F1 Фракция
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
# Вывод результатов
print(f"Точность: {precision:.2f}")
print(f"Скорость запоминания: {recall:.2f}")
print(f"F1 Фракция: {f1:.2f}")
Используйте ROC и AUC при оценке эффективности модели классификации.,Героям необходимо обратить внимание на некоторые распространенные недоразумения и меры предосторожности.,Чтобы точно понять и применить эти индексы.
Высокая точность не обязательно означает, что модель работает хорошо, особенно в случае дисбаланса классов. Как было показано ранее, даже если модель всегда предсказывает класс большинства, ее точность может быть высокой, но ее фактическая способность классификации может быть очень плохой.
Хотя Значение Высокий показатель AUC указывает на хорошую производительность модели, но в некоторых сценариях приложений более важным может быть другой индекс, например Точность Отзывать. Например, в медицинской диагностике запоминаемость (т. е. чувствительность) часто выше, чем AUC Еще более критично, поскольку цена пропущенного диагноза очень высока.
Опираться на один показатель для оценки эффективности модели недостаточно. Лучше всего комбинировать несколько индикаторов (например, AUC, точность, степень точности, скорость отзыва F1 Оценка), чтобы всесторонне оценить производительность модели.
При работе с наборами данных, несбалансированными по классам, AUC и ROC Кривые могут дать более полную оценку, но их все равно необходимо объединять. PR Кривая и другие индикаторы для комплексного анализа.
ROC Настройка показывает производительность модели при различных пороговых значениях, и соответствующий порог необходимо выбирать в соответствии с конкретным сценарием приложения. Например, в оценке финансовых рисковсередина,Выбор более низкого порога цен может увеличить риск,Но это может уменьшить количество пропущенных обнаружений.
Убедитесь, что выходные данные вероятности модели откалиброваны, то есть выходная вероятность соответствует фактической вероятности возникновения. Калибровку модели можно выполнить с помощью графиков надежности (Калибровка Curve)Оценить другими методамии Корректирование。
После предыдущего подробного объяснения у нас есть полное понимание ROC Сумма кривой AUC Концепции, методы расчета, реализации кода и приложения в различных областях. Ниже приводится краткий обзор основного содержания статьи:
Благодаря объяснению этой статьи,Надеюсь, герои смогут более полно понять и применить ROC Сумма кривой AUC,Гибко применяйте эти знания в реальных проектах.,Повысьте точность и надежность оценки модели.
- Научные исследования облегчают заботы страны, а инновации приносят пользу людям -
Время ежедневного обновления срочное, и задача неотложная. Неизбежны пропуски. Сообщите мне, что контент предназначен только для обучения и общения. Некоторые материалы из Интернета будут удалены.
Если вы считаете, что этот контент ценен, расскажите мне больше. Делитесь, смотрите, ставьте лайки,Помощь Алгоритмическое Золото прочное, долговечное и очень желтое. BL День обновляется;
Также приглашайте героев следуй, звезда Алгоритм золота, который ежедневно смотрят тысячи людей, поможет вам значительно повысить свои навыки и гордиться миром.