Добавил:
Да поможет вам Котельников Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2ЛР / lr2

.docx
Скачиваний:
16
Добавлен:
23.06.2024
Размер:
313.17 Кб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования

Московский технический университет связи и информатики

Лабораторная работа № 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

%% 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)));

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 – Доля правильно предсказанных ответов с использованием наивного Байсесовского алгоритма

Рисунок 2 – Дерево распределения

Рисунок 3 – Доля правильно предсказанных ответов с использованием регрессионных деревьев

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

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

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

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

Выводы

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

Соседние файлы в папке 2ЛР