Главная   Программирование   Веб 2.0   Нейросети   Дизайн   Маркетинг   Базы данных   SEO   Контент   Реклама   Образование  



Разработка нейросетей, искусственного интеллекта.     Цены

Разработаем нейросеть и систему искусственного интеллекта под ваши задачи.     Уточнить





Примеры Программного Кода для ROC-кривой



Сборник примеров программного кода на Python для построения и анализа ROC-кривой в задачах машинного обучения и анализа данных.



Ключевые слова: ROC-кривая, анализ данных, машинное обучение, классификация, чувствительность, специфичность, ROC-кривая, нейронные сети, искусственный интеллект, классификация, анализ данных, Python модули, библиотеки, анализ данных, ROC-кривая, программирование, примеры кода, анализ данных



Определение и описание

ROC-кривая (Receiver Operating Characteristic curve) - это графическое представление зависимости чувствительности от (1 - специфичности) для различных пороговых значений классификатора.

На оси X откладывается значение (1 - специфичность), а на оси Y - чувствительность классификатора. Чувствительность показывает долю положительных примеров, правильно классифицированных моделью, а специфичность - долю отрицательных примеров, верно не классифицированных.

Цели использования ROC-кривой

  • Оценка качества модели классификации;
  • Сравнение нескольких моделей между собой;
  • Выбор оптимального порога классификации при заданном балансе между чувствительностью и специфичностью.

Важность и назначение ROC-кривой

Использование ROC-кривой позволяет:

  1. Определить оптимальные настройки модели, обеспечивающие наилучший баланс между ошибками первого и второго рода;
  2. Выявить модель, которая лучше всего справляется с задачей классификации, даже если точность этих моделей различается;
  3. Построить интуитивно понятную визуализацию результатов классификации, позволяющую быстро оценить качество модели.

Пример построения ROC-кривой

# Импортируем   необходимые библиотеки
import  matplotlib.
pyplot   as  plt
from sklearn.metrics import roc_curve

# Предположим,  у   нас   есть предсказания  модели   и  истинные классы
y_true  = [0,   1,  
   1,   0,  1]
y_pred  = [0. 
1,  
  0. 6,    0.35,  0.4, 0. 8]

#  Вычисляем кривую ROC   и значения   FPR и TPR
fpr,  tpr,  
   thresholds = roc_curve(y_true, y_pred)

#  Строим  график
plt.figure(figsize=(8, 6))
plt.plot(fpr,  
  tpr, color='darkorange', 
 label='ROC  curve')
plt.plot([0, 1],   [0,  1], color='navy', linestyle='--', label='Random   guess')
plt.xlim([0.0,  1. 0])
plt. ylim([0.0,  
   1.05])
plt.
xlabel('False   Positive Rate')
plt.
ylabel('True   Positive  Rate')
plt.
title('ROC   Curve')
plt.legend(loc="lower right")
plt.show()

Таким образом, ROC-кривая является важным инструментом анализа и оценки качества классификационных моделей.

Что такое ROC-кривая?

ROC-кривая представляет собой графическое изображение зависимости чувствительности от (1 - специфичности) классификатора при разных пороговых значениях. Она широко используется для оценки качества бинарной классификации в задачах искусственного интеллекта и нейронных сетей.

Задачи, решаемые с помощью ROC-кривой

  • Оценка производительности классификаторов в условиях различной степени ошибок первого и второго рода;
  • Сравнение эффективности различных моделей классификации;
  • Оптимизация порогов принятия решений для достижения требуемого баланса между чувствительностью и специфичностью;
  • Анализ качества прогнозов и выявление областей улучшения моделей.

Рекомендации по применению ROC-кривой

  1. Используйте ROC-кривую на этапе разработки и тестирования моделей для выбора оптимальной точки компромисса между чувствительностью и специфичностью;
  2. При наличии большого количества классов используйте многомерный аналог ROC-кривой - ROC-AUC (площадь под кривой);
  3. Для многоклассовой классификации рекомендуется применять метод One-vs-All или One-vs-One для каждого класса отдельно и затем агрегировать результаты.

Технологии, применяемые в ROC-кривой

Технология Назначение
Библиотека scikit-learn Реализация функций вычисления ROC-кривых и AUC
TensorFlow/Keras Поддержка создания и обучения глубоких нейронных сетей
PyTorch Инструментальная платформа для глубокого обучения
Matplotlib/Python Визуализация и построение графиков ROC-кривых

