Accuracy представляет собой долю правильно предсказанных классов среди всех наблюдений. Формально:
[ = ]
где:
Accuracy удобна для задач с балансированными классами, но может быть обманчива при сильном дисбалансе классов. Например, если положительных примеров всего 1%, а модель всегда предсказывает отрицательный класс, accuracy будет 99%, что не отражает реальной способности модели выявлять положительные случаи.
В Keras.js метрика accuracy подключается через:
const model = new KerasJS.Model({
filepaths: {
model: 'model.json',
weights: 'model_weights.buf'
},
gpu: true
});
const outputData = await model.predict({ input: inputData });
Для вычисления accuracy вручную:
function computeAccuracy(predictions, labels) {
let correct = 0;
for (let i = 0; i < predictions.length; i++) {
if (predictions[i] === labels[i]) correct++;
}
return correct / predictions.length;
}
Precision измеряет долю верных положительных предсказаний среди всех предсказанных положительных случаев:
[ = ]
Precision особенно важна, когда стоимость ложноположительных предсказаний высока, например, при диагностике заболевания, где ложное срабатывание может привести к ненужному вмешательству. Высокий precision означает, что среди всех предсказанных положительных примеров большая часть действительно положительна.
Пример вычисления в Keras.js:
function computePrecision(predictions, labels) {
let TP = 0, FP = 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++;
}
return TP / (TP + FP);
}
Recall показывает, какую долю всех реальных положительных примеров модель смогла правильно идентифицировать:
[ = ]
Recall критичен в сценариях, где пропуск положительного случая дорого обходится, например, выявление мошеннических транзакций. Высокий recall гарантирует, что большинство реальных положительных примеров будет обнаружено, даже если при этом увеличивается количество ложноположительных предсказаний.
В Keras.js можно реализовать расчет recall следующим образом:
function computeRecall(predictions, labels) {
let TP = 0, FN = 0;
for (let i = 0; i < predictions.length; i++) {
if (predictions[i] === 1 && labels[i] === 1) TP++;
if (predictions[i] === 0 && labels[i] === 1) FN++;
}
return TP / (TP + FN);
}
AUC измеряет площадь под кривой ROC (Receiver Operating Characteristic), которая строится по зависимостям TPR (True Positive Rate) и FPR (False Positive Rate) при различных порогах классификации:
[ = , = ]
AUC отражает способность модели различать положительные и отрицательные классы. Значение AUC близкое к 1 указывает на отличную классификацию, 0.5 — случайный выбор, меньше 0.5 — модель предсказывает хуже случайной.
Для вычисления AUC в Javascript можно использовать библиотеку
ml-metrics или реализовать вручную:
function computeAUC(predictions, labels) {
// Сортировка по вероятностям
const sorted = predictions.map((p, i) => ({prob: p, label: labels[i]}))
.sort((a, b) => b.prob - a.prob);
let TP = 0, FP = 0, TP_prev = 0, FP_prev = 0;
let auc = 0;
const P = labels.filter(l => l === 1).length;
const N = labels.filter(l => l === 0).length;
for (const item of sorted) {
if (item.label === 1) TP++;
else FP++;
auc += (FP - FP_prev) * (TP + TP_prev) / 2;
TP_prev = TP;
FP_prev = FP;
}
return auc / (P * N);
}
Совместное использование precision, recall и AUC позволяет комплексно оценить эффективность модели и выбрать оптимальные пороговые значения в задачах классификации.
Keras.js работает с готовыми моделями, обученными в Python Keras, и позволяет запускать предсказания на фронтенде. Метрики качества обычно вычисляются после получения выходных данных модели:
const inputData = new Float32Array([...]); // данные для предсказания
const outputData = await model.predict({ input: inputData });
// бинарные предсказания
const predictions = Array.from(outputData).map(v => v > 0.5 ? 1 : 0);
const acc = computeAccuracy(predictions, labels);
const prec = computePrecision(predictions, labels);
const rec = computeRecall(predictions, labels);
const auc = computeAUC(outputData, labels);
Такой подход позволяет анализировать качество модели в браузере или Node.js, без необходимости повторного обучения, используя метрики, критичные для конкретной задачи.