У меня большой набор данных, на котором я запускаю clusterSVM для двоичной классификации с использованием пакета SwarmSVM, который использует LibLinear для SVM.
Модель отлично работает на тренировочном наборе. Но когда я пытаюсь запустить прогноз на тестовом наборе, я получаю следующую ошибку:
Error in predict.LiblineaR(object$svm, tilde.newdata, ...) : dims of 'test' and 'train' differ
Я исследовал эту проблему в максимально возможной степени и не могу найти причину, по которой модель считает, что размеры комплектов для испытаний и поездов разные:
- наборы данных test и train имеют одинаковое количество столбцов, порядок столбцов, типы данных и имена столбцов
- в тестовом наборе или в наборе данных для обучения отсутствуют NA или отсутствующие данные
- и поезд, и тест были масштабированы. Фактически, данные поезда были сначала масштабированы, а затем тестовый набор был масштабирован на основе набора поездов
- класс теста и поезда одинаковы
- в тесте или поезде нет столбцов с постоянным значением (нет столбцов со стандартным отклонением, равным нулю)
Единственное, что сработало, это изменение соотношения тест / поезд с 10% -90% до 15% -85%.
Итак, я предполагаю, что причина ошибки связана со значениями столбцов, которые исчезают при добавлении новых строк для проверки. Но я не понимаю, как это возможно. данные довольно большие (около 2 миллионов строк). Таким образом, тест будет иметь около 200 000 строк с соотношением тест-поезд 10-90%. Не знаете, почему добавление дополнительных 100 000 будет иметь значение?
Я знаю, что это широкий / абстрактный вопрос, но я нигде не смог найти правильного объяснения этому.
Если это поможет, вот параметры, которые я использую для модели:
csvm_model <- clusterSVM(
x = train_x,
y = train_y,
type = 1,
cost = 0.005,
centers = 10000,
cluster.fun = cluster.fun,
cluster.predict = cluster.predict
)