web-dev-qa-db-ja.com

混同マトリックスのエラー:データと参照因子は同じレベル数でなければなりません

Rキャレットで線形回帰モデルをトレーニングしました。私は今、混同マトリックスを生成し、次のエラーを取得しようとしています:

ConfusionMatrix.default(pred、testing $ Final)のエラー:データと参照因子は同じレベル数でなければなりません

EnglishMarks <- read.csv("E:/Subject Wise Data/EnglishMarks.csv", 
header=TRUE)
inTrain<-createDataPartition(y=EnglishMarks$Final,p=0.7,list=FALSE)
training<-EnglishMarks[inTrain,]
testing<-EnglishMarks[-inTrain,]
predictionsTree <- predict(treeFit, testdata)
confusionMatrix(predictionsTree, testdata$catgeory)
modFit<-train(Final~UT1+UT2+HalfYearly+UT3+UT4,method="lm",data=training)
pred<-format(round(predict(modFit,testing)))              
confusionMatrix(pred,testing$Final)

混同マトリックスの生成時にエラーが発生します。レベルは両方のオブジェクトで同じです。問題が何なのかわかりません。それらの構造とレベルを以下に示します。それらは同じでなければなりません。助けてくれれば大歓迎です!

> str(pred)
chr [1:148] "85" "84" "87" "65" "88" "84" "82" "84" "65" "78" "78" "88" "85"  
"86" "77" ...
> str(testing$Final)
int [1:148] 88 85 86 70 85 85 79 85 62 77 ...

> levels(pred)
NULL
> levels(testing$Final)
NULL
14
abcd

table(pred)およびtable(testing$Final)を実行します。テストセットには、予測されない(つまり、predに存在しない)番号が少なくとも1つあることがわかります。これが、「レベルの数が異なる」理由です。この問題を回避するためのカスタムメイドの関数の例があります here

しかし、私はこのトリックがうまく機能することがわかりました:

table(factor(pred, levels=min(test):max(test)), 
      factor(test, levels=min(test):max(test)))

関数とまったく同じ混同行列が得られるはずです。

8
nayriz
confusionMatrix(pred,testing$Final)

混同マトリックスを作成しようとするときは常に、真の値と予測値の両方が因子データ型であることを確認してください。

ここでは、predとtesting$Finalの両方がfactor型でなければなりません。レベルをチェックする代わりに、両方の変数のタイプをチェックし、そうでない場合はファクターに変換します。

ここで、testing$finalint型です。ファクターに変換してから、混同マトリックスを作成します。

5
sandeep patil

次のようなものが私にとってはうまくいくようです。この考え方は、@ nayrizの考え方に似ています。

confusionMatrix(
  factor(pred, levels = 1:148),
  factor(testing$Final, levels = 1:148)
)

重要なのは、因子レベルが一致することを確認することです。

3
David C.

同じ問題がありました。データ引数が期待どおりに因子としてキャストされなかったために起こったと思います。試してください:

confusionMatrix(pred,as.factor(testing$Final))

それが役に立てば幸い

0
Cenk ŞİMŞEK

回帰を使用しており、混同マトリックスを生成しようとしています。混同マトリックスは分類タスクに使用されると思います。通常、人々はR ^ 2およびRMSEメトリックを使用します。

0
user4959