私が懸念しているのは、nnetを訓練すると、そのクラスは型因子ですが、予測をすると、chrが返されます。nnetからの予測は文字であり因子ではありません
私はこの例を別の投稿から取りました。
library(nnet)
library(C50)
library(caret)
attach(iris)
set.seed(3456)
trainIndex <- createDataPartition(iris$Species, p = .8,
list = FALSE,
times = 1)
irisTrain <- iris[ trainIndex,]
irisTest <- iris[-trainIndex,]
irispred <- nnet(Species ~ ., data=irisTrain, size=10)
predicted <- predict(irispred,irisTest,type="class")
と
> str(irisTrain)
'data.frame': 120 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.6 5 5.4 5 4.4 4.9 5.4 4.8 ...
$ Sepal.Width : num 3.5 3 3.1 3.6 3.9 3.4 2.9 3.1 3.7 3 ...
$ Petal.Length: num 1.4 1.4 1.5 1.4 1.7 1.5 1.4 1.5 1.5 1.4 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.4 0.2 0.2 0.1 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
> str(irisTest)
'data.frame': 30 obs. of 5 variables:
$ Sepal.Length: num 4.7 4.6 4.8 4.3 5.4 4.6 5 5 4.6 5.3 ...
$ Sepal.Width : num 3.2 3.4 3.4 3 3.4 3.6 3.5 3.5 3.2 3.7 ...
$ Petal.Length: num 1.3 1.4 1.6 1.1 1.7 1 1.3 1.6 1.4 1.5 ...
$ Petal.Width : num 0.2 0.3 0.2 0.1 0.2 0.2 0.3 0.6 0.2 0.2 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
ようトレーニングおよびテストデータセット種における要因であるが、予測の
str(predicted)
chr [1:30] "setosa" "setosa" "setosa" "setosa" "setosa" ...
結果が文字です。私は予測の出力のために一貫性のある、ベースの要因、形式を好むだろう
> irispred <- C5.0(Species ~ ., data=irisTrain)
> predicted <- predict(irispred,irisTest,type="class")
> str(predicted)
Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 2 1 1 ...
、私は、例えばC50を、他のデータ・マイニング・パッケージを使用しています、そして、彼らは予測からの要素を返します。 nnetの場合の予測の文字出力を要因に変換することは、すべてのレベルが文字変数として存在するとは保証できないため、機能しません。たとえば、私の650件のケースでは、一意のレベルを持つケースが1つあり、これはテストデータセットに含まれていることもありますが、時にはそうではない場合もありますが、テストデータに含まれていなくても、
ありがとうございました。
ありがとう、ニック、これは動作するようです。 –