Как правильно установить параметры LIBSVM.scale () с помощью Java-оболочки Android LIBSVM - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь использовать 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 пытается сравнить и масштабировать соответствующие атрибуты в наборе данных относительно друг друга, поэтому он получает ошибку, если в наборе есть только один объект данных. Это правильно? И если так, что я мог сделать, чтобы масштабировать вновь сгенерированную точку данных относительно набора обучающих данных, а не только для себя? Можно ли вручную установить параметры масштабирования, которые позволили бы мне масштабировать каждый элемент данных с одинаковыми «ссылками» или настройками? Заранее спасибо

1 Ответ

0 голосов
/ 11 января 2019

В случае, если кто-то застрянет на одном и том же вопросе: Мое решение состояло в том, чтобы добавить каждую новую точку данных в конец копии моего обучающего набора данных, масштабировать копию с помощью AndroidLibSvm.scale () и извлечь теперь правильно масштабированный элемент данных из выходного файла. Работает нормально и намного лучше, чем любое жестко закодированное решение.

...