我是机器学习的初学者。虽然,这个问题类似于1,2,3,但是我在为数据选择输入形状时确实感到困惑。 我正在时间序列数据上使用一维CNN。数据的维数是(6400,4)。有4个要素(列),其中一个是目标变量。 拆分后:
dim(xtrain) -> 5000, 3
dim(ytrain) -> 5000, 1
dim(xtest) -> 1400, 3
dim(ytest) -> 1400, 1
我在为CNN选择输入形状时感到困惑。这就是我尝试过的(我保持输入形状= c(3,1)):
model = keras_model_sequential() %>%
layer_conv_1d(filters = 64, kernel_size = 2,
input_shape = c(3, 1), activation = "relu") %>%
layer_max_pooling_1d(pool_size = 2) %>%
layer_flatten() %>%
layer_dense(units = 32, activation = "relu") %>%
layer_dropout(rate = 0.2) %>%
layer_dense(units = 1, activation = "linear")
xtrain <- as.matrix(train[, c(1, 2, 3)])
ytrain <- as.matrix(train[, c(4)])
xtest = as.matrix(test[, c(1, 2, 3)])
ytest = as.matrix(test[, c(4)])
# Transforming 2-D matrix into 3-D matrix
xtrain = array(xtrain, dim = c(nrow(xtrain), 3, 1))
xtest = array(xtest, dim = c(nrow(xtest), 3, 1))
# fitting model
model %>% fit(xtrain, ytrain, epochs = 50, batch_size = 128, verbose = 1, validation_split = 0.20)
这执行得很好,但是我不确定它是否正确。请说明是否采用这种正确的方法来设置输入形状。
答案 0 :(得分:0)
您在此处做了某种移动平均线类比。最后,这完全取决于您想要实现的目标以及时间序列的性质。
假设您的内核权重为c(0.3,0.7)
,而时间序列为c(1.2,1.3,1.25)
。
您的内核将执行2个暗矢量:
a = c( 0.3 * 1.2 + 0.7*1.3 , 0.3 * 1.3 + 0.7*1.25)
您可以在这里看到与移动均线的相似性,然后您可以应用最大值并对其进行RELU。在示例中哪个将返回a[1]
。
现在,如果您相信可以使用线性转换(忽略模型的其余部分)来提取时间序列中的所有内容,那就可以了。但是,如果您认为您的短时间序列中可能存在某些非线性关系,则可以尝试使用RNN甚至LSTM。
在技术视图上,如果您具有instance_1 =(1,2,3,4),instance_2 =(2,3,4,5)等,则需要进行重叠以创建目标变量,该变量我想你做了某种方式。再次取决于您的追求。