2015-01-09 2 views
3

Я новичок в R и пытаюсь извлечь данные из текста, а затем примените его в SVM для классификации. Вот код:Ошибка от SVM в R

train<-read.table("training.txt") 
train[which(train=="?",arr.ind=TRUE)]<-NA 
train=unique(train) 
y=train[,length(train)] 

classifier<-svm(y~.,data=train[,-length(train)],scale=F) 
classifier<-svm(x=train[,-length(train)],y=factor(y),scale=F) 

Стараюсь 2 различными способами вызывать SVM, для 1-ый (svm(y~.,data=train[,-length(train)],scale=F)) кажется нормально, но второй из них имеет проблемы, она сообщила:

Error in svm.default(x = train[, length(train)], y = factor(y), scale = F) : 
    NA/NaN/Inf in foreign function call (arg 1) 
In addition: Warning message: 
In svm.default(x = train[, length(train)], y = factor(y), scale = F) : 
    NAs introduced by coercion 

Вот образец training.txt, последний столбец является целевой

39,State-gov,77516,Bachelors,13,Never-married,Adm-clerical,Not-in-family,White,Male,2174,0,40,United-States,0 
50,Self-emp-not-inc,83311,Bachelors,13,Married-civ-spouse,Exec-managerial,Husband,White,Male,0,0,13,United-States,0 
38,Private,215646,HS-grad,9,Divorced,Handlers-cleaners,Not-in-family,White,Male,0,0,40,United-States,0 
53,Private,234721,11th,7,Married-civ-spouse,Handlers-cleaners,Husband,Black,Male,0,0,40,United-States,0 
28,Private,338409,Bachelors,13,Married-civ-spouse,Prof-specialty,Wife,Black,Female,0,0,40,Cuba,0 
37,Private,284582,Masters,14,Married-civ-spouse,Exec-managerial,Wife,White,Female,0,0,40,United-States,0 
49,Private,160187,9th,5,Married-spouse-absent,Other-service,Not-in-family,Black,Female,0,0,16,Jamaica,0 
52,Self-emp-not-inc,209642,HS-grad,9,Married-civ-spouse,Exec-managerial,Husband,White,Male,0,0,45,United-States,1 
31,Private,45781,Masters,14,Never-married,Prof-specialty,Not-in-family,White,Female,14084,0,50,United-States,1 
42,Private,159449,Bachelors,13,Married-civ-spouse,Exec-managerial,Husband,White,Male,5178,0,40,United-States,1 
37,Private,280464,Some-college,10,Married-civ-spouse,Exec-managerial,Husband,Black,Male,0,0,80,United-States,1 
30,State-gov,141297,Bachelors,13,Married-civ-spouse,Prof-specialty,Husband,Asian-Pac-Islander,Male,0,0,40,India,1 
23,Private,122272,Bachelors,13,Never-married,Adm-clerical,Own-child,White,Female,0,0,30,United-States,0 
32,Private,205019,Assoc-acdm,12,Never-married,Sales,Not-in-family,Black,Male,0,0,50,United-States,0 
40,Private,121772,Assoc-voc,11,Married-civ-spouse,Craft-repair,Husband,Asian-Pac-Islander,Male,0,0,40,NA,1 

Любая идея об этом? заранее спасибо!

ответ

4

Из документации:

Для x аргумента:

a data matrix, a vector, or a sparse matrix (object of class Matrix 
provided by the Matrix package,or of class matrix.csr provided by the 
SparseM package, or of class simple_triplet_matrix provided by the slam package). 

Для y аргумента:

a response vector with one label for each row/component of x. Can be 
either a factor (for classification tasks) or a numeric vector (for regression). 

Когда вы набираете: x=train[,-length(train)] во второй функции вы практически с использованием data.frame который не поддерживается и сбой.

svm функция работает с цифровой матрицей только

library(e1071) 
train[which(train=="?",arr.ind=TRUE)]<-NA 
train=unique(train) 
y=factor(train[,length(train)]) 
train <- data.frame(lapply(train,as.numeric)) #convert to numeric. factors are integer fields anyway behind the scenes. 

train <- as.matrix(train[-length(train)]) 

classifier<-svm(x= train ,y=y,scale=F) 

Выход:

> summary(classifier) 

Call: 
svm.default(x = train, y = y, scale = F) 


Parameters: 
    SVM-Type: C-classification 
SVM-Kernel: radial 
     cost: 1 
     gamma: 0.07142857 

Number of Support Vectors: 14 

(9 5) 


Number of Classes: 2 

Levels: 
0 1 
+0

HI, спасибо за Ваш ответ. Я стараюсь, но все равно получаю тот же самый err> классификатор <-svm (x = as.matrix (train [, - length (train)]), y = factor (y), scale = F) Ошибка в svm.default (x = as.matrix (train [, -length (train)]), y = factor (y),: NA/NaN/Inf в вызове внешней функции (arg 1) Дополнительно: Предупреждающее сообщение: В svm .default (x = as.matrix (train [, -length (train)]), y = factor (y),: NA, введенные принуждением – Lei

+0

Вам также нужно преобразовать поля в числовые. – LyzandeR

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