ConvNetJS — это библиотека на JavaScript для построения и обучения нейронных сетей, включая сверточные сети и многослойные перцептроны. Помимо нейросетей, библиотека предоставляет инструменты для обучения классификаторов, таких как SVM (Support Vector Machine). SVM используется для разделения данных на классы с помощью оптимальной гиперплоскости.
Для использования SVM в ConvNetJS необходимо подготовить данные в виде объектов Vol (структура, содержащая вектор признаков):
let x = new convnetjs.Vol([feature1, feature2, feature3]);
let y = classLabel; // Целевой класс
Каждый экземпляр данных передается в обучающий алгоритм в виде пары
(x, y).
ConvNetJS реализует линейный SVM. Для его создания используется объект convnetjs.SVM с возможностью указания гиперпараметров:
let svm = new convnetjs.SVM({
l2: 0.01, // Коэффициент регуляризации L2
learning_rate: 0.01, // Скорость обучения
batch_size: 10 // Размер пакета для стохастического градиентного спуска
});
Ключевые параметры:
Процесс обучения реализуется методом train, который
принимает массив объектов Vol и соответствующих им меток классов:
for (let i = 0; i < trainingData.length; i++) {
svm.train(trainingData[i].x, trainingData[i].y);
}
Каждое обновление веса направлено на минимизацию функции потерь SVM:
[ L = ||w||^2 + C (0, 1 - y_i (w x_i))]
где:
l2).ConvNetJS использует стохастический градиентный спуск для оптимизации функции потерь.
После обучения SVM может предсказывать классы для новых объектов.
Метод predict возвращает числовой класс:
let predictedClass = svm.predict(new Vol([f1, f2, f3]));
Особенности:
predict вычисляет линейную комбинацию весов и
признаков.Для корректной работы SVM важно нормализовать признаки:
function normalizeFeatureArray(features) {
let mean = features.reduce((a,b) => a+b, 0) / features.length;
let std = Math.sqrt(features.reduce((a,b) => a + (b - mean) ** 2, 0) / features.length);
return features.map(f => (f - mean) / std);
}
Пояснение:
Оптимальные параметры SVM зависят от задачи и масштаба данных:
Практика показывает, что поиск оптимальных параметров методом перекрестной проверки повышает точность классификации.
Стандартный SVM в ConvNetJS является бинарным. Для многоклассовой классификации используется схема “один против всех”:
let svm = new convnetjs.SVM({l2: 0.01, learning_rate: 0.01, batch_size: 10});
// Обучение
for (let i = 0; i < trainingData.length; i++) {
svm.train(trainingData[i].x, trainingData[i].y);
}
// Предсказание
let testVol = new convnetjs.Vol([0.5, -1.2, 0.3]);
let predicted = svm.predict(testVol);
console.log("Класс:", predicted);
Этот пример демонстрирует прямое создание, обучение и прогнозирование с использованием SVM в ConvNetJS без дополнительных библиотек.
l2 и
learning_rate.SVM в ConvNetJS обеспечивает простую и быструю реализацию линейного классификатора, легко интегрируемого с другими компонентами библиотеки, такими как Vol и слои нейросетей, что делает его удобным инструментом для учебных и экспериментальных задач.