% Pobranie danych zbioru Iris 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", "categorical"], ... "EmptyLineRule", "skip", ... "ConsecutiveDelimitersRule", "join", ... "LeadingDelimitersRule", "ignore"); irisData = readtable(url, opts); % Konwersja kategorii na liczby dla klasyfikacji irisData.Species = grp2idx(irisData.Species); % Rozdzielenie danych na wejściowe i wyjściowe inputData = irisData(:, 1:4); outputData = irisData(:, 5); % Losowy podział danych na zestaw uczący i testujący cv = cvpartition(size(inputData, 1), 'HoldOut', 0.3); idxTrain = training(cv); idxTest = test(cv); trainInput = table2array(inputData(idxTrain, :)); trainOutput = table2array(outputData(idxTrain, :)); testInput = table2array(inputData(idxTest, :)); testOutput = table2array(outputData(idxTest, :)); % Parametry ANFIS numMFs = 3; mfType = 'gaussmf'; % Typ funkcji przynależności: gaussowska % Tworzenie początkowego systemu rozmytego fis = genfis(trainInput, trainOutput, 'NumMFs', numMFs, 'MFType', mfType); % Opcje trenowania anfisOptions = anfisOptions('InitialFIS', fis, 'EpochNumber', 100, 'DisplayANFISInformation', true, 'DisplayErrorValues', true); % Trenowanie systemu ANFIS [trainedFIS, trainError] = anfis([trainInput, trainOutput], anfisOptions); % Ocena modelu na zbiorze testowym yPred = evalfis(trainedFIS, testInput); yPred = round(yPred); % Zaokrąglenie, aby uzyskać klasy confMatrix = confusionmat(testOutput, yPred); % Wyświetlenie macierzy pomyłek i błędów disp('Macierz pomyłek:'); disp(confMatrix); % Wykres błędu figure; plot(trainError, 'LineWidth', 2); title('Błąd trenowania ANFIS'); xlabel('Numer epoki'); ylabel('Błąd średniokwadratowy (MSE)'); legend('Błąd trenowania'); grid on;