Untitled
Guest 99 23rd Apr, 2024
% Wczytywanie i przygotowywanie danych
opts = delimitedTextImportOptions("NumVariables", 5, ...
"DataLines", [1, Inf], ...
"Delimiter", ",", ...
"VariableNames", ["SepalLength", "SepalWidth", "PetalLength", "PetalWidth", "Species"], ...
"VariableTypes", ["double", "double", "double", "double", "categorical"], ...
"EmptyLineRule", "skip", ...
"ConsecutiveDelimitersRule", "join", ...
"LeadingDelimitersRule", "ignore");
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data';
data = readtable(url, opts);
% Konwersja gatunków na wartości liczbowe
data.Species = double(categorical(data.Species));
% Przygotowanie danych wejściowych i wyjściowych
inputData = table2array(data(:, 1:4));
outputData = data.Species;
% Podział danych na uczące i testujące
rng(1); % Dla powtarzalności wyników
numData = size(inputData, 1);
idx = randperm(numData);
numTrain = round(numData * 0.7);
trainInput = inputData(idx(1:numTrain), :);
trainOutput = outputData(idx(1:numTrain));
testInput = inputData(idx(numTrain+1:end), :);
testOutput = outputData(idx(numTrain+1:end));
% Dane uczące i testujące dla ANFIS
trainData = [trainInput, trainOutput];
testData = [testInput, testOutput];
% Konfiguracja ANFIS
numMFs = 3;
mfType = 'gaussmf'; % Gaussian membership functions dla wejść
fisOptions = genfisOptions('GridPartition');
fisOptions.NumMembershipFunctions = repmat(numMFs, 1, size(inputData, 2));
fisOptions.InputMembershipFunctionType = mfType;
fisOptions.OutputMembershipFunctionType = 'linear'; % Linear dla systemu Sugeno
% Tworzenie modelu FIS typu Sugeno
fis = genfis(inputData, outputData, fisOptions, 'FISType', 'sugeno');
% Opcje trenowania
maxEpochs = 100;
trainingOptions = anfisOptions('InitialFIS', fis, 'EpochNumber', maxEpochs, 'DisplayANFISInformation', false, 'DisplayErrorValues', true, 'DisplayStepSize', false, 'DisplayFinalResults', false, 'ValidationData', testData);
% Trenowanie modelu ANFIS
[trainedFis, trainError, ~, chkFIS, chkError] = anfis(trainData, trainingOptions);
% Ewaluacja modelu
yPred = evalfis(trainedFis, testInput);
yPred = round(yPred); % Zaokrąglenie predykcji do najbliższej klasy
confMatrix = confusionmat(testOutput, yPred); % Macierz pomyłek
% Obliczanie dokładności
accuracy = sum(diag(confMatrix)) / sum(confMatrix, 'all') * 100;
% Wyświetlanie wyników
fprintf('Macierz błędu:\n');
disp(confMatrix);
fprintf('Skuteczność klasyfikacji: %.2f%%\n', accuracy);
% Wykresy błędów
figure;
plot(trainError, 'LineWidth', 2);
hold on;
plot(chkError, 'LineWidth', 2);
title('Krzywe błędu uczenia i walidacji');
xlabel('Epoka');
ylabel('Błąd średniokwadratowy (MSE)');
legend('Błąd uczący', 'Błąd walidacyjny');
grid on;
hold off;
To share this paste please copy this url and send to your friends
RAW Paste Data