-
Notifications
You must be signed in to change notification settings - Fork 0
/
exercise02.m
97 lines (79 loc) · 2.78 KB
/
exercise02.m
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
% Disciplina : SBL0080 - Inteligência Computacional
% Professor : Jarbas Joaci de Mesquita Sá Júnior
% Descrição : Questão 02 - Trabalho 01
% Autor(a) : Izaias Machado Pessoa Neto
% Data de Modificação : 17/10/2022
% QUESTAO02 Essa questão, utiliza as classes PolynomialRegression e
% MultipleRegression.
clf('reset'); % Limpa os gráficos
%% Importa o dataset
dataset = importdata('aerogerador.dat');
x = dataset(:,1);
y = dataset(:,2);
degrees = 2 : 7; % Vetor com graus 2 a 7
%% Para cada grau faz a regressão, imprime no terminal e plota os resultados em um gráfico.
regressions = {};
for i = 1 : length(degrees)
degree = degrees(i);
regression = fitRegression(degree, x, y);
printRegression(regression, x, y);
regressions{i} = regression;
end
plotRegressions(regressions, degrees, x, y);
%% Realiza a regressão para um dado grau
function regression = fitRegression(degree, x, y)
regression = PolynomialRegression(degree);
regression = regression.fit(x, y);
end
%% Imprime os resultados de uma regressão
function printRegression(regression, x, y)
fprintf('===== Polinômio de Grau %d =====\n', regression.degree);
fprintf('Coeficientes do Polinômio:\n');
printPolynomialEquation(regression);
printRSquared(regression, x, y);
end
%% Plota todo o gráfico
function plotRegressions(regressions, degrees, x, y)
% Plota os pontos da base de dados
plot(x, y, '*');
hold on;
plotPredictions(regressions, x);
createLegend(degrees);
end
%% Plota as linhas de predição de cada regressão
function plotPredictions(regressions, x)
for i = 1 : length(regressions)
regression = regressions{i};
prediction = regression.predict(x);
plot(x, prediction, 'LineWidth', 2); % Plota a linha predita
end
end
%% Imprime a equação polinomial dados os coeficientes
function printPolynomialEquation(regression)
b = regression.coefficients;
degrees = 2 : length(b);
reversedB = flip(degrees, 2);
for i = reversedB
fprintf('(%f) * x^%d + ', b(i), i - 1);
end
fprintf('(%f)\n', b(1));
end
%% Imprime o Erro Quadrático
function printRSquared(regression, x, y)
r = regression.rSquared(x, y);
r_adjusted = regression.adjustedRSquared(x, y);
fprintf('R^2: %f\n', r);
fprintf('R^2 Ajustado: %f\n', r_adjusted);
fprintf('\n');
end
%% Cria a legenda do gráfico
function createLegend(degrees)
lgd = strings(1, length(degrees) + 1);
lgd(1) = ['Pontos da Base de Dados'];
for i = 1 : length(degrees)
degree = i + 1;
lgd(degree) = ['Polinômio de Grau ' + string(degree)];
end
l = legend(lgd);
l.Location = 'northwest';
end