
2ЛР / lr2
.pdfМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
Московский технический университет связи и информатики
Лабораторная работа № 2
по дисциплине
“Системы искусственного интеллекта”
на тему
“АЛГОРИТМЫ МАШИННОГО ОБУЧЕНИЯ В СРЕДЕ MATLAB”
Выполнил: студент гр. БЗС2002 Ломакин А. А.
Проверила: Матюнина Д. Д.
МОСКВА 2023

Цель работы
Сравнить работу алгоритмов машинного обучения и найти оптимальный из них для решения задачи классификации при самостоятельно сгенерированных начальных данных.
Исходные данные
Дан каталог, содержащий в себе численные характеристики различных моделей жилых помещений. Здания различаются по следующим параметрам
(X — непосредственно характеристики, Y — вытекающие из них потребности,
которые требуется прогнозировать):
•относительная компактность Х1;
•площадь поверхности Х2;
•площадь стен Х3;
•площадь крыши Х4;
•высота стен Х5;
•ориентация Х6;
•площадь остекления Х7;
•распределение площади остекления Х8;
•потребность в нагреве Y1; • потребность в охлаждении Y2;
В качестве начальных данных использованы данные интернет-
источника: archive.ics.uci.edu/ml/datasets/Energy+efficiency. Входные данные доступны в средствах Exсel.
Код программы
Исходные данные были импортированы из Microsoft Excel в программу
MATLAB. Ниже, в листинге 1, представлен код программы:
Листинг 1
%% Import data from text file
%Script for importing data from the following text file:
%filename: C:\MatLab19\MyProjects\lab2SII.txt
%
% Auto-generated by MATLAB on 09-Oct-2023 10:11:45
2

%% Set up the Import Options and import the data
opts = delimitedTextImportOptions("NumVariables", 12);
%Specify range and delimiter opts.DataLines = [1, Inf]; opts.Delimiter = "\t";
%Specify column names and types
opts.VariableNames = ["X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "Y1", "Y2", "Y1_R", "Y2_R"];
opts.VariableTypes = ["double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double"];
%Specify file level properties opts.ExtraColumnsRule = "ignore"; opts.EmptyLineRule = "read";
%Specify variable properties
opts = setvaropts(opts, ["X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "Y1", "Y2", "Y1_R", "Y2_R"], "DecimalSeparator", ",");
opts = setvaropts(opts, ["X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "Y1", "Y2", "Y1_R", "Y2_R"], "ThousandsSeparator", ".");
% Import the data
lab2SII1 = readtable("C:\MatLab19\MyProjects\lab2SII.txt", opts);
%%Clear temporary variables clear opts
%%Наивный байесовский классификатор
Y1=lab2SII1.Y1_R; Y2=lab2SII1.Y2_R; u=length(unique(Y1));
disp(['There are', num2str(u),'unique output categories']);
c2=cvpartition(Y1, 'holdout');
X=[lab2SII1.X1, lab2SII1.X2, lab2SII1.X3, lab2SII1.X4, lab2SII1.X5, lab2SII1.X6, lab2SII1.X7, lab2SII1.X8];
Xtrain=X(training(c2,1),:);
Xtest=X(test(c2,1),:);
Ytrain=Y1(training(c2,1),:);
Ytest=Y1(test(c2,1),:);
baymodel = fitcnb (Xtrain, Ytrain, 'Distribution', 'kernel'); Ypredict = predict(baymodel, Xtest)
pernb_0 = 100* (1- (sum (Ytest~=Ypredict) /length (Ytest))); pernb_1 = 100* (sum(abs (Ytest - Ypredict) <=1)) /length (Ytest); disp(['Naive Bayes % within 1 unit - ', num2str(pernb_1), '8']);
[C, order] = confusionmat (Ytest, Ypredict); C_perc = diag(sum(C, 2))\C;
figure;
imagesc (C_perc); colorbar;
xlabel ('Outputs'); ylabel ('Outputs');
title (['How many responses were correctly predicted within 1: ', num2str(pernb_1), '%']);
%% Регрессионные деревья
model = TreeBagger (20, Xtrain, Ytrain, 'Method', 'Classification'); view (model. Trees{1}, 'mode', 'graph');
Ypredict2 = str2double ((predict (model, Xtest)));
3

pernt_0 = 100* (1- (sum (Ytest~=Ypredict2)/length (Ytest))); pernt_1 = 100* (sum (abs (Ytest - Ypredict2) <=1)) /length (Ytest); disp(['Tree Bagger % within 1 unit - ', num2str(pernt_1), '%']);
%% Нейронные сети u = unique (Y1);
Ytrain2 = zeros(length(Ytrain), length (u)); for i = 1: length (u)
a = Ytrain == u(i);
Ytrain2 (:, i) = double (a); end
net = patternnet (10); %% Обучение на 10 нейронах net = train(net, Xtrain', Ytrain2');
Y3 = net (Xtest')'; for i = 1: length (Y3) [~,m] = max(Y3(i, :));
Ypredict3(i, :) = u(m); end
pernn_0 = 100* (1- (sum (Ytest ~=Ypredict3)/length(Ytest))); pernn_1 = 100* (sum(abs (Ytest - Ypredict3) <=1))/length(Ytest); disp(['Neural Networks % within unit 1 - ', num2str(pernn_1), '%'])
[C, order] = confusionmat(Ytest, Ypredict3); C_perc = diag(sum(C, 2)) \ C;
figure(2); imagesc(C_perc); colorbar; xlabel('Outputs'); ylabel('Outputs');
title(['How many responses were correctly predicted within 1 - ' num2str(pernn_1), ' %']);
Ниже приведены графики, иллюстрирующие результаты работы программы:
Рисунок 1 – Доля правильно предсказанных ответов с использованием наивного Байсесовского алгоритма
4

Рисунок 2 – Дерево распределения
Рисунок 3 – Доля правильно предсказанных ответов с использованием регрессионных деревьев
Рисунок 4 – График качества обучения трех различных выборок с использованием 10 нейронов
5

Рисунок 5 – Доля правильно предсказанных ответов с использованием обучения нейросети при 10 нейронах
Рисунок 6 – График качества обучения трех различных выборок с использованием 30 нейронов
6

Рисунок 7 – Доля правильно предсказанных ответов с использованием обучения нейросети при 30 нейронах
Выводы
В ходе лабораторной работы была рассмотрена задача классификации – рассматривалась потребность зданий в нагреве и охлаждении. Использовались такие алгоритмы классификации, как наивный байесовский классификатор,
регрессионные деревья и нейронные сети. Для разных алгоритмов классификации получились разные доли правильно предсказанных ответов:
для наивного байесовского классификатора – 44.74%, для регрессионных деревьев – 94.74%, для нейронных сетей – 86.84% (при 10 нейронах) и 90.79% (при 30 нейронах). Можно сделать вывод, что алгоритм регрессионных деревьев показал лучший результат.
7