机器学习案例一:小样本数据建模与灰色系统理论

  现在在机器学习领域的主流思维都是使用大量或海量的数据来训练一个模型从而得到很好的分类或回归结果。但是,在某些科学或应用场合,由于数据采集的不变性,导致在很长的时间内只获取了极少数量的数据,或者是在本来是具有海量数据的环境下,由于数据的质量不佳、冗余以及数据的不可靠,导致海量的数据只有极少数的数据样本可以使用。在以上的情况下,使用现在主流的深度学习模型是不可取的,因为在贫数据的情况下,深度学习的结果是不被看好的。在这个时候,在进行数据的建模分析的时候,通常还是使用传统的统计学习方法,虽说是所有的模型都可以去用一用,但是如果遇到极少数数据的情况,其中很多的模型效果也是不太好的。本人在开展实际建模研究的过程中,曾经遇到过数据样本为20个一下,且数据维度由很高的情况,在这种情况下,使用灰色模型是一种非常切实且有效的方式。由于涉及到一些科研的核心部分,因此实际的项目无法展示,使用类似的公共项目来讲解一下。

  灰色系统理论是郑聚龙教授首先提出的,将灰色系统理论与神经网络结合起来,就可以形成灰色神经网络。灰色理论主要的预测摸型是一个微分方程的模型,称为GM(n,h)模型,其特点是需要的数据少、精度高属于定量预测方法之列灰色 系统理论的重要贡献之一,在于它提出了“灰色系统”的概念。它打破了我们将统简单地划分为“黑色系统”和“白色系统”的习惯作法,为系统论的研究开辟了一个新领域。下面进行该方法的算法推导。

  原始数列xt(0)表示为x(t),一次累加生成得到的数列xt(1)表示为y(t),预测结果xt*(1)表示为z(t)。n个参数的灰色神经网络模型的微分方程式表达为:

                             

  其中,y2...yn为系统输入参数;y1为系统输出参数;a,b1...bn为微分方程的系数。将上式变化为时间函数的形式,表达式如下:

                           

  令,可得:

                           

  通过对上式的分析可以得出,可以将以上数学模型映射到一个拓展BP神经网络上,该神经网络有n个输入,1个输出。在本文的实际操作过程中,由于数据样本的特点,只使用方程式中的a,b1,b2这三个参数。

  应用场景:

  西瓜是人们夏日纳凉的必备,届时在市场上可以看到大大小小各式各样的西瓜,让人眼花缭乱。但是,在大量的西瓜中想要挑出几个熟透的西瓜还不容易的。根据在日常生活中所积累的经验可以得知,在挑选西瓜的时候可以根据西瓜的一些外部特征来判断西瓜是否熟透,比如色泽、根蒂、敲声、纹理、脐部、触感等外在的因素。但是这些外部因素无法通过数据来定量量化,例如色泽可以有青绿、乌黑、浅白这几种属性状态。因此可以根据西瓜的内在因素来判定西瓜是否熟透,即采用西瓜的密度和含糖量。同一批的西瓜因为产地、水分、光照、温度等环境因素相似,每个西瓜的状态相似,可以根据一颗或多颗西瓜的状态来判断一批西瓜的状态。此外,西瓜的密度和含糖量可以使用数据来定量分析,有助于进行判断与预测工作。

  优化方法:

  果蝇优化算法是台湾学者潘文超提出的,是一种基于果蝇觅食行为推演出的寻求全局优化的新方法。果蝇本身在感官知觉上优于其他物种,尤其是在嗅觉与视觉上。果蝇的嗅觉器官能很好地搜集飘浮在空气 中的各种气味,然后飞近食物位置后亦可使用敏锐的视觉发现食物与同伴聚集的位置,并且往该方向飞去。通过使用数学方法和数学技巧来模拟果蝇的寻觅过程得出了果蝇优化算法。

果蝇优化算法的过程可以归结为以下几步:

1)随机初始果蝇群体位置(Fly Group)。

InitX_axis;

InitY_axis;

2)赋与果蝇个体(Fly)利用嗅觉搜寻食物之随机方向与距离。

Xi=X_axis+Random Value;

Yi=Y_axis+Random Value;

3)由于无法得知食物位置,因此先估计与原点之距离(Dist),再计算味道浓度判定值(S),此值为距离之倒数。

Si=1/D;

4)味道浓度判定值(S)代入味道浓度判定函数(或称为Fitness function)以求出该果蝇个体位置 的味道浓度(Smelli)。

Smelli=Function(Si);

5)找出此果蝇群体中的味道浓度最高的果蝇。

[bestSmell bestIndex]=max(Smell);

