Вычисление кривой 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