замерять производительность системы Roc - PullRequest
0 голосов
/ 12 февраля 2019

Я совершенно новичок в машинном обучении и Python.Любая помощь будет оценена.

обычно в Matlab, это легко построить.Я хочу нарисовать кривую roc для оценки производительности системы распознавания лиц, я рассчитываю евклидово расстояние и косинусное сходство между двумя изображениями, и я хотел бы применить вычисление двух его параметров в базе данных (тестовая последовательность).как нарисовать кривую roc на этом изображении базы данных

и как я могу измерить производительность автоэнкодера?

этот код не работает:

predictions_prob = your_model.predict_proba(x_test)
false_positive_rate, recall, thresholds = roc_curve(y_test, predictions_prob[:,1])
roc_auc = auc(false_positive_rate, recall)
plt.plot(false_positive_rate, recall, 'g', label = 'AUC %s = %0.2f' % ('model name', roc_auc))
plt.plot([0,1], [0,1], 'r--')
plt.legend(loc = 'lower right')
plt.ylabel('Recall')
plt.xlabel('Fall-out')
plt.title('ROC Curve')

это предварительно обученные модели веса

, так что теперь у меня есть два массива y_true, если два грани похожи на '1' или если нет '0'

y_true [0 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0]

y_scoreМассив представления y_score

[0.43031937 0.09115553 0.00650781 0.02242869 0.38608587 0.09407699
 0.40521139 0.08062053 0.37445426 0.73493853 0.7103999  0.72978038
 0.66644344 0.63952136 0.61384821 0.58388719 0.64563826 0.7302449
 0.50854671 0.74351138 0.74457312 0.86807218 0.83802608 0.74165669
 0.74858481 0.76547028 0.73587325 0.78119443 0.59438175 0.74271324
 0.65287331 0.55672997 0.6840947  0.86698833 0.69892132 0.9039218
 0.73688647 0.88281097 0.65161654 0.6082072  0.60127196 0.59740826
 0.63763261 0.60536379 0.642178   0.61151108 0.62726742 0.61947313
 0.67193428 0.7865534  0.65491107 0.6640633  0.68394253 0.63343072
 0.79708609 0.78625438 0.70690271 0.75213048 0.76652744 0.85628764
 0.82893997 0.75122409 0.76786727 0.7644964  0.75824204 0.78366616
 0.65271395 0.75293976 0.72236988 0.56250972 0.72455084 0.9160955
 0.74614334 0.94117467 0.75922103 0.91618422]

когда я запускаю код, я получаю этот график:

plot

что я должен изменить метки баллов I 'm потерял любую помощь, оценит это.

Я не знаю, почему я получаю только 4 элемента в tpr и fpr и пороге

fpr [0. 0. 0. 1.]
tpr [0.  0.2 1.  1. ]
thresholds [1.99308544 0.99308544 0.90004301 0.        ]

1 Ответ

0 голосов
/ 13 февраля 2019

Предполагая, что y_test является массивом Numpy, содержащим 0 и 1, в котором 0 означает, что две грани не являются одинаковыми (отрицательными), 1 означает, что две грани одинаковы (положительными).

Такжепри условии, что вы используете verifyFace в прогнозе.Скажем, это вывод pred, который содержит расстояние между каждой парой.

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

Итак, есть обходной путь:

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

n_samples = 1000
pred = np.random.randn(n_samples)
y_test = np.random.randint(2, size=(n_samples,))

max_dist = max(pred)
pred = np.array([1-e/max_dist for e in pred])
fpr, tpr, thresholds = roc_curve(y_test, pred)
roc_auc = auc(fpr, tpr)
plt.figure()
lw = 2
plt.plot(fpr, tpr, color='darkorange',
         lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=lw, 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 example')
plt.legend(loc="lower right")
plt.show()

Ключевой концепцией является преобразование pred, чтобы оно выглядело как последовательность confidence.

Ссылка: Как использовать оценку прогноза при создании кривой ROC с помощью Scikit-Learn

Рабочая характеристика приемника (ROC)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...