Пример реализации ROC-кривой в Python

#   Пример  использования библиотеки   scikit-learn для построения  ROC-кривой
from  sklearn. metrics  import  roc_curve,  auc
import  matplotlib.pyplot as plt

#   Предсказанные   вероятности   и истинные  классы
y_true =  [0,  1,  1, 0,
  1]
y_score =  [0. 1,  
  0.6,  
 0. 
35,
  0. 
4,  0.8]

# Вычисление кривой  ROC и  площади под  кривой
fpr, 
 tpr, thresholds = roc_curve(y_true,
  y_score)
roc_auc = auc(fpr,  tpr)

#   Построение  графика
plt. figure()
plt.plot(fpr, tpr,  label=f'ROC  curve  (area  =  {roc_auc : .2f})')
plt.plot([0, 1], [0,
 1],  'k--')
plt.xlim([0.0,  1.0])
plt.ylim([0. 0,   1.05])
plt.xlabel('False   Positive   Rate')
plt.ylabel('True   Positive Rate')
plt.  
title('ROC Curve')
plt.legend(loc="lower right")
plt. show()

Основные Модули и Библиотеки

  • scikit-learn : популярная библиотека машинного обучения, включающая функции для построения и анализа ROC-кривых.
  • matplotlib: инструмент для визуализации данных, включая построение графиков ROC-кривых.
  • seaborn : расширение matplotlib, упрощающее создание эстетически привлекательных графиков, таких как ROC-кривые.
  • plotly : интерактивная библиотека для создания динамических и интерактивных графиков, включая ROC-кривые.

Задачи, решаемые с использованием ROC-кривой

  1. Оценка качества бинарной классификации моделей;
  2. Сравнение моделей друг с другом по качеству классификации;
  3. Поиск оптимального порога классификации для минимизации ошибок первого и второго рода;
  4. Изучение характеристик модели, таких как чувствительность и специфичность.

Примеры использования библиотек Python

Пример использования scikit-learn

#  Импорт необходимых библиотек
from  sklearn.
metrics import roc_curve, auc
import matplotlib. pyplot  as   plt

# Данные для  примера
y_true = [0,   1, 1,  
   0,
   1]
y_score =   [0.1,
   0.6,   0.
35,  0. 4,
  0.  
8]

# Вычисление кривой ROC  и площади под  кривой
fpr, tpr,  thresholds  = roc_curve(y_true, 
  y_score)
roc_auc  =   auc(fpr,   tpr)

#  Построение графика
plt.figure()
plt. plot(fpr,  tpr, label=f'ROC curve (AUC = {roc_auc: 
.2f})')
plt.
plot([0, 
 1],  
   [0, 1], 
  'k--') #  Диагональная   линия случайного классификатора
