what we should use instead of 'datetime'
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
arash rad
el 29 de Sept. de 2022
Comentada: arash rad
el 30 de Sept. de 2022
Hello
I found a code in github and I want to use it for my data but there is problem
in that code date time is define as for example 31-Oct-2019 but my time is in seconds what should i use in that line ?
in one line he define
% x_data = datetime(jean_data.collect_day);
but when i replace it with my data i get a error :Could not recognize the format of the date/time text. You can specify a format using the 'InputFormat' parameter. If the date/time text contain day, month, or time zone names in a language foreign to the 'en_US' locale, those might not be recognized. You can specify a different locale using the 'Locale' parameter.
please help me
Thank you very much
the code is this :
clc;clear all;close all
warning off
flow_data = readtable('zafar_queue.xlsx');
% Fill the NaN value with the Nearest value.
flow_data.begin = num2str(flow_data.begin);
for i=1 : length(flow_data.begin)
flow_data.begin(i) = strip(flow_data.begin(i),"'");
end
Y = flow_data.nVehContrib;
data = Y';
%
% 0 to 6300 seconds about 105 minutes : Training Data Set
% 6300 to 7200 seconds about 15 minutes : Test Data Set
numTimeStepsTrain = floor(0.9*numel(data));
dataTrain = data(1:numTimeStepsTrain+1);
dataTest = data(numTimeStepsTrain+1:end);
% Normalize sales_price to a value between 0 and 1 (Training Data Set)
mu = mean(dataTrain);
sig = std(dataTrain);
dataTrainStandardized = (dataTrain - mu) / sig;
XTrain = dataTrainStandardized(1:end-1);
YTrain = dataTrainStandardized(2:end);
%LSTM Net Architecture Def
numFeatures = 1;
numResponses = 1;
numHiddenUnits = 200;
layers = [ ...
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits)
fullyConnectedLayer(numResponses)
regressionLayer];
options = trainingOptions('adam', ...
'MaxEpochs',500, ...
'GradientThreshold',1, ...
'InitialLearnRate',0.005, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',125, ...
'LearnRateDropFactor',0.2, ...
'Verbose',0, ...
'Plots','training-progress');
%
% Train LSTM Net
net = trainNetwork(XTrain,YTrain,layers,options);
% Normalize sales_price to a value between 0 and 1 (Testing Data Set)
dataTestStandardized = (dataTest - mu) / sig;
XTest = dataTestStandardized(1:end-1);
net = predictAndUpdateState(net,XTrain);
[net,YPred] = predictAndUpdateState(net,YTrain(end));
%
% Predict as long as the test period (2019.05.07 ~ 2019.10.31)
numTimeStepsTest = numel(XTest);
for i = 2:numTimeStepsTest
[net,YPred(:,i)] = predictAndUpdateState(net,YPred(:,i-1),'ExecutionEnvironment','cpu');
end
% RMSE calculation of test data set
YTest = dataTest(2:end);
YTest = (YTest - mu) / sig;
rmse = sqrt(mean((YPred-YTest).^2))
% Denormalize Data
YPred = sig*YPred + mu;
YTest = sig*YTest + mu;
% X Label : Collect Day
x_data = datetime(flow_data.begin);
x_train = x_data(1:numTimeStepsTrain+1);
x_train = x_train';
x_pred = x_data(numTimeStepsTrain:numTimeStepsTrain+numTimeStepsTest);
% Train + Predict Plot
figure
plot(x_train(1:end-1),dataTrain(1:end-1))
hold on
plot(x_pred,[data(numTimeStepsTrain) YPred],'.-')
hold off
xlabel("Collect Day")
ylabel("Sales Price")
title("Forecast")
legend(["Observed" "Forecast"])
%
% % RMSE Plot : Test + Predict Plot
% figure
% subplot(2,1,1)
% plot(YTest)
% hold on
% plot(YPred,'.-')
% hold off
% legend(["Observed" "Forecast"])
% ylabel("Sales Price")
% title("Forecast")
%
% subplot(2,1,2)
% stem(YPred - YTest)
% xlabel("Collect Day")
% ylabel("Error")
% title("RMSE = " + rmse)
%
% % Train + Test + Predict Plot
% figure
% plot(x_data,Y)
% hold on
% plot(x_pred,[data(numTimeStepsTrain) YPred],'.-')
% hold off
% xlabel("Collect Day")
% ylabel("Sales Price")
% title("Compare Data")
% legend(["Raw" "Forecast"])
0 comentarios
Respuesta aceptada
Ergin Sezgin
el 29 de Sept. de 2022
Hello Arash,
As far as I understand from your case, you have an array of seconds which is a duration. If its data class is not duration yet, you can convert it as the following code:
secondsArrayDouble = (1:100000:500000)';
secondsArrayDuration = duration(0,0,secondsArrayDouble);
If you need dates like 31-Oct-2019, unfortunately you cannot convert duration to datetime without knowing at least a common fixed point in datetime where the duration takes place. Datetime is basically a point in time; whereas, duration is a length of time.
But you can create a hypothetical datetime variable and assume it as starting point in time for your duration.
hypotheticalDate = datetime("29/09/2022")
yourDatetime = hypotheticalDate + secondsArrayDuration
yourDatetime.Format = "dd-MMM-uuuu"
Using this way, you can convert your duration variable into a datetime variable and can use it in your task. However, as I said you need a fixed point in time to define datetime array with respect to your duration array.
Good luck
3 comentarios
Ergin Sezgin
el 29 de Sept. de 2022
Hello again Arash,
Problem is related to the class of the input data and probably requires an additional step of converting. Is it possible for you to share some of your data and the regarding code that throws this error?
Más respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!