6)保留最佳味道浓度值与x、y坐标,此时果蝇群体利用视觉向该位置飞去,形成新的群聚位置。

Smellbest=bestSmell;

X_axis=X(bestIndex);

Y_axis=Y(bestIndex);

7)进入果蝇迭代寻优,重复执行步骤2)-5),并判断味道浓度是否优于前一迭代味道浓度,若是则执行步骤6)。

本文中利用果蝇优化算法来优化灰色神经网络中的参数a,b1,b2,得到了很好的效果。

  数据与仿真:

在本部分中将会利用MATLAB来检验果蝇优化算法来优化灰色神经网络的效果,同时和灰色神经网络的结果进行对比分析。在前文中提到过,由于西瓜的参数密度和含糖量可以用数据指标量化,所以将西瓜的密度和含糖量设置为输入X1和X2,所对应的输出Y对应西瓜熟了为1,西瓜没熟为0。

对应的数据样本如下表所示:

表1 数据参数表

X1(密度)

X2(含糖量)

Y

0.697

0.460

1

0.774

0.376

1

0.634

0.264

1

0.608

0.318

1

0.543

0.211

1

0.503

0.320

1

0.556

0.215

1

0.403

0.237

1

0.666

0.091

0

0.243

0.267

0

0.111

0.266

0

0.245

0.057

0

0.343

0.099

0

0.639

0.161

0

0.657

0.198

0

0.360

0.370

0

0.481

0.149

1

0.437

0.211

1

0.593

0.042

0

0.719

0.103

0

将上述数据首先应用到灰色神经网络中,在灰色神经网络中对上述数据进行分析。将前15组数据作为训练集,将后5组数据作为测试集。程序中网络的学习次数为10次。使用灰色神经网络对上述数据学习并且预测10次,观察灰色神经网络的效果。

灰色神经网络预测结果如下:

0.4801    0.5570    0.6331    0.0516    0.1265

0.4045    0.6038    0.6662    0.0422    0.1036

0.1091    0.8240    0.8327    0.0059    0.0146

0.0643    0.8341    0.8352    0.0008    0.0019

0.7152    0.4158    0.5348    0.0806    0.1977

0.2536    0.7145    0.7499    0.0240    0.0589

0.3406    0.6680    0.7184    0.0342    0.0838

0.5419    0.5300    0.6174    0.0592    0.1452

0.2501    0.7235    0.7574    0.0229    0.0563

0.3476    0.6395    0.6916    0.0352    0.0864

分析上述的结果,根据灰色神经网络的特征,对于结果进行调整,对于大于0.5的结果认为输出为1,小于0.5的结果认为输出为0。可以得出,在第五次测试时和第八次测试时灰色神经网络的预测出现错误。由于上述的数据为小样本数据,能够导致灰色神经网络的预测结果精度较低。

再使用同样的策略来使用果蝇优化算法优化灰色神经网络参数的算法对上述数据进行训练与预测,程序中迭代的次数为100次,种群的规模为20个,网络的训练次数为10次,同样是10次的预测结果如下:

果蝇优化算法优化的灰色神经网络预测结果如下:(大于等于0.5认为是1,小于0.5认为是0)

0.2501    0.8346    0.8812    0.0316    0.0774

0.2050    0.8810    0.9212    0.0272    0.0668

0.2479    0.8354    0.8805    0.0305    0.0749

0.2308    0.8554    0.8996    0.0299    0.0734

0.2463    0.8437    0.8907    0.0318    0.0779

0.2557    0.8486    0.8987    0.0339    0.0832

0.2616    0.8288    0.8780    0.0333    0.0817

0.2479    0.8354    0.8805    0.0305    0.0749

0.2479    0.8354    0.8805    0.0305    0.0749

0.2479    0.8354    0.8805    0.0305    0.0749

分析上述结果,可以看出采用果蝇优化灰色神经网络参数的算法的测试精度高,在10次的测试过程中,预测结果全部正确,且同时每次预测的结果近似,预测的精度高,最小均方误差稳定在1.17左右,弥补了灰色神经网络在预测小样本数据方面的不足。

 

 

图1 果蝇飞行路线点图

 

图2 果蝇飞行路线连线图

 图3 迭代过程与最小均方误差的关系图

代码:

