% 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;