19

traindata を使用して svm をトレーニングしています。(R の e1071 パッケージ)。以下は、私のデータに関する情報です。

> str(train)
'data.frame':   891 obs. of  10 variables:
$ survived: int  0 1 1 1 0 0 0 0 1 1 ...
$ pclass  : int  3 1 3 1 3 3 1 3 3 2 ...
$ name    : Factor w/ 15 levels "capt","col","countess",..: 12 13 9 13 12 12 12 8 13 13 
$ sex     : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
$ age     : num  22 38 26 35 35 ...
$ ticket  : Factor w/ 533 levels "110152","110413",..: 516 522 531 50 473 276 86 396 
$ fare    : num  7.25 71.28 7.92 53.1 8.05 ...
$ cabin   : Factor w/ 9 levels "a","b","c","d",..: 9 3 9 3 9 9 5 9 9 9 ...
$ embarked: Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ...
$ family  : int  1 1 0 1 0 0 0 4 2 1 ...

以下のように訓練します。

library(e1071)
model1 <- svm(survived~.,data=train, type="C-classification")

ここでは問題ありません。しかし、次のように予測すると:

pred <- predict(model1,test)

次のエラーが表示されます。

Error in newdata[, object$scaled, drop = FALSE] : 
(subscript) logical subscript too long

また、トレーニング データとテスト データの両方から「チケット」予測子を削除しようとしました。しかし、それでも同じエラーです。何が問題ですか?

4

6 に答える 6

21

「テスト」データセットの要因の 1 つでレベル数に違いがある可能性があります。

str(test) を実行し、因子変数が「トレーニング」データセット内の対応する変数と同じレベルであることを確認します。

つまり、以下の例はmy.test$fooに 4 つのレベルしかないことを示しています.....

str(my.train)
'data.frame':   554 obs. of  7 variables:
 ....
 $ foo: Factor w/ 5 levels "C","Q","S","X","Z": 2 2 4 3 4 4 4 4 4 4 ...

str(my.test)
'data.frame':   200 obs. of  7 variables:
 ...
 $ foo: Factor w/ 4 levels "C","Q","S","X": 3 3 3 3 1 3 3 3 3 3 ...
于 2013-06-27T02:35:51.747 に答える
2

おそらく、あなたのデータは良好で (テスト データに新しいレベルはありません)、小さなトリックが必要なだけで、予測に問題はありません。

test.df = rbind(train.df[1,],test.df)
test.df = test.df[-1,]

このトリックはR ランダム フォレストからのもので、新しいデータの予測子のタイプが一致しません。今日、私はこの問題に遭遇し、上記のトリックを使用して問題を解決しました。

于 2020-04-04T22:19:31.690 に答える
1

私もそのデータセットで遊んでいます。これはずっと前のことですが、できることの 1 つは、次のように、モデルに追加すると思われる列のみを明示的に含めることです。

fit <- svm(Survived~Pclass + Sex + Age + SibSp + Parch + Fare + Embarked, data=train)

これにより、関連データを持たない(チケット番号など)何も寄与しない列を削除することで、問題が解消されました。

于 2016-10-30T04:37:27.980 に答える
0

私のコードを解決したもう 1 つの考えられる問題は、いくつかの独立変数を因子にするのを忘れていたという事実でした。

于 2021-08-04T02:02:16.967 に答える