clc
clear
load E:\360Downloads\data1.txt;
[row,col]=size(data1);
set=row/5;
row1=row-set+1;
%初始果蝇群体位置
X_axis=rands(1,3);
Y_axis=rands(1,3);
maxgen=100; %迭代次数
sizepop=20; %种群规模
NN=10; %网络学习次数
%***果蝇寻优开始
%利用嗅觉寻找食物
for p=1:sizepop
%***初始果蝇个体飞行距离
X(p,:)=X_axis+20*rand()-10;
Y(p,:)=Y_axis+20*rand()-10;
%***求出与原点之距离
D(p,1)=(X(p,1)^2+Y(p,1)^2)^0.5;
D(p,2)=(X(p,2)^2+Y(p,2)^2)^0.5;
D(p,3)=(X(p,3)^2+Y(p,3)^2)^0.5;
%***味道浓度为距离之倒数,先求出味道浓度判定值
S(p,1)=1/D(p,1);
S(p,2)=1/D(p,2);
S(p,3)=1/D(p,3);
%***利用味道浓度判定函数求出味道浓度(类似 Fitness 适应度函数)
a=0.3+3*S(p,1);
b1=0.3+3*S(p,2);
b2=0.3+3*S(p,3);
%GREYANN
for i=1:row
y(i,1)=sum(data1(1:i,1));
y(i,2)=sum(data1(1:i,2));
y(i,3)=sum(data1(1:i,3));
end
u1=0.0015;
u2=0.0015;
u3=0.0015;
t=1;
w11=a;
w21=-y(1,1);
w22=2*b1/a;
w23=2*b2/a;
w31=1+exp(-a*t);
w32=1+exp(-a*t);
w33=1+exp(-a*t);
theta=(1+exp(-a*t))*(b1*y(1,2)/a+b2*y(1,3)/a-y(1,1));
for j=1:NN
E(j)=0;
for i=1:row1
t=i;
LB_b=1/(1+exp(-w11*t));
LC_c1=LB_b*w21;
LC_c2=y(i,2)*LB_b*w22;
LC_c3=y(i,3)*LB_b*w23;
LD_d=w31*LC_c1+w32*LC_c2+w33*LC_c3;
theta=(1+exp(-w11*t))*(w22*y(i,2)/2+w23*y(i,3)/2-y(1,1));
ym=LD_d-theta;
yc(i)=ym;
error=ym-y(i,1);
E(j)=E(j)+abs(error);
error1=error*(1+exp(-w11*t));
error2=error*(1+exp(-w11*t));
error3=error*(1+exp(-w11*t));
error4=(1/(1+exp(-w11*t)))*(1-1/(1+exp(-w11*t)))*(w21*error1+w22*error2+w23*error3);
w22=w22-u1*error2*LB_b;
w23=w23-u2*error3*LB_b;
w11=w11+a*t*error4;
end
E(j)=E(j)/row1;
end
Smell(p)=min(E);
end
[bestSmell bestindex]=min(Smell);
%***利用视觉寻找伙伴聚集味道浓度最高之处,做法是保留最佳值初始位置及初始味道浓度
X_axis=X(bestindex,:);
Y_axis=Y(bestindex,:);
bestS=S(bestindex,:);
Smellbest=bestSmell;
%***果蝇迭代寻优
for gen=1:maxgen
gen
%利用嗅觉寻找食物
for p=1:sizepop
    %***初始果蝇个体飞行距离
