理论以前写过:https://www.cnblogs.com/fangxiaoqi/p/11306545.html,这里根据天气、是否周末、有无促销的情况,来预测销量情况。
function [ matrix,attributes ] = bp_preprocess( inputfile ) %% BP神经网络算法数据预处理,把字符串转换为0,1编码 % inputfile: 输入数据文件; % output: 转换后的0,1矩阵; % attributes: 属性和Label; %% 读取数据 [~,txt]=xlsread(inputfile); attributes=txt(1,2:end); data = txt(2:end,2:end); %% 针对每列数据进行转换 [rows,cols] = size(data); matrix = zeros(rows,cols); for j=1:cols matrix(:,j) = cellfun(@trans2onefalse,data(:,j)); end end function flag = trans2onefalse(data) if strcmp(data,'坏') ||strcmp(data,'否')... ||strcmp(data,'低') flag =0; return ; end flag =1; end
%% 使用BP神经网络算法预测销量高低 clear ; % 参数初始化 inputfile = '../data/sales_data.xls'; % 销量及其他属性数据 %% 数据预处理 disp('正在进行数据预处理...'); [matrix,~] = bp_preprocess(inputfile); %% 输入数据变换 input = matrix(:,1:end-1); target = matrix(:,end); input=input'; target=target'; target=full(ind2vec(target+1)); %% 新建BP神经网络,并设置参数 % net = feedforwardnet(10); net = patternnet(10); net.trainParam.epochs=1000; net.trainParam.show=25; net.trainParam.showCommandLine=0; net.trainParam.showWindow=1; net.trainParam.goal=0; net.trainParam.time=inf; net.trainParam.min_grad=1e-6; net.trainParam.max_fail=5; net.performFcn='mse'; % 训练神经网络模型 net= train(net,input,target); disp('BP神经网络训练完成!'); %% 使用训练好的BP神经网络进行预测 y= sim(net,input); plotconfusion(target,y); disp('销量预测完成!');
可以看出,检测样本为34个,预测正确的个数为26,预测准确率为76.5%,预测准确率较低,是由于神经网络预测时需要较多的样本,是在此预测数据较少造成的。