💥1 概述
LSTM模型的一个常见用途是对长时间序列数据进行学习预测,例如得到了某商品前一年的日销量数据,我们可以用LSTM模型来预测未来一段时间内该商品的销量。但对于不熟悉神经网络或者对没有了解过RNN模型的人来说,想要看懂LSTM模型的原理是非常困难的,但有些时候我们不得不快速上手搭建一个LSTM模型来完成预测任务。本文分析在线产品价格数据以预测当前产品价格。
首先建立模型,确定每个因素对定价的影响程度,并且能够预测出在不同变量组合下的价格;从而根据特定的价格水平,对产品进行设计,制定商业策略。
📚2 运行结果
🎉3 参考文献
[1]杨青,王晨蔚.基于深度学习LSTM神经网络的全球股票指数预测研究[J].统计研究,2019,36(03):65-77.DOI:10.19343/j.cnki.11-1302/c.2019.03.006.
👨💻4 Matlab代码
主函数部分代码:
jean_data = readtable('jean_sales.xlsx'); % Fill the NaN value with the Nearest value. jean_data.sales_price = fillmissing(jean_data.sales_price, 'nearest'); lenofdata = length(jean_data.sales_price); for i=1 : length(jean_data.collect_day) jean_data.collect_day(i) = strip(jean_data.collect_day(i),"'"); end Y = jean_data.sales_price; data = Y'; 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