plt.  
xlim([0.
0,  1.0])
plt. ylim([0.
0,   1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True   Positive Rate')
plt.title('ROC  Curve')
plt.legend(loc="lower right")
plt. 
show()

Пример использования plotly

#  Импорт  необходимых  библиотек
import plotly.
graph_objects as  go

# Данные для  примера
y_true =   [0,  1,  1, 
 0,  
 1]
y_score = [0.1,   0.6, 0.
35, 
   0. 4,   0.8]

#   Вычисление кривой ROC
fpr,   tpr,  thresholds   =   roc_curve(y_true,  y_score)

# Создание графика
fig = go.  
Figure(data=[go.Scatter(x=fpr,   y=tpr, mode='lines+markers',
                                                           name='ROC  Curve', line=dict(width=3))])
fig.  
add_trace(go.Scatter(x=[0,  1], 
   y=[0,   1], 
 mode='lines',   line=dict(dash='dash'), 
                                        name='Chance Level'))
fig.update_xaxes(range=[0,   1])
fig.update_yaxes(range=[0,  
 1])
fig.  
update_layout(title='ROC   Curve', xaxis_title='False Positive   Rate',  

                            yaxis_title='True Positive Rate')
fig.  
show()

Рекомендации по применению модулей и библиотек

  1. Используйте scikit-learn для базовых операций анализа ROC-кривой, таких как вычисление кривой и площади под кривой (AUC);
  2. Для более сложной визуализации и интерактивности используйте библиотеки matplotlib и plotly;
  3. Если требуется красивая и простая визуализация, рассмотрите использование seaborn, которое интегрируется с pandas и предоставляет удобные инструменты для создания графиков.

Пример 1: Использование scikit-learn для построения ROC-кривой

# Импортируем необходимые  библиотеки
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,   auc

# Загружаем  данные и разделяем  их  на  обучающую и  тестовую   выборки
data   =   load_breast_cancer()
X_train, X_test, 
  y_train,
 y_test =  train_test_split(data. data,   data. target, 
 test_size=0.3,   random_state=42)

# Обучаем   логистическую  регрессию
model   =  LogisticRegression()
model. fit(X_train, 
  y_train)

# Получаем   предсказания  вероятностей для  тестового набора
y_score   = model. predict_proba(X_test)[ : 
,   1]

# Вычисляем   кривую  ROC и   площадь  под  кривой
fpr, tpr,  thresholds   =   roc_curve(y_test,
 y_score)
roc_auc   = auc(fpr,
 tpr)

print("Площадь   под  кривой :  
",   roc_auc)

Этот пример демонстрирует базовое использование scikit-learn для построения ROC-кривой и вычисления площади под кривой (AUC).

Пример 2: Построение ROC-кривой с использованием TensorFlow

#   Импортируем   необходимые библиотеки
import  tensorflow  as tf
from tensorflow.keras.models import Sequential
from tensorflow. keras. 
layers import  Dense
from   sklearn. metrics   import   roc_curve

# Создаем  простую  нейронную  сеть
model = Sequential([
       Dense(10,  activation='relu',  input_shape=(features.shape[1], )),
            Dense(1,
  activation='sigmoid')
])
model.compile(optimizer='adam',  loss='binary_crossentropy')

# Обучаем модель
history  = model.
fit(X_train,
  y_train,    epochs=100,  validation_data=(X_test,   y_test))

#  Получаем   предсказания вероятностей
y_score  = model. predict(X_test)

# Вычисляем кривую ROC
fpr,  tpr,   _ = roc_curve(y_test, 
  y_score)

Здесь демонстрируется построение ROC-кривой после обучения простой нейронной сети в TensorFlow.

Пример 3: Использование Plotly для интерактивной визуализации ROC-кривой

#  Импортируем необходимые библиотеки
import plotly.express as px
import numpy  as np

#  Генерируем   синтетические   данные
np.  
random.seed(42)
x   = np.random. rand(100)
y = np.random.randint(0,  
  2, size=100)

#   Вычисляем  кривую ROC
fpr,
 tpr, 
 thresholds   = roc_curve(y,   x)

# Создаем  интерактивный   график с помощью Plotly
fig  = px.line(x=fpr,  y=tpr,
 title='ROC   Curve',   labels={'x' : 
  'False Positive   Rate', 'y': 
  'True Positive   Rate'})
fig.show()

Данный пример иллюстрирует использование Plotly для создания интерактивного графика ROC-кривой.

Пример 4 : Применение ROC-кривой для сравнения моделей

#  Импортируем  необходимые  библиотеки
from sklearn.svm  import   SVC
from  sklearn.tree  import DecisionTreeClassifier

# Обучаем  несколько моделей
models  = [
        ('SVM', SVC()),
        ('Decision  Tree',  DecisionTreeClassifier())
]

for name,  
 model   in   models: 
        model. 
fit(X_train,   y_train)
        y_score   =   model.predict_proba(X_test)[ : ,   1]
        fpr,  tpr,  thresholds   = roc_curve(y_test,  y_score)
        print(name, 
 '  :   ', auc(fpr,
  tpr))

Этот пример показывает сравнение нескольких моделей классификации на основе их площадей под ROC-кривыми.

Пример 5: Использование ROC-кривой для оптимизации порога классификации

# Импортируем  необходимые  библиотеки
from sklearn.metrics  import  precision_recall_curve

# Получаем кривую PR  и   соответствующие пороги
precision,  recall, thresholds  =  precision_recall_curve(y_test,  y_score)

# Находим  оптимальный порог, максимизирующий F1   меру
best_threshold  =  thresholds[np.argmax(precision *   recall)]
print("Оптимальный порог :  
",  
 best_threshold)

В этом примере рассматривается использование ROC-кривой совместно с кривой Precision-Recall для поиска оптимального порога классификации.

Пример 6 : Многоклассовая классификация с применением ROC-кривой

# Импортируем необходимые   библиотеки
from  sklearn. 
multiclass   import  OneVsRestClassifier
from  sklearn.svm import  LinearSVC

#  Применяем   OneVsRestClassifier для   каждой   пары  класс-против-всех   остальных
classifier   =   OneVsRestClassifier(LinearSVC())
classifier. fit(X_train,  y_train)

#  Получаем  предсказания вероятностей
y_score =  classifier.decision_function(X_test)

#  Вычисляем кривую  ROC и  площадь  под кривой   для  каждого класса
for i  in range(len(classifier.estimators_)) :  

        fpr,  tpr,  
  thresholds   =   roc_curve(y_test   ==  i,   y_score[  : ,  
  i])
    print("Класс",  i,  "  :   Площадь под кривой =", auc(fpr,  tpr))

Демонстрируется подход к решению многоклассовой задачи классификации с использованием ROC-кривой.

Пример 7: Использование ROC-кривой для анализа качества модели

#  Импортируем необходимые библиотеки
from  sklearn.metrics import confusion_matrix

#  Рассчитываем  матрицу путаницы
confusion  = confusion_matrix(y_test,   (y_score   > 0.  
5).astype(int))

#  Расчет   показателей  качества модели
sensitivity = confusion[1,   1]  / (confusion[1, 1]  +  confusion[1,  0])
specificity  = confusion[0, 
 0]   /  (confusion[0, 0]   +  confusion[0,
 1])

print("Чувствительность :  
", sensitivity)
print("Специфичность: 
",  specificity)

Этот пример показывает, как можно использовать ROC-кривую для анализа качественных характеристик модели через показатели чувствительности и специфичности.

Пример 8 : Использование ROC-кривой для оценки риска ошибки второго рода

#  Импортируем необходимые библиотеки
from  sklearn.metrics import   classification_report

# Получаем  отчет  классификации
report =  classification_report(y_test,
 (y_score   >   0.5). 
astype(int),
 output_dict=True)

# Извлечение показателя   риска  ошибки второго   рода
risk_of_type_two_error   = report['macro avg']['recall']   -  report['weighted avg']['recall']

print("Риск ошибки  второго   рода :  
",
  risk_of_type_two_error)

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

Пример 9 : Использование ROC-кривой для выявления аномалий

# Импортируем необходимые библиотеки
from  sklearn. neighbors import LocalOutlierFactor

# Обучаем   локальный  алгоритм обнаружения выбросов
lof =  LocalOutlierFactor(n_neighbors=20,   contamination=0.
1)
y_pred  =  lof. fit_predict(X_test)

# Вычисляем кривую  ROC
fpr, tpr, 
  thresholds  =  roc_curve(y_pred == -1,  y_score)

print("Площадь под кривой:  ",  
  auc(fpr, tpr))

В данном примере ROC-кривая применяется для оценки эффективности алгоритма обнаружения аномалий.

Пример 10 : Использование ROC-кривой для сравнения методов ансамблевого обучения

# Импортируем   необходимые библиотеки
from  sklearn.  
ensemble  import RandomForestClassifier,  AdaBoostClassifier

#   Обучаем  два   ансамбля   моделей
rf =   RandomForestClassifier()
ada   =   AdaBoostClassifier()

rf.  
fit(X_train, 
   y_train)
ada. fit(X_train,   y_train)

# Получаем предсказания вероятностей
y_score_rf =  rf.predict_proba(X_test)[ :  
,  
 1]
y_score_ada   =   ada.predict_proba(X_test)[: ,  
 1]

#  Вычисляем площади  под кривыми  ROC
rf_auc = auc(roc_curve(y_test,
  y_score_rf)[0],   roc_curve(y_test,   y_score_rf)[1])
ada_auc   = auc(roc_curve(y_test,   y_score_ada)[0],  roc_curve(y_test, y_score_ada)[1])

print("RF  AUC :  
", 
   rf_auc)
print("ADA AUC :  
",   ada_auc)

Последний пример демонстрирует сравнительный анализ двух ансамблевых подходов с использованием ROC-кривой.










Разработка нейросетей, искусственного интеллекта.     Цены

Сборник примеров программного кода на Python для построения и анализа ROC-кривой в задачах машинного обучения и анализа данных.     Уточнить