Таблица 4 Зависимость ошибки нейронной сети от количества нейронов в скрытых слоях
Количество нейронов в сети
|
Во втором скрытом слое
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
В пером скрытом слое
|
10
|
0.0153
|
0.0172
|
0.0177
|
0.0129
|
0.0096
|
0.0097
|
0.0127
|
0.0119
|
0.0095
|
0.0110
|
0.0130
|
11
|
0.0131
|
0.0111
|
0.0119
|
0.0131
|
0.0147
|
0.0091
|
0.0139
|
0.0120
|
0.0136
|
0.0091
|
0.0129
|
12
|
0.0189
|
0.0181
|
0.0129
|
0.0171
|
0.0142
|
0.0132
|
0.0089
|
0.0127
|
0.0092
|
0.0147
|
0.0126
|
13
|
0.0140
|
0.0167
|
0.0145
|
0.0137
|
0.0122
|
0.0142
|
0.0084
|
0.0033
|
0.079
|
0.0089
|
0.0092
|
14
|
0.0178
|
0.0132
|
0.0148
|
0.0174
|
0.0129
|
0.0095
|
0.0086
|
0.0109
|
0.0081
|
0.0143
|
0.0098
|
15
|
0.0117
|
0.0126
|
0.0128
|
0.0114
|
0.0163
|
0.0096
|
0.0061
|
0.0063
|
0.0051
|
0.0058
|
0.0140
|
16
|
0.0125
|
0.0159
|
0.0140
|
0.0188
|
0.0130
|
0.0188
|
0.0129
|
0.0085
|
0.0062
|
0.0113
|
0.0156
|
17
|
0.0103
|
0.0168
|
0.0110
|
0.0100
|
0.0073
|
0.0087
|
0.0093
|
0.0117
|
0.0079
|
0.0219
|
0.0138
|
18
|
0.0105
|
0.0118
|
0.0119
|
0.0079
|
0.0089
|
0.0103
|
0.0128
|
0.0169
|
0.0084
|
0.0053
|
0.0158
|
19
|
0.0146
|
0.0120
|
0.0097
|
0.0082
|
0.0088
|
0.0086
|
0.0053
|
0.0091
|
0.0049
|
0.0072
|
0.0086
|
20
|
0.0132
|
0.0115
|
0.0073
|
0.0129
|
0.0130
|
0.0121
|
0.0125
|
0.0093
|
0.0034
|
0.0081
|
0.0102
|
Было проведено дополнительно исследование на 20 000 обучающих пар. Результаты исследования приведены в Таблице 5.
Таблица 5 Дополнительное исследование зависимости ошибки от количества нейронов в скрытых слоях
Количество нейронов в сети
|
Во втором скрытом слое
|
11
|
12
|
13
|
14
|
В первом слое
|
13
|
0.0068
|
0.0037
|
0.0090
|
0.0140
|
14
|
0.0065
|
0.0135
|
0.0128
|
0.0156
|
15
|
0.125
|
0.093
|
0.0035
|
0.0122
|
16
|
0.158
|
0.0127
|
0.0075
|
0.0172
|
Для наилучших значений, выделенных серым, кроме значений ошибок приведены графики обучения сети. На Рисунке 9 изображен график уменьшения ошибки в зависимости от количества эпох обучения нейронной сети. Графи построен для сети с 13 нейронами в первом скрытом слое и 12 нейронами во втором скрытом слое.
На Рисунке 10 изображен график ошибки для сети с 15 нейронами в первом скрытом слое и 13 во втором скрытом слое.
Рисунок 9 График ошибок при обучении сети с 13 нейронами в первом скрытом слое и 12 нейронами во втором скрытом слое
Рисунок 10График ошибок при обучении сети с 15 нейронами в первом скрытом слое и 13 нейронами во втором скрытом слое
По таблице ошибок и графикам для двух наименьших значений мы видим, что Выбор сети с Рисунка 9 предпочтительнее, т.к. такая сеть достигает тех же результатов ошибки, затратив на обучении почти в 2 раза меньше времени.
По результатам дополнительных исследований мы можем однозначно выбрать архитектуру нашей сети.
Схема получившейся нейронной сети видна на Рисунке 11. A- слой это набор входных значений, они связаны с первым скрытым слоем В, в котором содержится 13 нейронов. Первый скрытый слой связан со вторым скрытым слоем С, в котором содержится 12 нейронов. Второй скрытый слой связан с выходным слоем D.
Р исунок 11. Структурная схема нейронной сети
Заключение
В результате проведенного исследования было показано, как на основе искусственных нейронных сетей может быть построена система автоматического кредитования клиентов.
В соответствии с поставленной целью, объектом и предметом исследования в рамках данной выпускной квалификационной работы были получены следующие результаты:
Проведен анализ современного состояния проблемы. Приведено описание задачи кредитования клиентов
Проанализированы современные СППР и обоснован выбор систем искусственных нейронных сетей в качестве базовой технологической платформы
Построена модель данных, необходимая для правильного функционирования системы
Выбрана наилучшая архитектура нейронной сети для конкретной задачи
Реализована система автоматического кредитования клиентов средствами MATLAB
Новизна полученных результатов заключается в использовании СППР на платформе искусственных нейронных сетей для принятия столь серьезных решений, как решения по кредиту.
Приложение 1. Листинг вспомогательных программ RCredit.m
function [in,outT] = RCredit(Count)
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here
%Sex - пол; 1=муж 0=жен
%Age -Возраст от 0 до 100
%Education - Образование по шкале от 0 до 1,
%Property - Имущество в собственности в млн. рублей
%CrHistory - Кредитная история по оценке банка шкала от 0 до 1
%Income - годовой доход млн. руб
%Experience - опыт ведения бизнеса шкала от 0 до 1
%Period1 - Желаемый срок кредитования клиентав мес.
%Amount1 - Желаемая сумма кредитования в млн. руб
in = zeros(Count,9);
in(:,1)=round(rand(Count,1)); %Пол
in(:,2)=fix(100*(rand(Count,1)/2.5+0.2));%Возраст
in(:,3)=(fix(100*(rand(Count,1))))/100; %Образование
in(:,6)=fix((rand(Count,1)*204+36))/100; %Ежегодный доход млн.р.
in(:,4)=(fix(100*(rand(Count,1))))/10+in(:,6); %Имущество на сумму
in(:,5)=(fix(100*(rand(Count,1))))/100;%Кредитная история
in(:,7)=(fix(100*(rand(Count,1))))/100;%Опыт ведения бизнеса
in(:,9)=in(:,6)/6 +2*rand(Count,1);%Желаемая сумма
in(:,8)=round(in(:,9)./(in(:,6)/12*0.5))+fix(10*(rand(Count,1)));%Желаемый срок
%Вызываем функцию по кредитованию что бы получить целевые значения
outT=CreditFun(in,Count);
%Нормализуем вектор входа.
%[/1;/100;/1;/100;/1;/100;/1;/100;/120];
in(:,2)=in(:,2)/100;
in(:,4)=in(:,4)/100;
in(:,6)=in(:,6)/100;
in(:,8)=in(:,8)/100;
in(:,9)=in(:,9)/120;
in=in';
outT=outT';
end
CData.m
function [in,outT] = CData()
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here
%Sex - пол; 1=муж 0=жен
%Age -Возраст от 0 до 100
%Education - Образование по шкале от 0 до 1,
%Property - Имущество в собственности в млн. рублей
%CrHistory - Кредитная история по оценке банка шкала от 0 до 1
%Income - годовой доход млн. руб
%Experience - опыт ведения бизнеса шкала от 0 до 1
%Period1 - Желаемый срок кредитования клиентав мес.
%Amount1 - Желаемая сумма кредитования в млн. руб
in = zeros(10753,9);
nn=1;
for i2=18:5:83 %Возраст
for i3=0:0.3:0.9 %Образование
for i6=0.3:0.3:2.4 %Ежегодный доход млн.р.
for i5=0:0.2:1 %Кредитная история
for i7=0:0.3:0.9 %Опыт ведения бизнеса
i1=round(rand(1));
i4=(fix(100*(rand(1))))/10+i6;
i9=i6/6 +2*rand(1);
i8=round(i9/(i6/12*0.5))+fix(10*(rand(1)));
in(nn,:)=[i1;i2;i3;i4;i5;i6;i7;i8;i9];
nn=nn+1;
end
end
end
end
end
%Вызываем функцию по кредитованию что бы получить целевые значения
outT=CreditFun(in,nn);
%Нормализуем вектор входа.
%[/1;/100;/1;/100;/1;/100;/1;/100;/120];
in(:,2)=in(:,2)/100;
in(:,4)=in(:,4)/100;
in(:,6)=in(:,6)/100;
in(:,8)=in(:,8)/100;
in(:,9)=in(:,9)/120;
in=in';
outT=outT';
end
NeuNet .m
function [ Net ] = NeuNet(L1,L2)
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
Net=newp([0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1],[0 1]);
%Задаем количество слоёв и связи между нимии
Net.numLayers=3;
Net. layerConnect=[0 0 0; 1 0 0;0 1 0];
Net.outputConnect=[0 0 1];
Net.biasConnect=[0;0;0];
%Задаем количество входов и граничные значения каждого из них
Net.inputs{1}.size=9;
%Задаем количество нейронов в каждом слое и переходную функцию
Net.layers{1}.size=L1;
Net.layers{2}.size=L2;
Net.layers{3}.size=5;
Net.layers{1}.transferFcn='logsig';
Net.layers{2}.transferFcn='logsig';
Net.layers{3}.transferFcn='logsig';
Net.trainParam.epochs=20;
Net.trainFcn='trainlm';
Net.performFcn= 'mse';
view(Net);
end
ErrorM .m
function [Matrix] = ErrorM(Start1,Stop1,Step,Start2,Stop2)
%UNTITLED3 Summary of this function goes here
% Detailed explanation goes here
N1=(Stop1-Start1)/Step;
N2=(Stop2-Start2)/Step;
Matrix=zeros(N1,N2);
[in,out]=CData;
for ii=Start1:Step:Stop1 %Столбцами будут нейроны первого слоя
for kk=Start2:Step:Stop2 %Строками нейроны второго слоя
Net=BNet(in,out,ii,kk);
[P,T]=RCredit(100);
Y=Net(P); Sum=0;
for jj=1:1:100
Sum=Sum+sqrt(((T(1,jj)-Y(1,jj))^2+(T(2,jj)-Y(2,jj))^2+(T(3,jj)-Y(3,jj))^2+(T(4,jj)-Y(4,jj))^2+(T(5,jj)-Y(5,jj))^2)/5);
end
Matrix((ii-Start1)/Step+1,(kk-Start2)/Step+1)=Sum/100;
%Делаем скриншот графика по завершению теста нейронной сети
dir = 'c:\MATLAB\'; %Адрес сохранение скринов
pngFile = strcat(dir,num2str(ii),'-',num2str(kk),'-10000.png');
scrshot = getframe(gcf);
imwrite(scrshot.cdata,pngFile,'png','Transparency',get(gcf,'color'));
end
end
end
BNet.m
function Net = BNet(P,T,L1,L2)
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
Net=NeuNet(L1,L2);
%[P,T]=RCredit(N);
Net=train(Net,P,T);
end
Битков В.П. Основы банковского дела. Часть 1. Учебное пособие. - М.: МГИМО - Университет МИД России, 2005. - 104с.
Горчаков А.А., Половников В. А. Тенденции развития кредитного рынка России.//Банковское дело. - 2005. - №3.-с.15-17.
Kevin Swingler "Applying Neural Networks. A practical Guide" (перевод Ю.П.Маслобоева)
2004 Электронный журнал "Jahrbuch fur EcoAnalytic und EcoPatologic"
Штовба С.Д. Проектирование нечетких систем средствами MATLAB
Нейронные сети MATLAB (Потемкин В.Г., Медведев В.С.)
Барский А.Б. Нейронные сети: распознавание, управление, принятие решений М.: Финансы и статистика, 2004. – 176 с.
Ф. Уоссермен. Нейрокомпьютерная техника: теория и практика. М. Мир - 1992.
И.В. Заенцев. Нейронные сети: основные модели. Учебное пособие по курсу "Нейронные сети" для студентов 5 курса магистратуры к. электроники физического факультета Воронежского Государственного университета.
Сотник С.Л. Конспект лекций по курсу "Основы проектирования систем искусственного интелекта".
Белоглазова Г. Н. Деньги. Кредит. Банки: Учебное пособие/ Под ред. Г. Н. Белоглазова - М.: Юрат-Издат, 2005 г.
Донских А. М. Повышение эффективности банковской системы России А. М. Донских// Банковское дело, 2007 г., № 7
Do'stlaringiz bilan baham: |