2015-06-24 2 views
2

Dataset: https://archive.ics.uci.edu/ml/datasets/Chess+%28King-Rook+vs.+King-Pawn%29R | NA/NaN/Inf в вызове внешней функции | e1071 SVM

Код:

require("e1071") 

# Load the data into bank 
bank <- read.csv("~/R/SVM/kr-vs-kp.data") 
colnames(bank)[ncol(bank)] <- 'to.classify' 
bank$to.classify <- as.factor(bank$to.classify) 

# Divide the data into TRAIN and TEST sets 
index <- 1:nrow(bank) 
testIndex <- sample(index, trunc(length(index)/3)) 
testSet <- bank[testIndex,] 
trainSet <- bank[-testIndex,] 

# Learning sigmoid tuned nu-classification model 
svm.nu.tune.model.sigmoid <- best.svm(to.classify ~ ., data = trainSet, coef0 = c(0,1,10,20,30), gamma = c(0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1, 3, 10, 30), cost = c(1,3,10,30,100), nu = c(0.1,0.3,0.5,0.7,0.9), na.action = na.omit, kernel = 'sigmoid', type = 'nu-classification') 
print(svm.nu.tune.model.sigmoid) 

Ошибка:

Error in predict.svm(ret, xhold, decision.values = TRUE) : 
    NA/NaN/Inf in foreign function call (arg 8) 

алгоритм отлично работает на любой другой комбинации ядра и типа. Это единственная проблема.

ответ

0

Проблема заключается в том, что вы смешиваете параметры в одном и том же вызове. Если вы просто используете параметр nu с nu-классификацией (и параметр стоимости с C-классификацией в другом вызове), то он должен работать.

Например:

svm.nu.tune.model.sigmoid <- best.svm(to.classify ~ ., data = trainSet, nu = c(0.1,0.3,0.5,0.7,0.9), na.action = na.omit, kernel = 'sigmoid', type = 'nu-classification') 
+0

У других nu-классификаторов не было проблем с включением параметра стоимости, хотя я признаю, что забыл его удалить. Я удалил его и повторно запустил код, но проблема не устранена. 'svm.nu.tune.model.sigmoid <- best.svm (to.classify ~., Data = trainSet, coef0 = c (0,1,10,20,30), gamma = c (0,001, 0,003 , 0,01, 0,03, 0,1, 0,3, 1, 3, 10, 30), nu = c (0,1,0,3,0,5,0,7,0,9), na.action = na.omit, kernel = 'sigmoid', type = ' ню-классификации ') ' –

2

я, наконец, понял это.

Кажется, что для данного набора данных некоторые значения для ню и coef0 являются неосуществимыми, и вместо того, чтобы пропускать их он решает выбросить всю работу и крах вместо этого.

coef0 - по-видимому, значения от интервала 0 <= coef0 <= 1. Хотя эту информацию нигде не найти. Для чего-либо большего, чем 1, он просто падает с ошибкой NaN/Inf.

nu - для чего-то большего, чем 0,7 для набора данных kr-vs-kp, это приводит к ошибке «nu infeasible». Для разных меньших наборов данных разные значения (0 < x < 0.4) недопустимы.

Надеюсь, это поможет кому-то.

 Смежные вопросы

  • Нет связанных вопросов^_^