Вычисление кривой ROC с помощью Python

Кривые ROC обычно показывают истинное положительное значение по оси Y и ложное срабатывание по оси X. Это означает, что верхний левый угол графика является «идеальной» точкой: ложноположительный показатель равен нулю, а истинный положительный показатель равен единице. Это не очень реалистично, но означает, что большая площадь под кривой (AUC) обычно лучше. Кривые ROC обычно используются в двоичной классификации для изучения результатов работы классификатора. Чтобы расширить кривую ROC и область ROC до классификации с несколькими классами или метками, необходимо преобразовать выходные данные в двоичную форму. Для каждой метки можно нарисовать одну кривую ROC, но можно также нарисовать кривую ROC, рассматривая каждый элемент индикаторной матрицы метки как двоичный прогноз. Вероятности предсказанных классов входной выборки вычисляются как средневзвешенные вероятности предсказанных классов классификаторов в ансамбле. Используя Python, мы можем импортировать библиотеку SkLearn. Пользователи могут установить Anaconda для Python3 и сразу же приступить к работе.

Установите Python: https://realpython.com/installing-python/#step-1-download-the-python-3-installer

Анаконда: https://www.anaconda.com/download/

Установите SciKit: используйте командную строку Anaconda —pip install -U scikit-learn

В нашем примере мы будем использовать библиотеку scikit, чтобы определить, обнаружен ли класс 1 или класс 2. В этом примере мы будем использовать классификатор SVM. Создайте файл Python и проверьте код. Во-первых, мы должны импортировать наши библиотеки.

from sklearn.svm import SVC
from sklearn.metrics import roc_curve
from sklearn.metrics import auc
import matplotlib.pyplot as plt
import numpy as np

Мы должны создать несколько списков после того, как отделим наши ярлыки от функций в нашем файле .txt. В нашем случае мы работаем со списком, а затем преобразуем его в массивы numpy.

#READ TRAINING AND TESTING FILE
featureFile = input("Enter Training File: ")
featureTestFile = input("Enter Test File: ")
featureFile = open(featureFile, 'r')
featureTestFile = open(featureTestFile, 'r')
lines = featureFile.readlines()
linesTest = featureTestFile.readlines()
'''
X: 2D All Features Split Into Columns in a list for training
CF: 2D All Classes (1 or 2) in a list for training
TestX: 2D All Features Split Into Columns in a list for testing
TestCF: 2D All Classes Split Into Columns in a list for testing
'''
X, CF, TestCF, TestX = gatherFeatures(lines, linesTest)
#NORMALIZE DATA AND RUN THROUGH SVM OBJECT
runClassifiers(X, TestX, TestCF, CF)

Мы читаем наши данные обучения и тестирования, помеченные цифрами 1 или 2. Это двоичная классификация, аналогичная для мультиклассовых проектов. Как только функции собраны, мы можем пропустить все через классификаторы. Я пропущу сбор информации о функциях в этой статье и расскажу исключительно о предварительной обработке и анализе наших данных.

'''
Pre Process Data and Create ROC Curve. 
'''
def runClassifiers(listX, listTestX, listTestCF, CF):
#CLASS ARRAY, STORES ALL CLASSES
    cf = np.array(CF)
    cfTest = np.array(listTestCF)
#Convert to Array
    X = np.array(listX)
    TestX = np.array(listTestX)
# NORMALIZE DATA
    X = preprocessing.scale(X)
    TestX = preprocessing.scale(TestX)
#SVM GATHER DATA
    rbf_svc = SVC(kernel='rbf', gamma=0.00001, C=1000,probability=True).fit(X, cf)
#PREDICT PROBABILITY SCORE = 2D ARRAY FOR EACH PREDICTION
    predictedprobSVC = rbf_svc.predict_proba(TestX)
#GET ROC DATA
        fpr, tpr, thresholds = roc_curve(cfTest, predictedprobSVC[:,1], pos_label=2)
    roc_auc = auc(fpr, tpr)
#GRAPH DATA
    plt.figure()
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.plot([0, 1], [0, 1], color='navy', linestyle='--')
    plt.xlim([0.0, 1.0])
    plt.ylim([0.0, 1.05])
    plt.title('SVM Classifier ROC')
    plt.plot(fpr, tpr, color='blue', lw=2, label='SVM ROC area = %0.2f)' % roc_auc)
    plt.legend(loc="lower right")
    plt.show()

Кривые ROC часто используются для графического отображения связи / компромисса между клинической чувствительностью и специфичностью для каждого возможного порогового значения для теста или комбинации тестов. Кроме того, площадь под кривой ROC дает представление о преимуществах использования рассматриваемых тестов. После запуска этого класса наш график кривой ROC будет выглядеть примерно так, как на графике ниже.

Мы можем увидеть, как работают разные классификаторы, и расширить наш анализ. Dogan AI предоставляет консультации по машинному обучению клиентам по всему миру. Если вы заинтересованы во внедрении ИИ, не стесняйтесь обращаться к нам.

Электронная почта: [email protected]

Сайт: www.dogan.ai