avatar
Untitled

Guest 98 23rd Apr, 2024

MARKUP 3.29 KB
                                           
                         % 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
Recent Pastes
Ta strona używa plików cookie w celu usprawnienia i ułatwienia dostępu do serwisu oraz prowadzenia danych statystycznych. Dalsze korzystanie z tej witryny oznacza akceptację tego stanu rzeczy.
Wykorzystywanie plików Cookie
Jak wyłączyć cookies?
ROZUMIEM