avatar
Untitled

Guest 110 23rd Apr, 2024

MARKUP 3.07 KB
                                           
                         % Przykładowy kod MATLAB do tworzenia i oceny modelu ANFIS z użyciem zbioru iris

%% Wczytanie danych
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data';
opts = delimitedTextImportOptions("NumVariables", 5, ...
                                  "DataLines", [1, Inf], ...
                                  "Delimiter", ",", ...
                                  "VariableNames", ["SepalLength", "SepalWidth", "PetalLength", "PetalWidth", "Species"], ...
                                  "VariableTypes", ["double", "double", "double", "double", "string"], ...
                                  "EmptyLineRule", "skip", ...
                                  "ConsecutiveDelimitersRule", "join", ...
                                  "LeadingDelimitersRule", "ignore");
data = readtable(url, opts);

%% Przygotowanie danych
data.Species = double(categorical(data.Species)); % Zamiana etykiet na liczby
inputData = table2array(data(:, 1:4));
outputData = data.Species;

%% Podział danych na uczące i testujące
rng(1); % Ustawienie ziarna 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];

%% Tworzenie i trenowanie modelu ANFIS
% Inicjalizacja systemu rozmytego
numMFs = 3;
mfType = 'gaussmf'; % Gaussian membership function
fis = genfis1(trainData, numMFs, mfType);

% Ustawienia dla procesu trenowania
maxEpochs = 100;
displayInterval = 10;
initFis = fis;
trainingOptions = anfisOptions('InitialFIS', initFis, 'EpochNumber', maxEpochs, 'DisplayANFISInformation', false, 'DisplayErrorValues', true, 'DisplayStepSize', false, 'DisplayFinalResults', false, 'ValidationData', testData);

% Trenowanie ANFIS
[trainedFis, trainError, ~, chkFIS, chkError] = anfis(trainData, trainingOptions);

%% Ocena modelu
% Klasyfikacja na danych testowych
yPred = evalfis(trainedFis, testInput);
yPred = round(yPred); % Zaokrąglenie do najbliższej klasy
confMatrix = confusionmat(testOutput, yPred);

% Obliczenie procentowej skuteczności
accuracy = sum(diag(confMatrix)) / sum(confMatrix, 'all') * 100;

%% Wyniki
fprintf('Macierz błędu:\n');
disp(confMatrix);
fprintf('Skuteczność klasyfikacji: %.2f%%\n', accuracy);

%% Wykresy
figure;
plot(trainError, 'LineWidth', 2);
hold on;
plot(chkError, 'LineWidth', 2);
title('Krzywe błędu uczenia i walidacji');
xlabel('Numer epoki');
ylabel('Błąd średniokwadratowy');
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