предсказать R с помощью SVM

Я пытаюсь предсказать на R некоторые данные, используя svm для создания модели и прогнозирования

ниже я приложил некоторый код, надеюсь, объяснюсь

datos<-read.csv("Seguros.csv",sep = ";",dec='.',header=T)
muestra<-sample(nrow(datos),4400)
aprendizaje<-datos[muestra,]
datosPrec <- read.csv("SegurosNuevosVE150.csv", sep = ";", dec = ".", header = T)
modeloSig <- svm(Fraude ~ ., data = aprendizaje, kernel = "sigmoid")
modeloSig
predictFinal <- predict(modeloSig, datosPrec[, 16])

и я получаю эту ошибку

Ошибка в _2 _ (_ 3_, value = c ("MontoPagado", "Interes", "Plazo",: длина 'dimnames' [2] не равна размеру массива

Данные для обоих одинаковы, единственная разница - количество строк и то, что последний столбец называет "Fraude" вместо "Si" o "No" он говорит "NA" на SegurosNuevosVE150.csv ниже. Я приложил сводку, I надеялся, что объяснил себя

сводка (Seguros.csv)

MontoPagado Interes Plazo Типо Менсуалидад
Мин. : -3453 Мин. : -0,6448 Мин. : 64.0 Международный: 343 Мин. : 5003
1-й квартал: 2284315 1-й квартал: 17.0000 1-й квартал: 404.0 Национальный: 6070 1-й квартал: 12164
Медиана: 3831087 Медиана: 17,2500 Медиана: 444,3 Медиана: 17299
Среднее значение: 4585558 Среднее : 15.8877 Среднее: 438,4 Среднее: 23496, 3-й квартал: 5792869 3-й квартал: 17.7500 3-й квартал: 478,7 3-й квартал: 28939
Макс. : 49019276 Макс. : 18.7500 Макс. : 515,3 Макс. : 276296

MontoAsegurado TipoPago ModoPago Fiador Fiador2 OtroSeguro Record
мин. : 7803 A: 4158 Cajas: 607 №: 3278 №: 5527 №: 5310 R0: 5310
1-я четверть: 401439 B: 1817 № Definido: 450 Si: 3135 Si: 886 Si: 1103 R2: 530
Медиана : 613561 C: 438 Tarjeta: 5356 R1: 495
Среднее значение: 764561 R5: 40
3-я четверть: 916591 R6: 26
Макс. : 7734773 R7: 5
(Другое): 7
Edad EstadoCivil Salario Fraude
Мин. : 21.00 Развод: 229 мин. : 0 №: 6146
1-й квартал: 33,50 NoAplica: 25 1-й кварт .: 0 Si: 267
Медиана: 35,50 Soltero: 5895 Медиана: 0
Среднее: 36,58 Объединение: 256 Среднее: 4126
3-я четверть: 38,50 Viudo: 8 3-я четверть: 6404
Макс. : 57.00 Макс. : 104185

сводка (SegurosNuevosVE150.csv)

MontoPagado Interes Plazo Tipo Mensualidad MontoAsegurado
мин. : 613 мин. : -0,50 мин. : 302.7 Международный: 6 мин. : 5029 мин. : 8470
1-й квартал: 2678695 1-й квартал: 17,25 1-й квартал: 431,3 Национальный: 144 1-й квартал: 12122 1-й квартал: 462045
Медиана: 3987711 Медиана: 17,25 Медиана: 434,0 Медиана: 17533 Медиана: 639318
Среднее значение: 4915943 Среднее значение: 16,40 Среднее значение: 439,9 Среднее значение: 24432 Среднее значение: 806379
3-й квартал: 6780419 3-й квартал: 17,62 3-й квартал: 474,7 3-й квартал: 29269 3-й квартал: 1091095
Максимум. : 28647806 Макс. : 17,75 Макс. : 492,7 Макс. : 148886 Макс. : 4552955
TipoPago ModoPago Fiador Fiador2 OtroSeguro Record Edad EstadoCivil A: 100 Cajas: 9 №: 82 №: 127 №: 130 R0: 130 мин. : 31.00 Divorciado: 5
B: 36 No Definido: 44 Si: 68 Si: 23 Si: 20 R1: 9 1-я четверть: 33,50 Soltero: 140
C: 14 Tarjeta: 97 R2: 11 Медиана: 35,50 Union : 4
Среднее значение: 36,78 Viudo: 1
3-е кв.: 39,00
Макс. : 57.00
Salario Fraude
Мин. : 0 Режим: логический
1-й квартал: 0 НС: 150
Медиана: 3806
Среднее: 5198
3-й квартал: 7432
Макс. : 82010


person Jorge Madrigal    schedule 06.06.2015    source источник
comment
Возможно, вам стоит попробовать следующее: stackoverflow.com/questions/15084803/   -  person andresram1    schedule 07.06.2015
comment
Спасибо @ andresram1, я пробовал это, но не сработало, я пытаюсь сделать прогноз на основе данных, и, используя то, что рекомендуется, преобразует все в char, которое не работает, чтобы предсказать, я думаю, проблема здесь в том, что SegurosNuevosVE150 .csv имеет столбец Fraude как логический для всех строк в NA, и первый имеет этот столбец в Factors с 2 уровнями Si o Нет, но мне нужно изменить NA на SegurosNuevosVE150.csv на Si o Нет, потому что это то, что я предсказываю   -  person Jorge Madrigal    schedule 07.06.2015


Ответы (1)


Ваша проблема просто в вашей последней строке. Аргумент, который вы передаете для 'newdata', указывает только 1 столбец вашего фрейма данных, когда вам нужно указать его полностью.

modeloSig <- svm(Fraude ~ ., data = aprendizaje, kernel = "sigmoid")
predictFinal <- predict(modeloSig, newdata=datosPrec) #changed datosPrec
person Jason    schedule 07.06.2015
comment
Спасибо @Jason, который, кажется, делает что-то другое, но теперь не работает Я получаю эту ошибку Ошибка в newdata [, object $ scaled, drop = FALSE]: (нижний индекс) слишком длинный логический нижний индекс - person Jorge Madrigal; 07.06.2015
comment
Это, вероятно, означает, что одна из категориальных переменных в вашем newdata наборе данных отсутствует в наборе обучающих данных. Убедитесь, что они в одном формате. - person Jason; 07.06.2015
comment
это проблема в обучении столбца Fraude - фактор с двумя уровнями, в то время как другой этот столбец Fraude полон NA, но это переменная, которую мне нужно предсказать, чтобы - person Jorge Madrigal; 07.06.2015
comment
Проблема не в этом. Проблема в том, что одна из переменных, которые вы использовали в своей модели (не зависимая переменная), имеет больше уровней в новом наборе данных, чем в обучающем. Можете ли вы запустить str(data) для обоих наборов данных? Бьюсь об заклад, вы сможете это сразу увидеть. - person Jason; 07.06.2015