#Klasyfikacja na podstawie długości i szerokości płatka. # Import bibliotek from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report import numpy as np import skfuzzy as fuzz from skfuzzy import control as ctrl from sklearn.datasets import load_iris # Załaduj dane Iris (wszystkie 4 cechy) iris = load_iris() X = iris.data[:, :] y = iris.target # Użycie całych danych do testowania X_test = X y_test = y # Definicja zmiennych wejściowych sepal_length = ctrl.Antecedent(np.linspace(4, 8, 1000), 'sepal_length') sepal_width = ctrl.Antecedent(np.linspace(2, 5, 1000), 'sepal_width') petal_length = ctrl.Antecedent(np.linspace(1, 7, 1000), 'petal_length') petal_width = ctrl.Antecedent(np.linspace(0, 2.5, 1000), 'petal_width') # Definicja zmiennej wyjściowej species = ctrl.Consequent(np.linspace(0, 2, 1000), 'species') # Funkcje przynależności petal_length['setosa'] = fuzz.trimf(petal_length.universe, [0.8, 1.45, 2.44]) petal_length['versicolor'] = fuzz.trimf(petal_length.universe, [2.44 , 4.40, 5.76]) petal_length['virginica'] = fuzz.trimf(petal_length.universe, [ 3.92, 5.57, 8.28]) petal_width['setosa'] = fuzz.trimf(petal_width.universe, [0.08, 0.24, 0.66]) petal_width['versicolor'] = fuzz.trimf(petal_width.universe, [0.66, 1.39, 1.92]) petal_width['virginica'] = fuzz.trimf(petal_width.universe, [1.44, 2.08, 2.76]) # Funkcje przynależności dla wyjścia species['setosa'] = fuzz.trimf(species.universe, [0, 0, 0.5]) species['versicolor'] = fuzz.trimf(species.universe, [0.5, 1, 1.5]) species['virginica'] = fuzz.trimf(species.universe, [1.5, 2, 2]) # Definicja reguł rule1 = ctrl.Rule(petal_length['setosa'] & petal_width['setosa'], species['setosa']) rule2 = ctrl.Rule(petal_length['versicolor'] & petal_width['versicolor'], species['versicolor']) rule3 = ctrl.Rule(petal_length['virginica'] & petal_width['virginica'], species['virginica']) # Tworzenie systemu sterowania species_ctrl = ctrl.ControlSystem([rule1, rule2, rule3]) # Klasyfikacja testowa y_pred = [] for sl, sw, pl, pw in X_test: species_sim = ctrl.ControlSystemSimulation(species_ctrl) species_sim.input['petal_length'] = pl species_sim.input['petal_width'] = pw species_sim.compute() fuzzy_result = species_sim.output['species'] if fuzzy_result < 0.5: y_pred.append(0) elif fuzzy_result < 1.5: y_pred.append(1) else: y_pred.append(2) # Ewaluacja modelu print(classification_report(y_test, y_pred, target_names=iris.target_names))