2013-10-27 66 views
1

我正在設計一個神經網絡模型,使用限制於更多擴展輸入數據(如紋理,體積密度等)來預測van genuchten保水參數(theta_r,thera_s,alpha,n)和一個或兩個保水。研究R項目中的神經網絡我發現了RSNNS包,並創建並訓練了多個多層感知器(MLP),並調整了隱藏單元的數量和學習率。這些模型的訓練和測試RMSE的一般性能非常差和隨機,事實上,我使用對數轉換值的alpha和n參數來避免偏差並考慮它們的近似對數正態分佈,但這並沒有多大幫助:我建議用NNET和尖包工作,但我有麻煩適應的代碼,我不知道我做錯了什麼,有何建議?caret :: train:指定訓練數據參數

#input dataset 
basic <- read.table(url("https://dl.dropboxusercontent.com/s/m8qe4k5swz1m3ij/basic.txt?dl=1&token_hash=AAH6Z3d6fWTLoQZYi04Ys72sdufdERE5gm4v7eF0cgMlkQ"), header=T, sep=" ") 
#output dataset 
fitted <- read.table(url("https://dl.dropboxusercontent.com/s/rjx745ej80osbbu/fitted.txt?dl=1&token_hash=AAHP1zcPQyw4uSe8rw8swVm3Buqe3TP7I1j-4_SOeeUTvw"), header=T, sep=" ") 

# Use log-transformed values of alpha and n output parameters 
fitted$alpha <- log(fitted$alpha) 
fitted$n <- log(fitted$n) 


#Fit model with caret package 
library(caret) 
model <- train(x = basic, y = fitted, method='nnet', linout=TRUE, trace = FALSE, 
       #Grid of tuning parameters to try: 
       tuneGrid=expand.grid(.size=c(1,5,10),.decay=c(0,0.001,0.1))) 
+0

我不不明白,你的問題是什麼? – David

+1

是否有可能使用插入符號包對更多輸出參數進行NN訓練? – user2806134

+0

好的,我明白了 - 我會稍微爲你發佈一個答案。 – David

回答

2

caret只是一個包裝算法它是調用的,所以你可以在算法中指定任何參數,即使它不是插入符的調整網格中的一個選項,這是通過插入符號train()函數中的「...」來完成的,基本上說你可以傳遞任何額外的參數進入你所調用的方法。我不知道你要調整你的NNET叫什麼參數(和我得到錯誤訪問Dropbox的數據),所以這裏是傳遞特定值maxitHess一個簡單的例子:

> library(caret) 
> m1 <- train(Species~.,data=iris, method='nnet', linout=TRUE, trace = FALSE,trControl=trainControl("cv")) 
> #this time pass in values for maxint and Hess 
> m2 <- train(Species~.,data=iris, method='nnet', linout=TRUE, trace = FALSE,trControl=trainControl("cv"),maxint=10,Hess=T) 
> m1$finalModel$call 
nnet.formula(formula = modFormula, data = data, size = tuneValue$.size, 
    decay = tuneValue$.decay, linout = TRUE, trace = FALSE) 
> m2$finalModel$call 
nnet.formula(formula = modFormula, data = data, size = tuneValue$.size, 
    decay = tuneValue$.decay, linout = TRUE, trace = FALSE, maxint = 10, 
    Hess = ..4)