アプリ版:「スタンプのみでお礼する」機能のリリースについて

Rでnnetを用いて回帰分析を実装しました。教師データを用いて実装しました。この結果を用いて、テストデータの回帰分析を行いたいのですが、実施方法を教えてほしい。実装はCaretを用いました。
nnetがうまく使えないので、GXboostを考えております。GXboost実装後テストデータの回帰分析の方法もお教えいただければ幸いです。

質問者からの補足コメント

  • 非線形回帰の可能性を検討しています。今あるデータ群があり、A群とします。A群を一つのパラメター(重さ、長さ、温度等)、例えば標準状態(測定0)でデータを測定します。次の測定(測定1)では室温がやや下がり。比熱の関係からA群のデータは全体に低く、ばらつきが大きく成りました。A群事態変化していないので、次の測定状態(測定1)が再現性があるのであれば、そのデータからA群の標準状態のデータを回帰できないかを検討しようとしております。ご意見を伺うことができれば幸いです。よろしくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/12/27 23:40
  • 複数のデータから成るA群のデータがあり、そのデータ分布はわかっています。いま測定機器を変えたり、温度が異なる状態で測定するとデータの分布が異なります。温度や測定機器は再現性があるので、これらの条件で測定した結果から、A群の元のデータ分布のままか異なっているか確認したい。nnetは分離器と理解していましたが、R Caretのを調べている中で(回帰問題)項目で、nnetが紹介されており、チューニングパラメータのlinout がTRUE:回帰、FALSE:分類と紹介されていました。装置間等の要因の違いを補正できないか検討していました。データ群とデータ群の回帰問題なので線形回帰では困難なのではと考えた次第です。よろしくお願いします。

      補足日時:2022/12/28 13:13
  • うーん・・・

    すみません。「実装したスクリプトと、テストケースで予測が出来ない箇所のエラーメッセージ」、まだこのレベルにまで至っていません。
    y_train(標準のデータ群)を目的変数とし、x_train(標準のデータ群を測定条件異なる条件で測定した結果)を説明変数として、nnetを用いて実装してtrain_nnetを得ました。x_trainと同じ条件で新たに生じたデータがあり、これをx_dataとして、train_nnetをもちいて。x_dataの目的変数(標準状態のデータ)を算出したい。このスクリプトの書き方がわからいという話です。分類問題であればpredict()を用いた算出方法がたくさん紹介されていますが、回帰問題についてに記述がわかりません。
    よろしくお願いします。

      補足日時:2022/12/29 14:25

A 回答 (5件)

添付のスクリプトは、先に示したmtcarsのデータでやった回帰と同じことをnnetでやっています。



ただし、全データからランダムに20個だけ選んで訓練データとし、その後、その他のデータを含めて予測し、プロットしています。訓練データは赤く着色しています。

このスクリプトをctrl+Vで、Rコンソールに何度も貼り付けて実行してみて下さい。毎回訓練データが変わりますが、それに応じて回帰結果も変わります。データによっては芳しくない結果になります。
(最初の質問は、これに関する質問かと思いましたよ)

nnetやXGBoostは所詮分類器なので、たまにはうまく回帰してくれますが、多くの場合、上下限値に張り付きます。

他の回帰方法を検討した方が良いですよ。


library(nnet)

# データ準備
index <- sample(1:nrow(mtcars), 20)
train <- mtcars[index, ]
test <- mtcars

# 訓練データで回帰
result <- nnet(mpg ~ ., data = train, size = 10, decay=0.001, linout = TRUE)

# 予測
prediction <- predict(result, test, type = "raw")

# プロット
plot(test$mpg, prediction)
points(train$mpg, prediction[index, ], pch = 20, col = 2)
    • good
    • 0

実装したスクリプトと、テストケースで予測が出来ない箇所のエラーメッセージを見ないと、あるいは結果がこんな期待外れな感じになってしまうというのを見ないと、何がまずいのかコメントできませんよ。

    • good
    • 0

mtcarsは、説明変数がランク落ちしていますので、回帰の事例としては不適切でしたね。

スミマセン。

> det(cor(mtcars[, 2:11]))
[1] 1.570703e-06

相関係数行列の行列式の値が、ほぼ0です。
これでは、回帰係数が誤っている可能性が高いです。
何を言っているか分からなければ、良いですが・・・。
    • good
    • 0

おっしゃっていることが良く分かりません。

データ構造は重回帰分析のデータ構造と同じで、ただ非線形の回帰をやりたいということですか?

nnetは分類器なので、それぞれの出力層には0~1の確率が出てきます。それをどうやって回帰に使おうとしたのですか?

どういうスクリプトを書いたら、どのようなエラーが出たのですか?

Rの組み込みデータmtcarsなどを使って示してみて下さい。

例えば、線形回帰なら以下のようになりますよね。
これをどう変えたいのですか?

x <- mtcars

result <- lm(mpg ~ ., data = x)
yhat <- predict(result, x)
plot(yhat, x$mpg, pch = 16) # 重相関プロット
abline(lm(x$mpg ~ yhat))
    • good
    • 0

下記はirisのデータを使って、60%を教師にして、残り40%を予測したものです。




library(nnet)

xtr <- rbind(iris[1:30, ], iris[51:80, ], iris[101:130, ])
xpr <- rbind(iris[31:50, ], iris[81:100, ], iris[131:150, ])

result <- nnet(as.factor(Species) ~ ., data = xtr, size = 6, linout = FALSE)
prob <- predict(result, xpr)
prob



predictがうまく行かないのは、xprの変数名が一致していないとか?

出ているエラーメッセージを示してみては?

ところで、回帰ってどんな回帰をイメージされていますか?
この回答への補足あり
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!