X(p,:)=X_axis+20*rand()-10;
Y(p,:)=Y_axis+20*rand()-10;
%***求出与原点之距离
D(p,1)=(X(p,1)^2+Y(p,1)^2)^0.5;
D(p,2)=(X(p,2)^2+Y(p,2)^2)^0.5;
D(p,3)=(X(p,3)^2+Y(p,3)^2)^0.5;
%***味道浓度为距离之倒数,先求出味道浓度判定值
S(p,1)=1/D(p,1);
S(p,2)=1/D(p,2);
S(p,3)=1/D(p,3);
%***利用味道浓度判定函数求出味道浓度(类似 Fitness 适应度函数)
a=0.3+3*S(p,1);
b1=0.3+3*S(p,2);
b2=0.3+3*S(p,3);
%GREYANN
t=1;
w11=a;
w21=-y(1,1);
w22=2*b1/a;
w23=2*b2/a;
w31=1+exp(-a*t);
w32=1+exp(-a*t);
w33=1+exp(-a*t);
theta=(1+exp(-a*t))*(b1*y(1,2)/a+b2*y(1,3)/a-y(1,1));
for j=1:NN
E(j)=0;
for i=1:row1
t=i;
LB_b=1/(1+exp(-w11*t));
LC_c1=LB_b*w21;
LC_c2=y(i,2)*LB_b*w22;
LC_c3=y(i,3)*LB_b*w23;
LD_d=w31*LC_c1+w32*LC_c2+w33*LC_c3;
theta=(1+exp(-w11*t))*(w22*y(i,2)/2+w23*y(i,3)/2-y(1,1));
ym=LD_d-theta;
yc(i)=ym;
error=ym-y(i,1);
E(j)=E(j)+abs(error);
error1=error*(1+exp(-w11*t));
error2=error*(1+exp(-w11*t));
error3=error*(1+exp(-w11*t));
error4=(1/(1+exp(-w11*t)))*(1-1/(1+exp(-w11*t)))*(w21*error1+w22*error2+w23*error3);
w22=w22-u1*error2*LB_b;
w23=w23-u2*error3*LB_b;
w11=w11+a*t*error4;
end
E(j)=E(j)/row1;
end
Smell(p)=min(E);
end
[bestSmell bestindex]=min(Smell);
%***利用视觉寻找伙伴聚集味道浓度最高之处,做法是保留最佳值初始位置及初始味道浓度
if bestSmell<Smellbest
X_axis=X(bestindex,:);
Y_axis=Y(bestindex,:);
bestS=S(bestindex,:);
besta=a;
bestb1=b1;
bestb2=b2;
Smellbest=bestSmell;
end
%***每代最优值纪录到yy 数组中
yy(gen)=Smellbest;
Xbest(gen,:)=X_axis;
Ybest(gen,:)=Y_axis;
end
%***绘制优化趋势图
%%%%预测开始
for i=16:20
t=i;
LB_b=1/(1+exp(-w11*t));
LC_c1=LB_b*w21;
LC_c2=y(i,2)*LB_b*w22;
LC_c3=y(i,3)*LB_b*w23;
LD_d=w31*LC_c1+w32*LC_c2+w33*LC_c3;
theta=(1+exp(-w11*t))*(w22*y(i,2)/2+w23*y(i,3)/2-y(1,1));
ym=LD_d-theta;
yc(i)=ym;
end
ys=0;
for j=20:-1:16
ys(j)=(yc(j)-yc(j-1));
end
ys
%%%%%%%%
besta;
bestb1;
bestb2;
figure(1)
plot(yy)
title('优化过程')
xlabel('迭代数');
ylabel('最小均方误差');
grid on
bestS;
Xbest;
Ybest;
figure(2)
plot(Xbest,Ybest,'r');
title('果蝇飞行路线连线图')
xlabel('X轴');ylabel('Y轴');
grid on
figure(3)
plot(Xbest,Ybest,'b.');
title('果蝇飞行路线点图')
xlabel('X轴');ylabel('Y轴');
grid on

数据:(data1.txt)

0.697 0.460 1
0.774 0.376 1
0.634 0.264 1
0.608 0.318 1
0.543 0.211 1
0.503 0.320 1
0.556 0.215 1
0.403 0.237 1
0.666 0.091 0
0.243 0.267 0
0.111 0.266 0
0.245 0.057 0
0.343 0.099 0
0.639 0.161 0
0.657 0.198 0
0.360 0.370 0
0.481 0.149 1
0.437 0.211 1
0.593 0.042 0
0.719 0.103 0

结论:

  通过将灰色神经网络的预测结果与果蝇优化算法优化灰色神经网络参数算法的预测结果可以得出,果蝇优化算法优化灰色神经网络参数算法在进行小样本数据的过程中,预测精度比灰色神经网络要高,且每次预测的结果相近似,结果稳定。通过使用果蝇优化算法优化灰色神经网络参数算法可以在对西瓜是否熟透进行预测的过程中,可以对西瓜的状态进行正确的预测,表明果蝇优化算法优化灰色神经网络参数可以应用于许多场合,且同时又良好的效果。此外,果蝇优化算法优化灰色神经网络参数算法也可以适用于多输入变量,大量数据样本的场合,这种情况下的实际效果会在以后的工作中进行展示。

参考文献:

[1] 周志华.机器学习[M].北京:清华大学出版社,2016.

[2] 高旭敏.灰色预测的新方法[J].软科学,1988(2):27-34.

[3] 谢科范.评灰色系统理论[J].系统工程,1991(4):51-54.

[4] 潘文超.应用果蝇优化算法优化广义回归神经网络进行企业经营绩效评估[J].太原理工大学学报(自然科学版),2011,29(4):1-5.

[5] 吴小文,李擎.果蝇算法和5种群智能算法的寻优性能研究[J].火力与指挥控制,2013,38(4):17-20.

[6] 孙立,董君依,李东海.基于果蝇算法的过热汽温自抗扰优化控制[J].清华大学学报(自然科学版),2014(10):1288-1292.

 

  

posted on 2020-05-10 23:44  桌子哥  阅读(3361)  评论(14编辑  收藏  举报