В машинном обучении корректная организация данных является фундаментом для построения надежных моделей. При работе с Keras.js на JavaScript, где модели обычно загружаются из Keras (Python) или TensorFlow.js, важным этапом является правильная разметка данных на обучающую, валидационную и тестовую выборки. Это обеспечивает адекватную оценку производительности модели и предотвращает переобучение.
Обучающая выборка (Training Set) Используется для фактического обучения модели. На этом наборе данные подаются на вход сети, и происходит оптимизация весов через обратное распространение ошибки. Объем обучающей выборки должен быть достаточным для того, чтобы сеть могла выявить закономерности, характерные для задачи. Обычно составляет 60–80% всех данных.
Валидационная выборка (Validation Set) Применяется для оценки модели в процессе обучения. Она не участвует в оптимизации весов, но позволяет контролировать переобучение. На основе результатов на валидационном наборе выбираются гиперпараметры: скорость обучения, количество слоев, регуляризация. Обычно 10–20% всех данных выделяются на валидацию.
Тестовая выборка (Test Set) Применяется только после завершения обучения и настройки модели. Тестовая выборка дает объективную оценку обобщающей способности модели на новых, ранее не виденных данных. Обычно составляет 10–20% исходного набора.
Случайное разбиение (Random Split) Происходит случайное распределение данных между выборками. Используется при отсутствии временной или другой структурной зависимости данных. В Keras.js данные можно подготовить заранее на стороне JavaScript или на сервере.
Стратифицированное разбиение (Stratified Split)
Необходимо, если данные имеют дисбаланс классов. Стратификация
гарантирует, что пропорции классов в каждой выборке сохраняются. В
JavaScript для этого можно использовать библиотеки наподобие
ml.js или написать кастомную функцию
распределения.
Разбиение по времени или последовательности (Time-based Split) Применяется для временных рядов или последовательных данных, где важно избегать утечки информации из будущего в прошлое. В этом случае первые N% данных идут на обучение, последующие M% на валидацию, и последние на тестирование.
Keras.js сам по себе не предоставляет функций для разбиения данных, так как он предназначен для запуска предобученных моделей в браузере или Node.js. Разбиение данных обычно выполняется на этапе подготовки данных на JavaScript. Пример разбиения массива объектов:
function splitData(data, trainRatio=0.7, valRatio=0.15) {
const shuffled = data.sort(() => 0.5 - Math.random());
const trainEnd = Math.floor(data.length * trainRatio);
const valEnd = Math.floor(data.length * (trainRatio + valRatio));
const trainData = shuffled.slice(0, trainEnd);
const valData = shuffled.slice(trainEnd, valEnd);
const testData = shuffled.slice(valEnd);
return { trainData, valData, testData };
}
Ключевой момент: перемешивание данных перед разбиением предотвращает смещение, особенно если исходный массив упорядочен.
После разбиения данные должны быть преобразованы в формат, понятный модели. Обычно это тензоры или массивы чисел:
import KerasJS from 'keras-js';
const model = new KerasJS.Model({
filepath: 'model.bin',
gpu: true
});
// Пример передачи данных в модель
const inputTensor = new Float32Array(inputData);
model.predict({ input: inputTensor })
.then(outputData => {
console.log('Результат предсказания:', outputData);
});
Важно: независимо от разбиения, входные данные должны иметь одинаковую форму, соответствующую архитектуре модели. Любые преобразования (нормализация, one-hot кодирование) необходимо применять одинаково к обучающей, валидационной и тестовой выборкам, чтобы не возникло несоответствия.
Проверка распределения классов в каждой выборке
function countClasses(data) {
return data.reduce((acc, item) => {
acc[item.label] = (acc[item.label] || 0) + 1;
return acc;
}, {});
}Визуальная проверка распределения значений Построение гистограмм или boxplot позволяет убедиться, что данные распределены равномерно между выборками.
Сохранение разбиения для воспроизводимости Использование фиксированного seed при перемешивании обеспечивает одинаковое разбиение при повторных запусках.
Разделение данных является критическим этапом подготовки. Ошибки на этом этапе могут привести к переоценке точности модели, неправильной настройке гиперпараметров и снижению обобщающей способности. В Keras.js, как и в любой JavaScript-реализации глубокого обучения, тщательная организация выборок обеспечивает стабильное и предсказуемое поведение модели.