web-dev-qa-db-ja.com

rpartの予測方法(Rプログラミング)を使用したツリーの予測精度の計算

データセットにrpartを使用して決定木を構築しました。

次に、データをトレーニングデータセットとテストデータセットの2つの部分に分割しました。トレーニングデータを使用して、データセットのツリーが構築されました。作成したモデルに基づいて予測の精度を計算したいと思います。

私のコードを以下に示します。

_library(rpart)
#reading the data
data = read.table("source")
names(data) <- c("a", "b", "c", "d", "class")

#generating test and train data - Data selected randomly with a 80/20 split
trainIndex  <- sample(1:nrow(x), 0.8 * nrow(x))
train <- data[trainIndex,]
test <- data[-trainIndex,]

#tree construction based on information gain
tree = rpart(class ~ a + b + c + d, data = train, method = 'class', parms = list(split = "information"))
_

結果を実際の値のトレーニングおよびテストデータと比較することにより、モデルによって生成された予測の精度を計算したいのですが、そうしているときにエラーが発生します。

私のコードを以下に示します。

_t_pred = predict(tree,test,type="class")
t = test['class']
accuracy = sum(t_pred == t)/length(t)
print(accuracy)
_

次のようなエラーメッセージが表示されます-

T_pred == tのエラー:これらのタイプの比較は実装されていませんさらに:警告メッセージ: "=="の互換性のないメソッド( "Ops.factor"、 "Ops.data.frame")

T_predの型を確認したところ、整数型であることがわかりましたが、ドキュメント

https://stat.ethz.ch/R-manual/R-devel/library/rpart/html/predict.rpart.html

predict()メソッドはベクトルを返さなければならないと述べています。

変数の型がリストではなく整数である理由がわかりません。どこで間違いを犯しましたか?どうすれば修正できますか?

5
Arat254

最初に混同行列を計算してみてください。

confMat <- table(test$class,t_pred)

これで、正しい予測である行列の対角線の合計を行列の合計で割ることにより、精度を計算できます。

accuracy <- sum(diag(confMat))/sum(confMat)
8
mtoto

私の応答は@mtotoの応答と非常に似ていますが、もう少し単純です...それも役立つことを願っています。

mean(test$class == t_pred)
0
jgarces