2012-12-17 13 views
8

私はおそらく、ここでは非常に単純な(そして愚かな)間違いをしていますが、私はそれを理解できません。私はKaggle(Digit Recognizer)からいくつかのデータを再生しており、いくつかの分類を行うために、CaretパッケージでSVMを使用しようとしています。私がラベル値を型数値として関数に差し込むだけでは、Caretのtrain関数はデフォルトに回帰しているようで、パフォーマンスはかなり悪いです。だから私が次に試したのは、それを関数factor()でファクタに変換し、SVM分類を試してみることです。ここで私はいくつかのダミーデータを生成して、キャレットに差し込み、いくつかのコードは次のとおりです。キャレットエラーを伴うSVM分類(基本)

library(caret) 
library(doMC) 
registerDoMC(cores = 4) 

ytrain <- factor(sample(0:9, 1000, replace=TRUE)) 
xtrain <- matrix(runif(252 * 1000,0 , 255), 1000, 252) 

preProcValues <- preProcess(xtrain, method = c("center", "scale")) 
transformerdxtrain <- predict(preProcValues, xtrain) 

fitControl <- trainControl(method = "repeatedcv", number = 10, repeats = 10) 
svmFit <- train(transformerdxtrain[1:10,], ytrain[1:10], method = "svmradial") 

私はこのエラーを取得する:

Error in kernelMult(kernelf(object), newdata, xmatrix(object)[[p]], coef(object)[[p]]) : 
    dims [product 20] do not match the length of object [0] 
In addition: Warning messages: 
1: In train.default(transformerdxtrain[1:10, ], ytrain[1:10], method = "svmradial") : 
    At least one of the class levels are not valid R variables names; This may cause errors if class probabilities are generated because the variables names will be converted to: X0, X1, X2, X3, X4, X5, X6, X7, X8, X9 
2: In nominalTrainWorkflow(dat = trainData, info = trainInfo, method = method, : 
    There were missing values in resampled performance measures. 

誰かが私が間違っているのを教えすることはできますか?ありがとうございました!

+0

エラーメッセージはかなり自明ですね。因子レベルを0,1、... 9以外のものと呼んでください。 – joran

+0

@ヨラン警告メッセージは、そうではありませんか? – agstudy

+0

@agstudyはい、ありがとうございます。それは確かに恥ずかしい警告(おっと!、私はエラーを意味する!)私の一部! :) – joran

答えて

2

あなたは10種類のクラスを持っていますが、train()では10件しか含まれていません。つまり、リサンプルすると、分類器の個々のインスタンスに10のクラスがすべて含まれることはありません。 train()は、これらの変化するカテゴリのSVMの結果を組み合わせることが困難である。

これは、ケースの数を増やしたり、クラスの数を減らしたり、別のクラシファイアを使用したりすることによって解決できます。

関連する問題