利用MATLAB设计一款系统,要求如下:
一、对于这样一款咨询系统,最主要的就是将文字数据变为数字数据。采用BP神经网络实现,首先要得到训练样本:
(1)输入分析:
% (1)最近进行休闲活动的情况 1为有 0为无
% (2)天气情况 1为好 0为不好
% (3)空闲时间长短 1为长 0为短
% (4)冰箱里是否还有食物 1为有 0为无
% (5) 冰箱食物多少 1为多 0为少
% (6)个人活动还是集体活动 1为个人 0为集体
% (7)最近是否有很好的演出 1为有 0为无
% (8)是否需要补充睡眠 1为是 0为否
(2)特征分析:
% 活动1 集体活动(访友、聚餐、郊游)
% 活动2 锻炼身体
% 活动3 购物(超市、商场,书店)
% 活动4 文化活动(电影、话剧、读书)
% 活动5 居家活动
% 活动6 在家休息
通过对输入的8种情况组合,使用W1 = (ff2n(8))';
命令构成256种组合,即为输入样本。
二、通过“人”的思维模式进行编程,得到每一种选择特征值:
部分代码如下:
for i = 1:1:256
if B(i) == 1
if W1(4,i) == 0 %如果冰箱无食物
if W1(5,i) == 0 %如果冰箱食物少(为避免用户选择了“无食物”、“食物少”、“食物多”的前后矛盾现象,这种现象均推荐购物)
C(3,i) = 1;%则推荐购物
if W1(8,i) == 1 %如果需要补充睡眠
C(6,i) = 1;%则推荐在家休息
if W1(3,i) == 1 %如果空闲时间长
if W1(6,i) == 1 %如果更愿意参加个人活动
C(5,i) = 1;%则推荐居家活动
else %如果更愿意参加集体活动
C(1,i) = 1;%再推荐集体活动
C(2,i) = 1;%则推荐锻炼身体
C(4,i) = 1;%则推荐文化活动
end
else % 如果空闲时间短
if W1(6,i) == 1 %如果更愿意参加个人活动
C(5,i) = 1;%则推荐居家活动
else %如果更愿意参加集体活动
C(4,i) = 1;%则推荐文化活动
end
end
else%如果不需要补充睡眠
if W1(3,i) == 1 %如果空闲时间长
if W1(6,i) == 1 %如果更愿意参加个人活动
C(5,i) = 1;%则推荐居家活动
else %如果更愿意参加集体活动
C(1,i) = 1;%再推荐集体活动
C(2,i) = 1;%则推荐锻炼身体
C(4,i) = 1;%则推荐文化活动
end
else % 如果空闲时间短
if W1(6,i) == 1 %如果更愿意参加个人活动
C(5,i) = 1;%则推荐居家活动
else %如果更愿意参加集体活动
C(4,i) = 1;%则推荐文化活动
C(2,i) = 1;%则推荐锻炼身体
end
end
end
else %如果冰箱食物多
C(3,i) = 1;%则推荐购物
if W1(8,i) == 1 %如果需要补充睡眠
C(6,i) = 1;%则推荐在家休息
if W1(3,i) == 1 %如果空闲时间长
if W1(6,i) == 1 %如果更愿意参加个人活动
C(5,i) = 1;%则推荐居家活动
else %如果更愿意参加集体活动
C(1,i) = 1;%再推荐集体活动
C(2,i) = 1;%则推荐锻炼身体
C(4,i) = 1;%则推荐文化活动
end
else % 如果空闲时间短
if W1(6,i) == 1 %如果更愿意参加个人活动
C(5,i) = 1;%则推荐居家活动
else %如果更愿意参加集体活动
C(4,i) = 1;%则推荐文化活动
end
end
else%如果不需要补充睡眠
if W1(3,i) == 1 %如果空闲时间长
if W1(6,i) == 1 %如果更愿意参加个人活动
C(5,i) = 1;%则推荐居家活动
else %如果更愿意参加集体活动
C(1,i) = 1;%再推荐集体活动
C(2,i) = 1;%则推荐锻炼身体
C(4,i) = 1;%则推荐文化活动
end
else % 如果空闲时间短
if W1(6,i) == 1 %如果更愿意参加个人活动
C(5,i) = 1;%则推荐居家活动
else %如果更愿意参加集体活动
C(4,i) = 1;%则推荐文化活动
C(2,i) = 1;%则推荐锻炼身体
end
end
end
end
else %如果冰箱有食物
if W1(5,i) == 0 %如果冰箱食物少
C(3,i) = 1;%则推荐购物
if W1(8,i) == 1 %如果需要补充睡眠
C(6,i) = 1;%则推荐在家休息
if W1(3,i) == 1 %如果空闲时间长
if W1(6,i) == 1 %如果更愿意参加个人活动
C(5,i) = 1;%则推荐居家活动
else %如果更愿意参加集体活动
C(1,i) = 1;%再推荐集体活动
C(2,i) = 1;%则推荐锻炼身体
C(4,i) = 1;%则推荐文化活动
end
else % 如果空闲时间短
if W1(6,i) == 1 %如果更愿意参加个人活动
C(5,i) = 1;%则推荐居家活动
else %如果更愿意参加集体活动
C(4,i) = 1;%则推荐文化活动
end
end
else%如果不需要补充睡眠
if W1(3,i) == 1 %如果空闲时间长
if W1(6,i) == 1 %如果更愿意参加个人活动
C(5,i) = 1;%则推荐居家活动
else %如果更愿意参加集体活动
C(1,i) = 1;%再推荐集体活动
C(2,i) = 1;%则推荐锻炼身体
C(4,i) = 1;%则推荐文化活动
end
else % 如果空闲时间短
if W1(6,i) == 1 %如果更愿意参加个人活动
C(5,i) = 1;%则推荐居家活动
else %如果更愿意参加集体活动
C(4,i) = 1;%则推荐文化活动
C(2,i) = 1;%则推荐锻炼身体
end
end
end
else %如果冰箱食物多
if W1(8,i) == 1 %如果需要补充睡眠
C(6,i) = 1;%则推荐在家休息
if W1(3,i) == 1 %如果空闲时间长
if W1(6,i) == 1 %如果更愿意参加个人活动
C(5,i) = 1;%则推荐居家活动
else %如果更愿意参加集体活动
C(1,i) = 1;%再推荐集体活动
C(2,i) = 1;%则推荐锻炼身体
C(4,i) = 1;%则推荐文化活动
end
else % 如果空闲时间短
if W1(6,i) == 1 %如果更愿意参加个人活动
C(5,i) = 1;%则推荐居家活动
else %如果更愿意参加集体活动
C(4,i) = 1;%则推荐文化活动
end
end
else%如果不需要补充睡眠
if W1(3,i) == 1 %如果空闲时间长
if W1(6,i) == 1 %如果更愿意参加个人活动
C(5,i) = 1;%则推荐居家活动
else %如果更愿意参加集体活动
C(1,i) = 1;%再推荐集体活动
C(2,i) = 1;%则推荐锻炼身体
C(4,i) = 1;%则推荐文化活动
end
else % 如果空闲时间短
if W1(6,i) == 1 %如果更愿意参加个人活动
C(5,i) = 1;%则推荐居家活动
else %如果更愿意参加集体活动
C(4,i) = 1;%则推荐文化活动
C(2,i) = 1;%则推荐锻炼身体
end
end
end
end
end
end
end
每一种选择的特征值如下:
三、再将样本数据通过BP神经网络工具箱进行训练:
% BP神经网路
P = W1;
T = C;
[p1,minp,maxp,t1,mint,maxt]=premnmx(P,T);%对P、T归一化处理
s = [12,12,6];%影藏层、输出层数目
net=newff(minmax(P),s,{'tansig','tansig','purelin'},'trainlm');
net.trainParam.epochs = 40000;%训练次数
net.trainParam.goal = 0.0000001;%训练精度
net.trainParam.lr=0.3;
net=train(net,p1,t1);%神经网络训练
a1 = [0
1
1
1
0
0
0
0];
a2 = [1
1
1
0
1
1
1
1];
a1=premnmx(a1);%将a1进行归一化处理
a2=premnmx(a2);%将a1进行归一化处理
A1 = sim(net,a1);%得到预测(检验)数据输出值
A2 = sim(net,a2);%得到预测(检验)数据输出值
A3 = postmnmx(A1,mint,maxt)
A4 = postmnmx(A2,mint,maxt)
其中a1、a2为检验数据,通过BP神经网络。结果如下:
a1的输出为:
1
1
1
0.99999
-2.0317e-06
2.9628e-06
a2的输出为:
-5.0165e-06
2.0241e-05
1
-6.6915e-06
0.99998
0.99998
总体而言,具有较好的效果。可以根据用户的输入反馈出最优的娱乐活动。
代码还可以简化。如有更好的方法,或者有错误的地方,欢迎留言批评指正!