2016-07-12 17 views
1

と成長窓予測にキャレットCreateTimeSlicesを使用して、私はシリーズベースのデータが私はこのようなデータセットを作成した機械学習モデル

getSymbols("^GSPC") 
DF=data.frame(GSPC,DATE=time(GSPC)) 
PriceChange=(DF$GSPC.Close-DF$GSPC.Open) 
DF$Class<-as.factor(ifelse(PriceChange>0,"UP","DOWN")) 
DF$year = as.numeric(format(DF$DATE, format = "%Y")) 
DF$MONTH = as.numeric(format(DF$DATE, format = "%m")) 


GSPC.Open GSPC.High GSPC.Low GSPC.Close GSPC.Volume Class Year Month 
1418.03 1429.42 1407.86 1416.60 3429160000 Down 2007 1 
1416.60 1421.84 1408.43 1418.34 3004460000 Up 2007 1 

を設定した時間を使用することが望まれている理由は、その後、私は数で年に置き換え

DF=data.table(DF) 

DF[year==2007,year:=0] 
DF[year==2008,year:=12] 
DF[year==2009,year:=24] 
DF[year==2010,year:=36] 
DF[year==2011,year:=48] 
DF[year==2012,year:=60] 
DF[year==2013,year:=72] 
DF[year==2014,year:=84] 
DF[year==2015,year:=96] 
DF[year==2016,year:=108] 

DF$Month_Index=(DF$year+DF$MONTH) 

がそうデータセットは今、追加の列を持っている(私はこれを行うためのよりスマートな方法があると思います)月のインデックスを維持するために追加することができ

Month_Index 
01 
01 

Month_Index=115 

次に、caretcreateTimeSlicesを使用して、拡大するウィンドウの予測を行いました。

ここで、各ステップの予測とその適切なインデックスを精度とともに保存します。私の質問は、私がこれをどうやってできるかということです。

答えて

1

あなたは、リストを使用して、結果を収集するためにplyrを使用することができます:あなたがそれを必要とする場合

results <- plyr::llply(1:length(TimeSlices$train), function(i){ 
    plsFitTime <- train(Class~., 
         data = DF[TimeSlices$train[[i]],], 
         method = "pls") 

    testData <- DF[TimeSlices$test[[i]],] 
    Prediction <- predict(plsFitTime, testData) 

    list(index = i, model = plsFitTime, prediction = Prediction) 
}) 

# The model created for slice no. 3 
results[[3]]$model 

# ... and it's predictions 
results[[3]]$prediction 

あなたはllplyに渡された関数の内部精度を追加することができます。

2

これを実現する方法の1つ:

library(quantmod) 
library(data.table) 
library(caret) 

getSymbols("^GSPC") 
DF <- data.frame(GSPC,DATE=time(GSPC)) 
PriceChange <- (DF$GSPC.Close-DF$GSPC.Open) 
DF$Class <- as.factor(ifelse(PriceChange>0,"UP","DOWN")) 

あなたは、次の二つの方法で月のインデックスを作成することができます。

# 1 
DF$yearMon <- zoo::as.yearmon(DF$DATE) 
DF <- data.table(DF) 
DF[, Month_Index:= .GRP, by = yearMon] 

# 2 
DF$year <- as.numeric(format(DF$DATE, format = "%Y")) 
DF$MONTH <- as.numeric(format(DF$DATE, format = "%m")) 
DF[, Month_Index2 := .GRP, by = .(year, MONTH)] 

identical(DF$Month_Index, DF$Month_Index2) 
[1] TRUE 


Month_Index <- length(unique(DF$Month_Index)) 

TimeSlices <- createTimeSlices(1:Month_Index, 5, horizon = 2, 
          fixedWindow = FALSE, skip = 0) 

は、あなたの結果を保存するために3つの空のリストを作成します。

totalSlices <- length(TimeSlices$train) 

plsFitTime <- vector("list", totalSlices) 
Prediction <- vector("list", totalSlices) 
Accuracy <- vector("list", totalSlices) 

すべての結果を次のリストに保存します。

k <- 1:totalSlices 

for(i in seq_along(k)) 
{ 

    plsFitTime[[i]] <- train(Class~., 
          data = DF[TimeSlices$train[[i]],], 
          method = "pls") 

    Prediction[[i]] <- predict(plsFitTime[[i]], 
           DF[TimeSlices$test[[i]],]) 

    Accuracy[[i]] <- confusionMatrix(Prediction[[i]], 
            DF[TimeSlices$test[[i]],]$Class)$overall[1] 

} 

すべてのモデルはAccuracyで、plsFitTimePredictionの予測、および精度を保存しています。

更新:

より整然とアプローチはpurrrパッケージを使用することです。 、

library(purrr) 

customFunction <- function(x, y) { 
    model <- train(Class~., 
        data = DF[x], 
        method = "pls") 

    prediction <- predict(model, DF[y]) 

    accuracy <- confusionMatrix(prediction, 
           DF[y]$Class)$overall[1] 

    return(list(prediction, accuracy)) 
} 

results <- map2_df(TimeSlices$train, TimeSlices$test, customFunction) 

map2_dfは、引数として2つのリスト.x.yをとる関数であるこれらのリストのすべての要素に対して関数.fを適用し、その結果を返します。

タイムスライスを作成した後、使用することができますデータフレーム

lapplyのように)ファンクションを作成することはできますが、コードをきれいにするために、グローバル環境でcustomFunctionを作成しました。関数内

DF[x]DF[TimeSlices$train[[n]]]DF[y]に相当し、今DF[TimeSlices$test[[n]]]

map2_dfである上記forループがしたすべてを行い、そして唯一の予測を返しはの形ですべてのモデルのを精度データフレーム

class(results) 
[1] "tbl_df"  "tbl"  "data.frame" 

dim(results) 
[1] 2 109 

resultsの各列がリストです。 109列は109モデルの結果です。

各モデルの結果(この場合予測と精度)にアクセスするには、results$columnNameまたはresults[[columnNumber]]を使用してください。

あなたが同様のモデルを保存したい場合は、単にモデルを含めるようにcustomFunctionreturn文を変更します。return(list(model, prediction, accuracy))

関連する問題