2016-04-29 9 views
0

私は、機械学習の技術とRのプログラミングの両方に対して比較的新しいですし、現時点では私が持っているデータに神経回路網を取り入れようとしています。しかし、結果として得られるニューラルネットワークの予測は私にとっては意味がありません。私はStackOverflowを見てきましたが、この問題の解決策を見つけることができませんでした。neuralnetの予測関数が奇妙な結果をもたらす

マイデータ(これはテストセットの一部であり、トレーニングセットは、同じ形式のものである)

target monday tuesday wednesday thursday friday saturday indepedent 
428 277  1  0   0  0  0  0  3317 
429 204  0  1   0  0  0  0  1942 
430 309  0  0   1  0  0  0  2346 
431 487  0  0   0  1  0  0  2394 
432 289  0  0   0  0  1  0  2023 
433 411  0  0   0  0  0  1  1886 
434 182  0  0   0  0  0  0  1750 
435 296  1  0   0  0  0  0  1749 
436 212  0  1   0  0  0  0  1810 
437 308  0  0   1  0  0  0  2021 
438 378  0  0   0  1  0  0  2494 
439 329  0  0   0  0  1  0  2110 
440 349  0  0   0  0  0  1  1933 

マイコード

resultsnn <- neuralnet(target~monday+tuesday+wednesday+thursday+friday+saturday+independent,data=training,hidden=3,threshold=0.01,linear.output = TRUE) 
compute(resultsnn,test[,2:8])$net.result 

私の結果(予測値はすべてのテストセットのケースで同じです)

  [,1] 
428 508.4962231 
429 508.4962231 
430 508.4962231 
431 508.4962231 
432 508.4962231 
433 508.4962231 
434 508.4962231 
435 508.4962231 
436 508.4962231 
437 508.4962231 
438 508.4962231 
439 508.4962231 
440 508.4962231 

他に何を試しましたか?

私は、いくつかの合成データを作成し、同じコードを、入力として、これを使用している

(唯一の独立変数、これは結果の種類を変更しない含む)ダミー無しのバージョンを試してみましたこれは正常に動作しない:

#building training set 
input_train <- as.data.frame(c(1:100)) 
output_train <- as.data.frame(c(sqrt((1:100)+1))) 

train <- cbind.data.frame(output_train,input_train) 
colnames(train) <- c("output","input") 

#building test set 
input_test <- as.data.frame(c(101:150)) 
output_test <- as.data.frame(c(sqrt((101:150)+1))) 

test <- cbind.data.frame(output_test,input_test) 
colnames(test) <- c("output","input") 

#NEURALNET PACKAGE 
#neural network 3 neurons 
res.train <- neuralnet(output~input,data=train,hidden=3,threshold=0.01) #train nn 
compute(res.train,test[,2])$net.result #predict using nn on test set 

を私はまた、(例えば、NNETRSNNS)他のパッケージを試してみましたが、これらのパッケージは、すでに合成データを使用している場合、正しい予測を提供することができません。

いくつかの追加情報

データ型に関するいくつかの追加情報:

str(test) 
'data.frame': 82 obs. of 8 variables: 
    $ target  : int 277 204 309 487 289 411 182 296 212 308 ... 
    $ monday  : int 1 0 0 0 0 0 0 1 0 0 ... 
    $ tuesday : int 0 1 0 0 0 0 0 0 1 0 ... 
    $ wednesday : int 0 0 1 0 0 0 0 0 0 1 ... 
    $ thursday : int 0 0 0 1 0 0 0 0 0 0 ... 
    $ friday  : int 0 0 0 0 1 0 0 0 0 0 ... 
    $ saturday : int 0 0 0 0 0 1 0 0 0 0 ... 
    $ independent: int 3317 1942 2346 2394 2023 1886 1750 1749 1810 2021 ... 

str(training) 
'data.frame': 397 obs. of 8 variables: 
    $ target  : int 1079 1164 1069 1038 629 412 873 790 904 898 ... 
    $ monday  : int 0 0 0 0 0 0 1 0 0 0 ... 
    $ tuesday : int 1 0 0 0 0 0 0 1 0 0 ... 
    $ wednesday : int 0 1 0 0 0 0 0 0 1 0 ... 
    $ thursday : int 0 0 1 0 0 0 0 0 0 1 ... 
    $ friday  : int 0 0 0 1 0 0 0 0 0 0 ... 
    $ saturday : int 0 0 0 0 1 0 0 0 0 0 ... 
    $ independent: int 2249 2381 4185 2899 2387 2145 2933 2617 2378 3569 ... 

あなたが任意の追加情報が必要な場合は私に知らせてください!ヘルプみんなのおかげで(:。ターゲットとindepedentの間に信号がないよう

答えて

2

に見えます今の平日を無視すると、グラデーションとない線形モデルフィット場合:

# a linear model looking at response with indepedent (with intercept) 
lm1 <- lm(target ~ indepedent, data = training) 
lm1 
# 
# Call: 
# lm(formula = target ~ indepedent, data = training) 
# 
# Coefficients: 
# (Intercept) indepedent 
# 206.37312594 0.04853823 
# intercept only 
lm0 <- lm(target ~ 1, data = training) 
lm0 
# 
# Call: 
# lm(formula = target ~ 1, data = training) 
# 
# Coefficients: 
# (Intercept) 
# 310.0769 
# two models of the data equivalent to possible outcomes 
plot(target ~ indepedent, data = training) 
lines(fitted(lm1) ~ indepedent, data = training, lty = 2) 
lines(fitted(lm0) ~ indepedent, data = training, col = 2) 

を...切片のみのモデルが好まれる:。

# test which model is better 
# large p-value suggests we're happy accepting the simple model 
anova(lm0, lm1) 
# Analysis of Variance Table 
# 
# Model 1: target ~ 1 
# Model 2: target ~ indepedent 
# Res.Df  RSS Df Sum of Sq  F Pr(>F) 
# 1  12 86990.923        
# 2  11 81792.165 1 5198.7582 0.69917 0.42086 
head(fitted(lm0)) 
#   428   429   430   431   432   433 
# 310.0769231 310.0769231 310.0769231 310.0769231 310.0769231 310.0769231 

だから、これは機械学習アプローチはまた、あなたを語っているものである単純なモデルはindepedentのすべての値のための目標のために単一の値を予測し、明らかに改善されない平日の変数に追加します。これ。

あなたのおもちゃの例の予測を見たのは、応答に強いシグナルがあったからです。

+0

さらに共変量を追加すると、ニューラルネットワークが機能する可能性がありますか(言い換えれば、私の唯一の問題は、現在の共変量のセットにはターゲットに関する説明力がないということです)? – Tomas

+0

はい、あなたがそれらを含まないことを除いて、ターゲットと独立した人との間の関係を説明する共変量が存在する可能性があります。これらの変数がどのように関連しているかを機械的に理解していれば、試してみるべき変数があるかもしれません。関係があることだけを望むなら、多くの変数を試してみてください。候補となる説明変数を取得したら、それがテストデータに当てはまるかどうかを確認します。テストを見る前にトレーニングデータの調査を完了してみてください! – CSJCampbell

関連する問題