Я пытаюсь использовать LIBSVM-упаковщик yctung для Android для классификации 262-мерных точек данных на Android. Мне удалось обучить классификатор на обучающем наборе данных с ~ 240 точками данных и успешно протестировать его на 15-точечном наборе данных. Оба набора данных были масштабированы, просто вызвав svm.scale, как подсказывает yctung:
svm.scale(appFolderPath + "trainingdata", appFolderPath + "trainingdata_scaled");
svm.train("-t 0 "/* svm kernel */ + appFolderPath + "trainingdata_scaled " + appFolderPath + "model");
svm.scale(appFolderPath + "testdata", appFolderPath + "testdata_scaled");
svm.predict(appFolderPath + "testdata_scaled " + appFolderPath + "model " + appFolderPath + "result");
Я получил довольно хорошие результаты, поэтому я попробовал модель на одной точке данных, сгенерированной во время выполнения. Конечно, мне нужно было масштабировать данные, прежде чем я смог их классифицировать (поэтому «прогноз» - это файл, содержащий только одну точку данных с 262 атрибутами):
svm.scale(appFolderPath + "predict", appFolderPath + "predict_scaled");
svm.predict(appFolderPath + "predict_scaled " + appFolderPath + "model " + appFolderPath + "predicted");
Но вместо масштабированной точки данных svm.scale возвращает только «1» и ничего больше.
Я думаю, что это может быть потому, что .scale пытается сравнить и масштабировать соответствующие атрибуты в наборе данных относительно друг друга, поэтому он получает ошибку, если в наборе есть только один объект данных.
Это правильно?
И если так, что я мог сделать, чтобы масштабировать вновь сгенерированную точку данных относительно набора обучающих данных, а не только для себя? Можно ли вручную установить параметры масштабирования, которые позволили бы мне масштабировать каждый элемент данных с одинаковыми «ссылками» или настройками?
Заранее спасибо