В машинном обучении и нейронных сетях основными инструментами оценки качества классификации являются метрики precision, recall и F1-score. Эти метрики особенно важны при работе с несбалансированными данными, когда обычная точность (accuracy) может давать вводящие в заблуждение результаты.
Precision измеряет долю корректно предсказанных положительных результатов среди всех объектов, помеченных моделью как положительные:
[ = ]
где:
Высокий precision показывает, что модель редко делает ложноположительные ошибки, что важно, например, при классификации спама или выявлении заболеваний, когда ложноположительные срабатывания могут быть критичными.
Recall измеряет долю правильно предсказанных положительных объектов среди всех реальных положительных объектов:
[ = ]
где:
Высокий recall необходим, когда пропуск положительных объектов недопустим, например, при диагностике болезней или детекции мошенничества. Низкий recall указывает на то, что модель упускает значительное количество положительных примеров.
F1-score является гармоническим средним между precision и recall, объединяя обе метрики в одну, что позволяет оценивать баланс между ложноположительными и ложноотрицательными срабатываниями:
[ F1 = 2 ]
F1 особенно полезен при несбалансированных классах, когда высокая точность может сопровождаться низкой полнотой и наоборот. Этот показатель помогает сравнивать модели, когда требуется компромисс между точностью и полнотой.
Brain.js — это библиотека для создания нейронных сетей на JavaScript.
Она предоставляет классы, такие как NeuralNetwork и
NeuralNetworkGPU, для обучения моделей, однако встроенных
средств для вычисления precision, recall и F1 нет. Метрики необходимо
реализовывать самостоятельно, используя массивы предсказаний и реальных
значений.
Пример вычисления метрик:
function calculateMetrics(predictions, labels) {
let TP = 0, FP = 0, FN = 0;
for (let i = 0; i < predictions.length; i++) {
if (predictions[i] === 1 && labels[i] === 1) TP++;
if (predictions[i] === 1 && labels[i] === 0) FP++;
if (predictions[i] === 0 && labels[i] === 1) FN++;
}
const precision = TP / (TP + FP || 1);
const recall = TP / (TP + FN || 1);
const f1 = 2 * (precision * recall) / (precision + recall || 1);
return { precision, recall, f1 };
}
В этом примере:
predictions — массив с предсказанными значениями (0 или
1);labels — массив с фактическими значениями.Использование || 1 предотвращает деление на ноль в
случае отсутствия TP, FP или FN.
Для задач бинарной классификации, например, определения спама, анализа отзывов или детекции аномалий, метрики precision, recall и F1 позволяют объективно оценивать качество модели. В Brain.js после обучения сети:
const net = new brain.NeuralNetwork();
net.train(trainingData);
const predictions = testData.map(item => net.run(item.input) > 0.5 ? 1 : 0);
const labels = testData.map(item => item.output);
const metrics = calculateMetrics(predictions, labels);
console.log(metrics);
Такой подход обеспечивает прозрачную оценку качества модели и помогает выявлять случаи, когда высокая точность скрывает низкую полноту или наоборот.
В практических задачах часто приходится регулировать компромисс между precision и recall. Например:
Использование F1-score позволяет оценивать такой баланс и сравнивать модели, ориентируясь на общий показатель эффективности.
Метрики precision, recall и F1 являются стандартными инструментами анализа качества классификации и их внедрение в проекты с Brain.js позволяет создавать более надёжные и проверяемые нейросетевые решения.