file = 'iris.data'; opts = delimitedTextImportOptions("NumVariables",5,'DataLines',[1,Inf],"Delimiter",",","VariableNames",["sepalLength","sepalWidth","petalLength","petaWidth","Species"],"VariableTypes",["double","double","double","double","string"],"EmptyLineRule","skip","ConsecutiveDelimitersRule","join","LeadingDelimitersRule","ignore"); url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'; data = readtable(file, opts); %data = textscan(data, '%f%f%f%f%C','Delimiter',','); %data = table(data{1}, data{2}, data{3}, data{4}, data{5},"VariableNames",{"sepalLength","sepalWidth","petalLength","petaWidth","species"}); data.Species = categorical(data.Species); data.Species = double(data.Species); inputData = table2array(data(:, 1:4)); outputData = data.Species; rng(1); 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)); trainData = [trainInput, trainOutput]; testData = [testInput, testOutput]; inputRange = minmax(inputData'); numMFs = 3; mfType = 'gaussmf'; fisOptions = genfisOptions('GridPartition'); fisOptions.NumMembershipFunctions = repmat(numMFs,1,size(inputData, 2)); fisOptions.InputMembershipFunctionType = mfType; fisOptions.OutputMembershipFunctionType = 'linear'; fis = genfis(inputData, outputData, fisOptions, 'FISType','mamdani'); maxEpochs = 100; trainingOptions = anfisOptions('InitialFIS', fis, 'EpochNumber', maxEpochs, 'DisplayANFISInformation',false,'DisplayErrorValues',true,'DisplayStepSize',false,'DisplayFinalResults',false,'ValidationData',testData); [trainedFis, trainError, ~,chkFIS,chkError] = anfis(trainData, trainingOptions); yPred = evalfis(trainedFis, testInput); yPred = round(yPred); confMatrix = confusionmat(testOutput, yPred); accuracy = sum(diag(confMatrix)) / sum(confMatrix, 'all') * 100; fprintf('Macierz bledu:\n'); disp(confMatrix); fprintf('Skutecznosc klasyfikacji: %.2f%%\n', accuracy); figure; plot(trainError, 'LineWidtth',2); hold on; plot(chkError, 'LineWidtth',2); grid on; hold off;