Você está na página 1de 4

Universidade Federal do Piauí - UFPI

Disciplina: Redes Neurais

Docente: Fábio Rocha

Discente: Isleane Paiva Machado

1. VIZINHO MAIS PRÓXIMO

O Vizinho Mais Próximo (ou Nearest Neighbor) é um algoritmo de aprendizado de máquina muito simples
e intuitivo, geralmente usado para classificação. A ideia principal do Vizinho Mais Próximo é classificar uma
nova instância com base nas classes das instâncias existentes que estão mais próximas a ela no espaço de
atributos.

No código abaixo foi realizado a normalização dos dados de entrada, colocando todos os atibutos na mesma

escala entre [0, 1] e armazenados em dados normalizados. A proporçãode treinamento e teste foi definida em

70% e 30% respectivamente.

O algoritmo rodou 20 vezes conforme solicitado para ao fim apresentar o máximo, média, minimo e desvio

padrão das iterações.

Os dados foram embaralhados a fim de melhorar a capacidade de generalização do modelos em dados

desconhecidos.

% Carregando o conjunto de dados das flores iris


load fisheriris;

% Separando os dados de entrada e rótulos


X = meas; % atributos de medidas
Y = species; % espécies

% Normalização Min-Max dos dados de entrada


X_norm = (X - min(X)) ./ (max(X) - min(X));

% Definindo a proporção de treinamento e teste


trainRatio = 0.7;
numIterations = 20;

% Obtendo o número de classes


numClasses = numel(unique(Y));

% Inicializando vetor para armazenar as acurácias


accuracies = zeros(numIterations, 1);

% Inicializando matriz para armazenar a matriz de confusão de cada iteração


confusionMat_all = zeros(numClasses, numClasses, numIterations);

1
for k = 1:numIterations
% Embaralhando os dados
idx = randperm(size(X_norm, 1));
X_shuffled = X_norm(idx, :);
Y_shuffled = Y(idx);

% Convertendo rótulos para valores numéricos


[~, ~, Y_shuffled] = unique(Y_shuffled);

% Definindo a divisão estratificada dos dados em treinamento e teste


cv = cvpartition(Y_shuffled, 'HoldOut', 1 - trainRatio);

% Obtendo índices para treinamento e teste


trainIdx = training(cv);
testIdx = test(cv);

% Dados de treinamento e teste


Xtrain = X_shuffled(trainIdx, :);
Ytrain = Y_shuffled(trainIdx);
Xtest = X_shuffled(testIdx, :);
Ytest = Y_shuffled(testIdx);

% Classificação usando o algoritmo do Vizinho Mais Próximo


Ypred = zeros(sum(testIdx), 1);

for i = 1:sum(testIdx)
% Calculando as distâncias entre a instância de teste e todas as instâncias
de treinamento
distances = sqrt(sum((Xtrain - Xtest(i, :)).^2, 2));

% Encontrando o índice da instância mais próxima


[~, nearestIdx] = min(distances);

% Atribuindo a classe correspondente


Ypred(i) = Ytrain(nearestIdx);
end

% Calculando a acurácia
accuracy = sum(Ypred == Ytest) / numel(Ytest);
accuracies(k) = accuracy;

% Calculando a matriz de confusão para os dados de teste desta iteração


confusionMat = confusionmat(Ytest, Ypred);
confusionMat_all(:, :, k) = confusionMat;
end

2. APRESENTAÇÃO DE MÁXIMA, MÉDIA, MÍNIMO E DESVIO PADRÃO


Apresentar o máximo, média, mínimo e desvio padrão das iterações fornece informações valiosas sobre a

2
variabilidade do desempenho do modelo durante o processo de treinamento e avaliação.

% Apresentando os resultados
disp(['Mínimo: ', num2str(min(accuracies))]);

Mínimo: 0.91111

disp(['Máximo: ', num2str(max(accuracies))]);

Máximo: 0.97778

disp(['Média: ', num2str(mean(accuracies))]);

Média: 0.94778

disp(['Desvio Padrão: ', num2str(std(accuracies))]);

Desvio Padrão: 0.021957

3. APRESENTAÇÃO DA MATRIZ DE CONFUSÃO


A matriz de confusão é uma tabela que permite visualizar o desempenho do modelo de classificação ao

comparar suas predições com os rótulos verdadeiros dos dados de teste.

% Média das matrizes de confusão de todas as iterações


avgConfusionMat = mean(confusionMat_all, 3);

% Exibindo a matriz de confusão média com duas casas decimais


disp('Matriz de Confusão Média:');

Matriz de Confusão Média:

fprintf('%8.4f %8.4f %8.4f\n', avgConfusionMat');

15.0000 0.0000 0.0000


0.0000 14.0000 1.0000
0.0000 1.3500 13.6500

4. GRÁFICO DE DISPERSÃO DAS ESPÉCIES


% Gerando o gráfico de dispersão
figure;
gscatter(X_norm(:, 1), X_norm(:, 2), Y);
xlabel('Sepal Length');
ylabel('Sepal Width');
title('Classificação de Flores Íris');

3
4

Você também pode gostar