% 需要论文和代码,请联系:isfuture@outlook.com
clear;
X =[0.04250.04650.05050.05450.05850.06250.06650.07050.07450.07850.08250.08650.09050.09450.09850.10250.10650.11050.11450.11850.12250.12650.13050.13450.13850.14250.14650.15];
Y =[0.4477044830.094809717-0.042357953-0.1093183-0.029504019-0.08177512-0.05374639-0.067354229-0.078529943-0.066123709-0.004042344-0.010993686-0.0149899330.0202500780.0073733350.0135398640.0378409410.016710394-0.0001004780.0430739390.0244372320.0113482630.0154189150.0091662620.0028015280.009866109-0.021299217-0.044380264];scatter(X, Y,20,'filled');%axis([1212]);ylim([-0.350.35]);xlabel('贷款年利率');ylabel('客户流失率相对误差');title('B评级客户流失率相对误差');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
3、C评级客户流失率相对误差
%% 需要论文和代码,请联系:isfuture@outlook.com
clear;
X =[0.04250.04650.05050.05450.05850.06250.06650.07050.07450.07850.08250.08650.09050.09450.09850.10250.10650.11050.11450.11850.12250.12650.13050.13450.13850.14250.14650.15];
Y =[0.2410228730.1327602570.045307686-0.107807025-0.02105494-0.061770852-0.047328371-0.100791547-0.080190917-0.0372895850.004480784-0.0341608240.020210034-0.0136433130.008513513-0.006049881-0.0003835860.0427764030.0184947630.0097259450.0216475580.0261024980.0114341630.0088490480.0038776920.018148552-0.020697357-0.04726721];scatter(X, Y,20,'filled');%axis([1212]);ylim([-0.350.35]);xlabel('贷款年利率');ylabel('客户流失率相对误差');title('C评级客户流失率相对误差');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
4、金额图
% 需要论文和代码,请联系:isfuture@outlook.com
1
5、利率图
X =[123456789101112131415161718192021222324252627282930313233343537383940414243444647484950515354555657585960616263646566676869707172737475767778798081838485868889909192939495969798104105106110];
Y=[0.044698880.1076934060.0966198270.1446853720.066363030.1169445570.0698121320.050612350.0780946520.0832812230.0992007280.1400048690.0915639380.0697651650.067887770.0647397640.1081932380.0751334820.1263606850.0528008130.0831064870.1287671680.0806503810.0942755050.0490111690.1385510710.0830239760.0711786130.1360696270.1219757180.1270882310.0516430790.0964931280.0963958060.1163494020.1194650890.1194930270.1402318780.0594903460.1277808260.0960210220.0418140380.0644958060.0930696030.0684124790.0559951920.0944414360.0673722480.0551066260.0551083860.0933450620.0791707230.1370300950.0420810240.1072837910.1046535620.1276047690.0863071130.0429519280.1055698790.120130180.1394607410.0902647970.0937173760.078260720.1154615230.061381620.0979240080.0593094140.1229293980.0725188090.1482513970.0474916480.0752532140.1030247730.0539337380.1084335760.1284854280.1407709490.042374870.0502504730.0601570750.07629830.0676927230.0681720860.1034018430.092932620.0648918240.0823607030.0612594640.0795603980.0825332830.1107051290.082387750.0449393520.0710696880.086866292];plot(X, Y);%axis([1212]);ylim([0.030.16]);xlabel('企业代号');ylabel('贷款利率');title('各企业贷款利率');
1
2
3
4
5
6
7
8
9
10
11
6、模拟A等级曲线
@[TOC]
# 第一问
# 第二问
## 1、A评级客户流失率相对误差
```c
% 需要论文和代码,请联系:isfuture@outlook.com
clear;
X =[0.04250.04650.05050.05450.05850.06250.06650.07050.07450.07850.08250.08650.09050.09450.09850.10250.10650.11050.11450.11850.12250.12650.13050.13450.13850.14250.14650.15];
Y =[0.3095546080.3029800470.017579194-0.076669863-0.056297703-0.092750467-0.060296874-0.065628885-0.007390326-0.044560631-0.037774003-0.045669423-0.014690112-0.0065549970.0172504960.023616607-0.001116445-0.0009274420.035073570.0260731750.0461492310.0117342140.0052472290.0121989120.000411220.014946501-0.018942205-0.044111182];scatter(X, Y,20,'filled');%axis([1212]);ylim([-0.350.35]);xlabel('贷款年利率');ylabel('客户流失率相对误差');title('A评级客户流失率相对误差');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2、B评级客户流失率相对误差
% 需要论文和代码,请联系:isfuture@outlook.com
clear;
X =[0.04250.04650.05050.05450.05850.06250.06650.07050.07450.07850.08250.08650.09050.09450.09850.10250.10650.11050.11450.11850.12250.12650.13050.13450.13850.14250.14650.15];
Y =[0.4477044830.094809717-0.042357953-0.1093183-0.029504019-0.08177512-0.05374639-0.067354229-0.078529943-0.066123709-0.004042344-0.010993686-0.0149899330.0202500780.0073733350.0135398640.0378409410.016710394-0.0001004780.0430739390.0244372320.0113482630.0154189150.0091662620.0028015280.009866109-0.021299217-0.044380264];scatter(X, Y,20,'filled');%axis([1212]);ylim([-0.350.35]);xlabel('贷款年利率');ylabel('客户流失率相对误差');title('B评级客户流失率相对误差');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
3、C评级客户流失率相对误差
%% 需要论文和代码,请联系:isfuture@outlook.com
clear;
X =[0.04250.04650.05050.05450.05850.06250.06650.07050.07450.07850.08250.08650.09050.09450.09850.10250.10650.11050.11450.11850.12250.12650.13050.13450.13850.14250.14650.15];
Y =[0.2410228730.1327602570.045307686-0.107807025-0.02105494-0.061770852-0.047328371-0.100791547-0.080190917-0.0372895850.004480784-0.0341608240.020210034-0.0136433130.008513513-0.006049881-0.0003835860.0427764030.0184947630.0097259450.0216475580.0261024980.0114341630.0088490480.0038776920.018148552-0.020697357-0.04726721];scatter(X, Y,20,'filled');%axis([1212]);ylim([-0.350.35]);xlabel('贷款年利率');ylabel('客户流失率相对误差');title('C评级客户流失率相对误差');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
4、金额图
% 需要论文和代码,请联系:isfuture@outlook.com
X =[123456789101112131415161718192021222324252627282930313233343537383940414243444647484950515354555657585960616263646566676869707172737475767778798081838485868889909192939495969798104105106110];
Y=[96.0925662162.9209624287.2691709885.4036954549.477388145.4752742785.846878248.3747273882.2984351462.4696436740.0496689994.2061817552.4864876825.709285593.4682667557.0320820777.6867446693.0677890142.4420596131.8813714661.4560236492.5586312893.4582086935.7933689248.7146818348.8551653896.8088281525.2817811448.4781018788.3588126172.6502218682.4169449593.2200066398.6106455266.4867897791.618946640.4125205596.0205909437.0527593363.8239260984.2633017599.6704448571.2171747180.3348434562.4773164676.9228499354.6302141558.1004362441.0023444295.8707892443.1739483950.6834875837.1417024674.2508849144.5795893383.8620148675.8662612286.9181045954.4148030624.4165255887.3865556283.5775005140.9032784585.6673109196.1907675242.7628698756.5381256893.1788859482.0951717436.8757138166.8363956568.5053757129.2737755644.4085151778.715154239.4824345730.0629708241.6167935247.5869125579.2532590384.0878671594.9713383391.0213260191.3183853551.7041670619.233110851.4652685143.3837010872.7726705392.8411671251.165831446.2695556994.1268468291.1775062148.414312549.97333396.52759109];plot(X, Y);%axis([1212]);ylim([10110]);xlabel('企业代号');ylabel('贷款金额/万元');title('各企业贷款金额');
1
2
3
4
5
6
7
8
9
10
11
12
5、利率图
X =[123456789101112131415161718192021222324252627282930313233343537383940414243444647484950515354555657585960616263646566676869707172737475767778798081838485868889909192939495969798104105106110];
Y=[0.044698880.1076934060.0966198270.1446853720.066363030.1169445570.0698121320.050612350.0780946520.0832812230.0992007280.1400048690.0915639380.0697651650.067887770.0647397640.1081932380.0751334820.1263606850.0528008130.0831064870.1287671680.0806503810.0942755050.0490111690.1385510710.0830239760.0711786130.1360696270.1219757180.1270882310.0516430790.0964931280.0963958060.1163494020.1194650890.1194930270.1402318780.0594903460.1277808260.0960210220.0418140380.0644958060.0930696030.0684124790.0559951920.0944414360.0673722480.0551066260.0551083860.0933450620.0791707230.1370300950.0420810240.1072837910.1046535620.1276047690.0863071130.0429519280.1055698790.120130180.1394607410.0902647970.0937173760.078260720.1154615230.061381620.0979240080.0593094140.1229293980.0725188090.1482513970.0474916480.0752532140.1030247730.0539337380.1084335760.1284854280.1407709490.042374870.0502504730.0601570750.07629830.0676927230.0681720860.1034018430.092932620.0648918240.0823607030.0612594640.0795603980.0825332830.1107051290.082387750.0449393520.0710696880.086866292];plot(X, Y);%axis([1212]);ylim([0.030.16]);xlabel('企业代号');ylabel('贷款利率');title('各企业贷款利率');
1
2
3
4
5
6
7
8
9
10
11
6、模拟A等级曲线
X =[0.040.04250.04650.05050.05450.05850.06250.06650.07050.07450.07850.08250.08650.09050.09450.09850.10250.10650.11050.11450.11850.12250.12650.13050.13450.13850.14250.14650.15];
Y1=[00.0945741260.1357271830.2246033540.3020381020.3473156680.413471770.4478909730.4976344530.5110966120.5733930870.6094921150.6529447740.6675418430.6947799210.7083020230.7312754010.7750914050.7982273680.7905272660.8151969860.8144210290.8548110970.8703173430.8714280850.8859259450.8744346820.9027259090.922060687];
YY =[];
A =-200:0.1:-190;
B =-15:0.1:-11;
C =14:0.1:16;
D =-1:0.1:1;
E =[];
XA =[];
XC=[];
XB=[];
XD=[];
XX =[];
ii =0;
e =0;for i=1:length(A)
a=A(i);for j=1:length(B)
b=B(j);for p=1:length(D)
d=D(p);for k=1:length(C)
c=C(k);
e =0;for s=1:length(X)
x=X(s);
f = a*x^3+b*x^2+c*x+d;
e = e+(f-Y1(s))^2;
end
if e <0.02255
ii = ii +1;XA(ii)=a;XB(ii)=b;XC(ii)=c;XD(ii)=d;XX(ii)= ii;E(ii)= e;
end
end
end
end
end
[~,position]=min(E);XA(position)XB(position)XC(position)XD(position)plot(XX, E);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
7、模拟B等级曲线
X =[0.040.04250.04650.05050.05450.05850.06250.06650.07050.07450.07850.08250.08650.09050.09450.09850.10250.10650.11050.11450.11850.12250.12650.13050.13450.13850.14250.14650.15];
Y1=[00.0945741260.1357271830.2246033540.3020381020.3473156680.413471770.4478909730.4976344530.5110966120.5733930870.6094921150.6529447740.6675418430.6947799210.7083020230.7312754010.7750914050.7982273680.7905272660.8151969860.8144210290.8548110970.8703173430.8714280850.8859259450.8744346820.9027259090.922060687];
Y2=[00.0667995830.135052060.206580080.2768122930.3028834010.3702158520.4062966680.4582952950.5087186920.5444088370.5484939580.5887656960.6257645760.6356051460.6735274240.6969254310.7053159930.7429363260.7764007290.7620225950.7915036970.8149989330.8222978610.8353016020.8457477450.8420708440.8681595360.885864919];
Y3=[00.0687253060.1220990290.1812521460.2633028630.2901890980.349715590.3907716830.457238070.4926604330.5136602390.5302487060.5877624080.5900970450.6429936560.6588394160.6968705730.7191035520.7111012370.7506276560.7768160430.7844805120.7955662740.8200514340.8322884220.8440898750.8369743260.8725589570.895164739];
A =-200:0.1:-190;
B =-10:0.1:-8;
C =14:0.1:16;
D =-1:0.1:1;
E =[];
XA =[];
XC=[];
XB=[];
XD=[];
XX =[];
ii =0;
e =0;for i=1:length(A)
a=A(i);for j=1:length(B)
b=B(j);for p=1:length(D)
d=D(p);for k=1:length(C)
c=C(k);
e =0;for s=1:length(X)
x=X(s);
f = a*x^3+b*x^2+c*x+d;
e = e+(f-Y2(s))^2;
end
if e <0.02255
ii = ii +1;XA(ii)=a;XB(ii)=b;XC(ii)=c;XD(ii)=d;XX(ii)= ii;E(ii)= e;
end
end
end
end
end
[~,position]=min(E);XA(position)XB(position)XC(position)XD(position)plot(XX, E);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
8、模拟C等级曲线
X =[0.040.04250.04650.05050.05450.05850.06250.06650.07050.07450.07850.08250.08650.09050.09450.09850.10250.10650.11050.11450.11850.12250.12650.13050.13450.13850.14250.14650.15];
Y1=[00.0945741260.1357271830.2246033540.3020381020.3473156680.413471770.4478909730.4976344530.5110966120.5733930870.6094921150.6529447740.6675418430.6947799210.7083020230.7312754010.7750914050.7982273680.7905272660.8151969860.8144210290.8548110970.8703173430.8714280850.8859259450.8744346820.9027259090.922060687];
Y2=[00.0667995830.135052060.206580080.2768122930.3028834010.3702158520.4062966680.4582952950.5087186920.5444088370.5484939580.5887656960.6257645760.6356051460.6735274240.6969254310.7053159930.7429363260.7764007290.7620225950.7915036970.8149989330.8222978610.8353016020.8457477450.8420708440.8681595360.885864919];
Y3=[00.0687253060.1220990290.1812521460.2633028630.2901890980.349715590.3907716830.457238070.4926604330.5136602390.5302487060.5877624080.5900970450.6429936560.6588394160.6968705730.7191035520.7111012370.7506276560.7768160430.7844805120.7955662740.8200514340.8322884220.8440898750.8369743260.8725589570.895164739];
A =-165:0.1:-160;
B =-15:0.1:-10;
C =14:0.1:16;
D =-1:0.1:1;
E =[];
XA =[];
XC=[];
XB=[];
XD=[];
XX =[];
ii =0;
e =0;for i=1:length(A)
a=A(i);for j=1:length(B)
b=B(j);for p=1:length(D)
d=D(p);for k=1:length(C)
c=C(k);
e =0;for s=1:length(X)
x=X(s);
f = a*x^3+b*x^2+c*x+d;
e = e+(f-Y3(s))^2;
end
if e <0.02255
ii = ii +1;XA(ii)=a;XB(ii)=b;XC(ii)=c;XD(ii)=d;XX(ii)= ii;E(ii)= e;
end
end
end
end
end
[~,position]=min(E);XA(position)XB(position)XC(position)XD(position)plot(XX, E);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
09、信誉评级A客户流失率实际值与预测曲线
clear;
X =[0.040.04250.04650.05050.05450.05850.06250.06650.07050.07450.07850.08250.08650.09050.09450.09850.10250.10650.11050.11450.11850.12250.12650.13050.13450.13850.14250.14650.15];
Y1=[00.0945741260.1357271830.2246033540.3020381020.3473156680.413471770.4478909730.4976344530.5110966120.5733930870.6094921150.6529447740.6675418430.6947799210.7083020230.7312754010.7750914050.7982273680.7905272660.8151969860.8144210290.8548110970.8703173430.8714280850.8859259450.8744346820.9027259090.922060687];
a=-194.7;
b=-13.4;
c=15.6;
d=-0.5;for i=1:length(X)
x=X(i);
f = a*x^3+b*x^2+c*x+d;F(i)= f;
end
plot(X, Y1,'*');
hold on;plot(X, F,'r','linewidth',2);axis([0.020.1801]);xlabel('贷款年利率');ylabel('信誉评级A客户流失率');title('信誉评级A客户流失率实际值与预测曲线');legend('实际值','预测曲线');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
10、信誉评级B客户流失率实际值与预测曲线
clear;
X =[0.040.04250.04650.05050.05450.05850.06250.06650.07050.07450.07850.08250.08650.09050.09450.09850.10250.10650.11050.11450.11850.12250.12650.13050.13450.13850.14250.14650.15];
Y2=[00.0667995830.135052060.206580080.2768122930.3028834010.3702158520.4062966680.4582952950.5087186920.5444088370.5484939580.5887656960.6257645760.6356051460.6735274240.6969254310.7053159930.7429363260.7764007290.7620225950.7915036970.8149989330.8222978610.8353016020.8457477450.8420708440.8681595360.885864919];
a=-194.8;
b=-9.6;
c=14.8;
d=-0.5;for i=1:length(X)
x=X(i);
f = a*x^3+b*x^2+c*x+d;F(i)= f;
end
plot(X, Y2,'*');
hold on;plot(X, F,'r','linewidth',2);axis([0.020.1801]);xlabel('贷款年利率');ylabel('信誉评级B客户流失率');title('信誉评级B客户流失率实际值与预测曲线');legend('实际值','预测曲线');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
11、信誉评级C客户流失率实际值与预测曲线
clear;
X =[0.040.04250.04650.05050.05450.05850.06250.06650.07050.07450.07850.08250.08650.09050.09450.09850.10250.10650.11050.11450.11850.12250.12650.13050.13450.13850.14250.14650.15];
Y3=[00.0687253060.1220990290.1812521460.2633028630.2901890980.349715590.3907716830.457238070.4926604330.5136602390.5302487060.5877624080.5900970450.6429936560.6588394160.6968705730.7191035520.7111012370.7506276560.7768160430.7844805120.7955662740.8200514340.8322884220.8440898750.8369743260.8725589570.895164739];
a=-159.7;
b=-14.5;
c=14.8;
d=-0.5;
F =[];for i=1:length(X)
x=X(i);
f = a*x^3+b*x^2+c*x+d;F(i)= f;
end
plot(X, Y3,'*');
hold on;plot(X, F,'r','linewidth',2);axis([0.020.1801]);xlabel('贷款年利率');ylabel('信誉评级C客户流失率');title('信誉评级C客户流失率实际值与预测曲线');legend('实际值','预测曲线');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
12、求最优解
clear;
a1=-194.7;
b1=-13.4;
c1=15.6;
d1=-0.5;
a2=-194.8;
b2=-9.6;
c2=14.8;
d2=-0.5;
a3=-159.7;
b3=-14.5;
c3=14.8;
d3=-0.5;% 代号-得分-等级
E_Z_DJ =[10.1172920.11739120.58347250.11637340.11517380.18417450.14477470.11577490.11677530.11557560.11557600.15797610.20097620.83227630.11657640.10615660.1135690.33245710.11667730.11617750.11527760.12635770.11577780.11617800.11385820.11787860.11487870.11325880.11465890.11885900.11567910.11537920.11425930.11245940.10585950.10985960.11115980.11295990.113871000.112251020.116471030.138271040.166271050.114771060.115671070.114951080.112851090.114971100.112951110.113251120.113451130.112651140.111151150.113451160.112551170.106851180.113451190.106251200.113451210.111851220.112651230.170951240.112851250.112351260.11351270.112351280.138151290.112751300.11251310.114151320.112651330.114551340.112451350.11351360.111951370.112751380.112851390.113451400.11251410.105751420.111851430.113251440.113651450.133351460.112651470.111951480.111551490.112351500.114851510.115351520.111751530.111651540.112951550.112851560.112751570.113251580.112951590.111551600.113251610.112651620.111851630.111551640.111951650.111851660.113351670.112751680.111351690.114151700.113351710.112551720.111851730.111551740.112451750.119251760.112651770.112551780.112851790.112351800.112951810.113551820.112751830.112351840.112351850.112851860.111651870.112951880.112251890.112951900.11351910.112151920.114551930.112551940.111751950.112751960.113951970.112751980.114451990.112852000.110852010.111852020.115652030.112752040.112952050.112352060.563352070.116652080.112652090.113252100.112952110.11352120.112352130.116552140.115552150.113152160.113352170.114352180.113452190.111852200.154552210.112652220.112452230.113252240.115252250.120652260.115152270.112352280.112552290.112652300.111752310.113952320.157452330.163352340.1352350.184452360.13452370.242152380.111852390.112352400.11852410.113252420.112452430.113852440.121352450.110752460.112952470.252652480.112152490.113452500.113352510.135152520.210752530.115752540.130552550.11252560.110552570.171152580.111552590.182152600.116452610.11252620.108652630.111952640.119852650.121952660.118652670.113852680.156252690.11452700.142652710.107552720.110752730.112352740.116652750.113952760.112852770.120852780.110152790.112152800.112752810.110952820.110352830.112252840.110952850.112152860.115452870.114952880.112252890.113952900.113952910.112452920.210452930.112952940.113552950.112652960.113352970.11352980.113952990.115353000.112253010.117953020.10985];
E =E_Z_DJ(:,1);
DJ =E_Z_DJ(:,3);
Z =E_Z_DJ(:,2);
fun_range =[0,3.08;0,2.1];%每个维度的求解范围,行代表维度,第一列最小值,第二列最大值
density =0.01;%图像中取点的密度
d =2;%维度
popsize =10;%种群大小
maxgen =100;%最大迭代次数
limit_v =10;%最大运动速度
maxormin =0;%求最大值还是最小值。最大值为1,最小值为0
dynamic =1;%是否采用动态参数
W =[0.7,1.4];%惯性因子
C2 =[0.5,2.5];
C1 =[0.5,2.5];%学习因子。
ZZ =pso1_im(funct,fun_range,density,d);[x,v,fitness,pbest,gbest,gbest_fitness,gbest_index,pbest_fitness]=...pso1_in(funct,popsize,d,fun_range,limit_v,maxormin);[gbest_fitness,gbest_index,record]=...pso1_in2(funct,d,popsize,maxgen,dynamic,W,C1,C2,fun_range,limit_v,density...,x,v,fitness,pbest,gbest,gbest_fitness,gbest_index,pbest_fitness,maxormin);% sigma =4:1:15; 年利率
% D =10:1:100;% 投放金额
T =1;%周期为 1 年
M =10000;% 总贷款额度1亿
Sigma =[];
DD =[];
Beta =[];
W =[];% 利润,即最大化目标
Z_S =ones(1,length(E));% 每个利率 1不用管
Z_D =ones(1,length(E));% 每个投资
N =10000;% 迭代次数
nnn =0;for i=1:1:N
Sigma =[];% 该次遍历的利率
DD =[];% 该次遍历的贷款
w =0;% 该次遍历的目标值
for j=1:length(E)Sigma(j)=0.04+(0.15-0.04).*rand(1,1);
x =Sigma(j);DD(j)=10+(100-10).*rand(1,1);
d =DD(j);ifDJ(j)==1Beta(j)= a1*x^3+b1*x^2+c1*x+d1;
elseif DJ(j)==2Beta(j)= a2*x^3+b2*x^2+c2*x+d2;elseBeta(j)= a3*x^3+b3*x^2+c3*x+d3;
end
w = w + d*x*(1-Beta(j))*Z(j);
end
if w >60
nnn = nnn+1;W(nnn)= w;Z_S(nnn,:)=Sigma(:);Z_D(nnn,:)=DD(:);
end
end
XX =1:1:nnn;plot(XX, W,'*');for i=1:length(Z_S(:,1))sum(Z_D(i,:))
end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
13、神经网络
import numpy as np
import pandas as pd
import time
import tensorflow.compat.v1 as tf # 本行报错不用处理
tf.disable_v2_behavior()
# 图网络 和 生成对抗网络
IN_DIV =24 # 输入维度
OUT_DIV =4 # 输出维度
nIter =10000 # 迭代次数为 10000 次
speed =0.08
N =100 # 每层神经元个数
NATrain =25 # 每一类的训练样本数
NBTrain =25
NCTrain =30
NDTrain =20
NATest =2 # 每一类的测试样本数
NBTest =13
NCTest =4
NDTest =4
# 数据集导入
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
train = np.array(train)
test = np.array(test)
def noramlization(data):
minVals = data.min(0)
maxVals = data.max(0)
ranges = maxVals - minVals
normData = np.zeros(np.shape(data))
m = data.shape[0]
normData = data - np.tile(minVals,(m,1))
normData = normData/np.tile(ranges,(m,1))return normData, ranges, minVals
A_train = train[0:NATrain,:]
B_train = train[NATrain:NATrain+NBTrain,:]
C_train = train[NATrain+NBTrain:NATrain+NBTrain+NCTrain,:]
D_train = train[NATrain+NBTrain+NCTrain:,:]
A_test = test[0:NATest,:]
B_test = test[NATest:NATest+NBTest,:]
C_test = test[NATest+NBTest:NATest+NBTest+NCTest,:]
D_test = test[NATest+NBTest+NCTest:,:]
# 数据格式化
X_train = np.vstack((A_train, B_train, C_train, D_train))
X_test = np.vstack((A_test, B_test, C_test, D_test))
train_label = np.matrix([[1,0,0,0]]* NATrain +[[0,1,0,0]]* NBTrain +[[0,0,1,0]]* NCTrain + \
[[0,0,0,1]]* NDTrain)
test_label = np.matrix([[1,0,0,0]]* NATest +[[0,1,0,0]]* NBTest +[[0,0,1,0]]* NCTest + \
[[0,0,0,1]]* NDTest)print(test_label)'''
我们采用三层前向神经网络来优化这个任务, 其中每层的神经元个数取20,
初始化取 xavier initialization,优化处理器取 GradientDescentOptimizer,
学习率取 0.001, 激活函数选取 sigmoid 函数, 迭代次数为 1000.'''
layers =[IN_DIV, N, N, N, OUT_DIV] # 输入层 2 个维度,中间层为 3 层,每层 20 个神经元,输出层维度为 5,因为要分为 5 类
#defineneuralnetwork structure#tf.palceholder
x_tf = tf.placeholder(tf.float32, shape=[None, X_train.shape[1]])
y_tf = tf.placeholder(tf.float32, shape=[None, train_label.shape[1]])
def initialize_NN(layers):
weights =[] # 权重矩阵
biases =[] # 截距矩阵 Y = W*X + b
num_layers =len(layers)for l in range(0, num_layers -1):
W =xavier_init(size=[layers[l], layers[l +1]])
b = tf.Variable(tf.zeros([1, layers[l +1]], dtype=tf.float32), dtype=tf.float32)
weights.append(W)
biases.append(b)return weights, biases
def xavier_init(size):
in_dim = size[0] # 第 n 层的维度
out_dim = size[1] # 第 n+1 层的维度
xavier_stddev = np.sqrt(2/(in_dim + out_dim)) # 使用 xavier 对权重进行初始化
return tf.Variable(tf.truncated_normal([in_dim, out_dim], stddev=xavier_stddev), dtype=tf.float32)
# 定义神经网络
def neural_net(X, weights, biases):
num_layers =len(weights)+1 # 神经网络层数
H = X
for l in range(0, num_layers -2):
W = weights[l]
b = biases[l]
H = tf.sigmoid(tf.add(tf.matmul(H, W), b))
W = weights[-1]
b = biases[-1]
Y = tf.add(tf.matmul(H, W), b)return Y
in_weights, in_biases =initialize_NN(layers)
def net(X):
h =neural_net(X, in_weights, in_biases)return h
output =net(x_tf)#loss
y_model = tf.nn.softmax(output)
loss =-tf.reduce_sum(y_tf * tf.log(y_model))
correct_prediction = tf.equal(tf.argmax(y_model,1), tf.argmax(y_tf,1))
accuracy =0#Optimization
# 100001000.08
optimizer_GradientDescent = tf.train.GradientDescentOptimizer(speed)
train_op_Adam = optimizer_GradientDescent.minimize(loss)#tfsession
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
tf_dict ={x_tf: X_train, y_tf: train_label}
start_time = time.time()for it in range(nIter):
sess.run(train_op_Adam, tf_dict)#Printif it %1000==0:
elapsed = time.time()- start_time
loss_value = sess.run(loss, tf_dict)print('It: %d, Loss: %.7e, Time: %.2f'%(it, loss_value, elapsed))
start_time = time.time()for i in range(23):
accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float"))
XX =[[]]
XX[0]= X_test[i]
X = XX
Y = test_label[i]
a = sess.run(accuracy, feed_dict={x_tf: X, y_tf: Y})if a==1:print(i+1)
accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float"))
accuracy = sess.run(accuracy, feed_dict={x_tf: X_test, y_tf: test_label})print(accuracy)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
一些图片
## 7、模拟B等级曲线
```c
X = [0.04 0.0425 0.0465 0.0505 0.0545 0.0585 0.0625 0.0665 0.0705 0.0745 0.0785 0.0825 0.0865 0.0905 0.0945 0.0985 0.1025 0.1065 0.1105 0.1145 0.1185 0.1225 0.1265 0.1305 0.1345 0.1385 0.1425 0.1465 0.15
];
Y1=[0 0.094574126 0.135727183 0.224603354 0.302038102 0.347315668 0.41347177 0.447890973 0.497634453 0.511096612 0.573393087 0.609492115 0.652944774 0.667541843 0.694779921 0.708302023 0.731275401 0.775091405 0.798227368 0.790527266 0.815196986 0.814421029 0.854811097 0.870317343 0.871428085 0.885925945 0.874434682 0.902725909 0.922060687];
Y2=[0 0.066799583 0.13505206 0.20658008 0.276812293 0.302883401 0.370215852 0.406296668 0.458295295 0.508718692 0.544408837 0.548493958 0.588765696 0.625764576 0.635605146 0.673527424 0.696925431 0.705315993 0.742936326 0.776400729 0.762022595 0.791503697 0.814998933 0.822297861 0.835301602 0.845747745 0.842070844 0.868159536 0.885864919];
Y3=[0 0.068725306 0.122099029 0.181252146 0.263302863 0.290189098 0.34971559 0.390771683 0.45723807 0.492660433 0.513660239 0.530248706 0.587762408 0.590097045 0.642993656 0.658839416 0.696870573 0.719103552 0.711101237 0.750627656 0.776816043 0.784480512 0.795566274 0.820051434 0.832288422 0.844089875 0.836974326 0.872558957 0.895164739];
A = -200:0.1:-190;
B = -10:0.1:-8;
C = 14:0.1:16;
D = -1:0.1:1;
E = [];
XA = [];
XC=[];
XB=[];
XD=[];
XX = [];
ii = 0;
e = 0;
for i=1:length(A)
a=A(i);
for j=1:length(B)
b=B(j);
for p=1:length(D)
d=D(p);
for k=1:length(C)
c=C(k);
e = 0;
for s=1:length(X)
x=X(s);
f = a*x^3+b*x^2+c*x+d;
e = e+(f-Y2(s))^2;
end
if e < 0.02255
ii = ii + 1;
XA(ii) =a;
XB(ii)=b;
XC(ii)=c;
XD(ii)=d;
XX(ii) = ii;
E(ii) = e;
end
end
end
end
end
[~,position]=min(E);
XA(position)
XB(position)
XC(position)
XD(position)
plot(XX, E);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
8、模拟C等级曲线
X =[0.040.04250.04650.05050.05450.05850.06250.06650.07050.07450.07850.08250.08650.09050.09450.09850.10250.10650.11050.11450.11850.12250.12650.13050.13450.13850.14250.14650.15];
Y1=[00.0945741260.1357271830.2246033540.3020381020.3473156680.413471770.4478909730.4976344530.5110966120.5733930870.6094921150.6529447740.6675418430.6947799210.7083020230.7312754010.7750914050.7982273680.7905272660.8151969860.8144210290.8548110970.8703173430.8714280850.8859259450.8744346820.9027259090.922060687];
Y2=[00.0667995830.135052060.206580080.2768122930.3028834010.3702158520.4062966680.4582952950.5087186920.5444088370.5484939580.5887656960.6257645760.6356051460.6735274240.6969254310.7053159930.7429363260.7764007290.7620225950.7915036970.8149989330.8222978610.8353016020.8457477450.8420708440.8681595360.885864919];
Y3=[00.0687253060.1220990290.1812521460.2633028630.2901890980.349715590.3907716830.457238070.4926604330.5136602390.5302487060.5877624080.5900970450.6429936560.6588394160.6968705730.7191035520.7111012370.7506276560.7768160430.7844805120.7955662740.8200514340.8322884220.8440898750.8369743260.8725589570.895164739];
A =-165:0.1:-160;
B =-15:0.1:-10;
C =14:0.1:16;
D =-1:0.1:1;
E =[];
XA =[];
XC=[];
XB=[];
XD=[];
XX =[];
ii =0;
e =0;for i=1:length(A)
a=A(i);for j=1:length(B)
b=B(j);for p=1:length(D)
d=D(p);for k=1:length(C)
c=C(k);
e =0;for s=1:length(X)
x=X(s);
f = a*x^3+b*x^2+c*x+d;
e = e+(f-Y3(s))^2;
end
if e <0.02255
ii = ii +1;XA(ii)=a;XB(ii)=b;XC(ii)=c;XD(ii)=d;XX(ii)= ii;E(ii)= e;
end
end
end
end
end
[~,position]=min(E);XA(position)XB(position)XC(position)XD(position)plot(XX, E);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
09、信誉评级A客户流失率实际值与预测曲线
clear;
X =[0.040.04250.04650.05050.05450.05850.06250.06650.07050.07450.07850.08250.08650.09050.09450.09850.10250.10650.11050.11450.11850.12250.12650.13050.13450.13850.14250.14650.15];
Y1=[00.0945741260.1357271830.2246033540.3020381020.3473156680.413471770.4478909730.4976344530.5110966120.5733930870.6094921150.6529447740.6675418430.6947799210.7083020230.7312754010.7750914050.7982273680.7905272660.8151969860.8144210290.8548110970.8703173430.8714280850.8859259450.8744346820.9027259090.922060687];
a=-194.7;
b=-13.4;
c=15.6;
d=-0.5;for i=1:length(X)
x=X(i);
f = a*x^3+b*x^2+c*x+d;F(i)= f;
end
plot(X, Y1,'*');
hold on;plot(X, F,'r','linewidth',2);axis([0.020.1801]);xlabel('贷款年利率');ylabel('信誉评级A客户流失率');title('信誉评级A客户流失率实际值与预测曲线');legend('实际值','预测曲线');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
10、信誉评级B客户流失率实际值与预测曲线
clear;
X =[0.040.04250.04650.05050.05450.05850.06250.06650.07050.07450.07850.08250.08650.09050.09450.09850.10250.10650.11050.11450.11850.12250.12650.13050.13450.13850.14250.14650.15];
Y2=[00.0667995830.135052060.206580080.2768122930.3028834010.3702158520.4062966680.4582952950.5087186920.5444088370.5484939580.5887656960.6257645760.6356051460.6735274240.6969254310.7053159930.7429363260.7764007290.7620225950.7915036970.8149989330.8222978610.8353016020.8457477450.8420708440.8681595360.885864919];
a=-194.8;
b=-9.6;
c=14.8;
d=-0.5;for i=1:length(X)
x=X(i);
f = a*x^3+b*x^2+c*x+d;F(i)= f;
end
plot(X, Y2,'*');
hold on;plot(X, F,'r','linewidth',2);axis([0.020.1801]);xlabel('贷款年利率');ylabel('信誉评级B客户流失率');title('信誉评级B客户流失率实际值与预测曲线');legend('实际值','预测曲线');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
11、信誉评级C客户流失率实际值与预测曲线
clear;
X =[0.040.04250.04650.05050.05450.05850.06250.06650.07050.07450.07850.08250.08650.09050.09450.09850.10250.10650.11050.11450.11850.12250.12650.13050.13450.13850.14250.14650.15];
Y3=[00.0687253060.1220990290.1812521460.2633028630.2901890980.349715590.3907716830.457238070.4926604330.5136602390.5302487060.5877624080.5900970450.6429936560.6588394160.6968705730.7191035520.7111012370.7506276560.7768160430.7844805120.7955662740.8200514340.8322884220.8440898750.8369743260.8725589570.895164739];
a=-159.7;
b=-14.5;
c=14.8;
d=-0.5;
F =[];for i=1:length(X)
x=X(i);
f = a*x^3+b*x^2+c*x+d;F(i)= f;
end
plot(X, Y3,'*');
hold on;plot(X, F,'r','linewidth',2);axis([0.020.1801]);xlabel('贷款年利率');ylabel('信誉评级C客户流失率');title('信誉评级C客户流失率实际值与预测曲线');legend('实际值','预测曲线');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
12、求最优解
clear;
a1=-194.7;
b1=-13.4;
c1=15.6;
d1=-0.5;
a2=-194.8;
b2=-9.6;
c2=14.8;
d2=-0.5;
a3=-159.7;
b3=-14.5;
c3=14.8;
d3=-0.5;% 代号-得分-等级
E_Z_DJ =[10.1172920.11739120.58347250.11637340.11517380.18417450.14477470.11577490.11677530.11557560.11557600.15797610.20097620.83227630.11657640.10615660.1135690.33245710.11667730.11617750.11527760.12635770.11577780.11617800.11385820.11787860.11487870.11325880.11465890.11885900.11567910.11537920.11425930.11245940.10585950.10985960.11115980.11295990.113871000.112251020.116471030.138271040.166271050.114771060.115671070.114951080.112851090.114971100.112951110.113251120.113451130.112651140.111151150.113451160.112551170.106851180.113451190.106251200.113451210.111851220.112651230.170951240.112851250.112351260.11351270.112351280.138151290.112751300.11251310.114151320.112651330.114551340.112451350.11351360.111951370.112751380.112851390.113451400.11251410.105751420.111851430.113251440.113651450.133351460.112651470.111951480.111551490.112351500.114851510.115351520.111751530.111651540.112951550.112851560.112751570.113251580.112951590.111551600.113251610.112651620.111851630.111551640.111951650.111851660.113351670.112751680.111351690.114151700.113351710.112551720.111851730.111551740.112451750.119251760.112651770.112551780.112851790.112351800.112951810.113551820.112751830.112351840.112351850.112851860.111651870.112951880.112251890.112951900.11351910.112151920.114551930.112551940.111751950.112751960.113951970.112751980.114451990.112852000.110852010.111852020.115652030.112752040.112952050.112352060.563352070.116652080.112652090.113252100.112952110.11352120.112352130.116552140.115552150.113152160.113352170.114352180.113452190.111852200.154552210.112652220.112452230.113252240.115252250.120652260.115152270.112352280.112552290.112652300.111752310.113952320.157452330.163352340.1352350.184452360.13452370.242152380.111852390.112352400.11852410.113252420.112452430.113852440.121352450.110752460.112952470.252652480.112152490.113452500.113352510.135152520.210752530.115752540.130552550.11252560.110552570.171152580.111552590.182152600.116452610.11252620.108652630.111952640.119852650.121952660.118652670.113852680.156252690.11452700.142652710.107552720.110752730.112352740.116652750.113952760.112852770.120852780.110152790.112152800.112752810.110952820.110352830.112252840.110952850.112152860.115452870.114952880.112252890.113952900.113952910.112452920.210452930.112952940.113552950.112652960.113352970.11352980.113952990.115353000.112253010.117953020.10985];
E =E_Z_DJ(:,1);
DJ =E_Z_DJ(:,3);
Z =E_Z_DJ(:,2);
fun_range =[0,3.08;0,2.1];%每个维度的求解范围,行代表维度,第一列最小值,第二列最大值
density =0.01;%图像中取点的密度
d =2;%维度
popsize =10;%种群大小
maxgen =100;%最大迭代次数
limit_v =10;%最大运动速度
maxormin =0;%求最大值还是最小值。最大值为1,最小值为0
dynamic =1;%是否采用动态参数
W =[0.7,1.4];%惯性因子
C2 =[0.5,2.5];
C1 =[0.5,2.5];%学习因子。
ZZ =pso1_im(funct,fun_range,density,d);[x,v,fitness,pbest,gbest,gbest_fitness,gbest_index,pbest_fitness]=...pso1_in(funct,popsize,d,fun_range,limit_v,maxormin);[gbest_fitness,gbest_index,record]=...pso1_in2(funct,d,popsize,maxgen,dynamic,W,C1,C2,fun_range,limit_v,density...,x,v,fitness,pbest,gbest,gbest_fitness,gbest_index,pbest_fitness,maxormin);% sigma =4:1:15; 年利率
% D =10:1:100;% 投放金额
T =1;%周期为 1 年
M =10000;% 总贷款额度1亿
Sigma =[];
DD =[];
Beta =[];
W =[];% 利润,即最大化目标
Z_S =ones(1,length(E));% 每个利率 1不用管
Z_D =ones(1,length(E));% 每个投资
N =10000;% 迭代次数
nnn =0;for i=1:1:N
Sigma =[];% 该次遍历的利率
DD =[];% 该次遍历的贷款
w =0;% 该次遍历的目标值
for j=1:length(E)Sigma(j)=0.04+(0.15-0.04).*rand(1,1);
x =Sigma(j);DD(j)=10+(100-10).*rand(1,1);
d =DD(j);ifDJ(j)==1Beta(j)= a1*x^3+b1*x^2+c1*x+d1;
elseif DJ(j)==2Beta(j)= a2*x^3+b2*x^2+c2*x+d2;elseBeta(j)= a3*x^3+b3*x^2+c3*x+d3;
end
w = w + d*x*(1-Beta(j))*Z(j);
end
if w >60
nnn = nnn+1;W(nnn)= w;Z_S(nnn,:)=Sigma(:);Z_D(nnn,:)=DD(:);
end
end
XX =1:1:nnn;plot(XX, W,'*');for i=1:length(Z_S(:,1))sum(Z_D(i,:))
end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
13、神经网络
import numpy as np
import pandas as pd
import time
import tensorflow.compat.v1 as tf # 本行报错不用处理
tf.disable_v2_behavior()
# 图网络 和 生成对抗网络
IN_DIV =24 # 输入维度
OUT_DIV =4 # 输出维度
nIter =10000 # 迭代次数为 10000 次
speed =0.08
N =100 # 每层神经元个数
NATrain =25 # 每一类的训练样本数
NBTrain =25
NCTrain =30
NDTrain =20
NATest =2 # 每一类的测试样本数
NBTest =13
NCTest =4
NDTest =4
# 数据集导入
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
train = np.array(train)
test = np.array(test)
def noramlization(data):
minVals = data.min(0)
maxVals = data.max(0)
ranges = maxVals - minVals
normData = np.zeros(np.shape(data))
m = data.shape[0]
normData = data - np.tile(minVals,(m,1))
normData = normData/np.tile(ranges,(m,1))return normData, ranges, minVals
A_train = train[0:NATrain,:]
B_train = train[NATrain:NATrain+NBTrain,:]
C_train = train[NATrain+NBTrain:NATrain+NBTrain+NCTrain,:]
D_train = train[NATrain+NBTrain+NCTrain:,:]
A_test = test[0:NATest,:]
B_test = test[NATest:NATest+NBTest,:]
C_test = test[NATest+NBTest:NATest+NBTest+NCTest,:]
D_test = test[NATest+NBTest+NCTest:,:]
# 数据格式化
X_train = np.vstack((A_train, B_train, C_train, D_train))
X_test = np.vstack((A_test, B_test, C_test, D_test))
train_label = np.matrix([[1,0,0,0]]* NATrain +[[0,1,0,0]]* NBTrain +[[0,0,1,0]]* NCTrain + \
[[0,0,0,1]]* NDTrain)
test_label = np.matrix([[1,0,0,0]]* NATest +[[0,1,0,0]]* NBTest +[[0,0,1,0]]* NCTest + \
[[0,0,0,1]]* NDTest)print(test_label)'''
我们采用三层前向神经网络来优化这个任务, 其中每层的神经元个数取20,
初始化取 xavier initialization,优化处理器取 GradientDescentOptimizer,
学习率取 0.001, 激活函数选取 sigmoid 函数, 迭代次数为 1000.'''
layers =[IN_DIV, N, N, N, OUT_DIV] # 输入层 2 个维度,中间层为 3 层,每层 20 个神经元,输出层维度为 5,因为要分为 5 类
#defineneuralnetwork structure#tf.palceholder
x_tf = tf.placeholder(tf.float32, shape=[None, X_train.shape[1]])
y_tf = tf.placeholder(tf.float32, shape=[None, train_label.shape[1]])
def initialize_NN(layers):
weights =[] # 权重矩阵
biases =[] # 截距矩阵 Y = W*X + b
num_layers =len(layers)for l in range(0, num_layers -1):
W =xavier_init(size=[layers[l], layers[l +1]])
b = tf.Variable(tf.zeros([1, layers[l +1]], dtype=tf.float32), dtype=tf.float32)
weights.append(W)
biases.append(b)return weights, biases
def xavier_init(size):
in_dim = size[0] # 第 n 层的维度
out_dim = size[1] # 第 n+1 层的维度
xavier_stddev = np.sqrt(2/(in_dim + out_dim)) # 使用 xavier 对权重进行初始化
return tf.Variable(tf.truncated_normal([in_dim, out_dim], stddev=xavier_stddev), dtype=tf.float32)
# 定义神经网络
def neural_net(X, weights, biases):
num_layers =len(weights)+1 # 神经网络层数
H = X
for l in range(0, num_layers -2):
W = weights[l]
b = biases[l]
H = tf.sigmoid(tf.add(tf.matmul(H, W), b))
W = weights[-1]
b = biases[-1]
Y = tf.add(tf.matmul(H, W), b)return Y
in_weights, in_biases =initialize_NN(layers)
def net(X):
h =neural_net(X, in_weights, in_biases)return h
output =net(x_tf)#loss
y_model = tf.nn.softmax(output)
loss =-tf.reduce_sum(y_tf * tf.log(y_model))
correct_prediction = tf.equal(tf.argmax(y_model,1), tf.argmax(y_tf,1))
accuracy =0#Optimization
# 100001000.08
optimizer_GradientDescent = tf.train.GradientDescentOptimizer(speed)
train_op_Adam = optimizer_GradientDescent.minimize(loss)#tfsession
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
tf_dict ={x_tf: X_train, y_tf: train_label}
start_time = time.time()for it in range(nIter):
sess.run(train_op_Adam, tf_dict)#Printif it %1000==0:
elapsed = time.time()- start_time
loss_value = sess.run(loss, tf_dict)print('It: %d, Loss: %.7e, Time: %.2f'%(it, loss_value, elapsed))
start_time = time.time()for i in range(23):
accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float"))
XX =[[]]
XX[0]= X_test[i]
X = XX
Y = test_label[i]
a = sess.run(accuracy, feed_dict={x_tf: X, y_tf: Y})if a==1:print(i+1)
accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float"))
accuracy = sess.run(accuracy, feed_dict={x_tf: X_test, y_tf: test_label})print(accuracy)