При работе с библиотекой ml5.js критически важным этапом является корректное разделение данных на обучающую (training) и тестовую (testing) выборки. Этот процесс позволяет оценить способность модели обобщать информацию, избегая переобучения (overfitting). Ml5.js, построенная на базе TensorFlow.js, обеспечивает гибкий интерфейс для работы с данными, включая автоматическую и ручную разбивку выборок.
Ml5.js позволяет вручную разделить массив данных. Например, при
наличии массивов features и labels можно
использовать метод:
const trainSize = Math.floor(features.length * 0.8);
const trainFeatures = features.slice(0, trainSize);
const trainLabels = labels.slice(0, trainSize);
const testFeatures = features.slice(trainSize);
const testLabels = labels.slice(trainSize);
trainSize определяется как процент данных для обучения
(обычно 70–80%).slice создает новые массивы для обучения и
тестирования.Для уменьшения риска смещения данных важно перемешать массивы перед разделением:
function shuffleArrays(features, labels) {
for (let i = features.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[features[i], features[j]] = [features[j], features[i]];
[labels[i], labels[j]] = [labels[j], labels[i]];
}
}
shuffleArrays(features, labels);
После перемешивания можно применять тот же метод slice
для разбиения на обучающую и тестовую выборки. Это особенно важно при
работе с данными, где порядок может влиять на обучение модели.
Некоторые модели ml5.js, например ml5.neuralNetwork,
предоставляют встроенные методы для разделения данных. При создании
нейронной сети можно передавать объект конфигурации с параметром
task и использовать методы addData() и
normalizeData() для подготовки:
const nn = ml5.neuralNetwork({
task: 'classification',
debug: true
});
for (let i = 0; i < features.length; i++) {
nn.addData(features[i], labels[i]);
}
nn.normalizeData();
nn.train({ epochs: 50, batchSize: 16 }, finishedTraining);
function finishedTraining() {
nn.testData({ inputs: testFeatures, targets: testLabels }, (err, results) => {
console.log('Точность на тестовой выборке:', results);
});
}
В этом подходе nn.testData позволяет
передать отдельные тестовые данные, а
normalizeData гарантирует, что значения
признаков находятся в корректном диапазоне, что важно для стабильного
обучения модели.
normalizeData().Разбиение на обучающую и тестовую выборки является фундаментом для построения устойчивых моделей в ml5.js. Правильная подготовка данных позволяет не только повысить точность, но и оценить реальную способность модели работать с новыми, ранее невиданными данными.