In [ ]:
import pandas as pd
from sklearn.feature_selection import RFE
from sklearn import tree
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt

# Define your features and target variable
X = encoded_df.drop(
    "encoded.variety", axis=1
)  # Supponendo che 'encoded.variety' sia il nome della tua colonna target
y = encoded_df["encoded.variety"]

# Inizializza l'estimatore (modello) che vuoi utilizzare per la selezione delle feature
estimator = (
    tree.DecisionTreeClassifier()
)  # Puoi sostituire questo con qualsiasi altro stimatore adatto al tuo problema

# Inizializza RFE con l'estimatore e il numero di feature da selezionare
rfe = RFE(estimator)  # Regola il numero di feature come necessario
features = []
accuracy_scores = []

# Loop attraverso ogni iterazione di RFE
for i in range(1, len(X.columns) + 1):
    rfe.n_features_to_select = (
        i  # Imposta il numero di feature da selezionare per questa iterazione
    )
    rfe.fit(X, y)  # Adatta RFE ai dati
    selected_features = X.columns[rfe.support_]

    # Valuta il modello usando la cross-validation e calcola l'accuratezza
    accuracy = cross_val_score(
        estimator, X[selected_features], y, cv=5, scoring="accuracy"
    ).mean()
    accuracy_scores.append(accuracy)
    print(
        f"Iterazione {i}: Features Selezionate - {selected_features}, Accuratezza: {accuracy:.4f}"
    )
    features.append(selected_features)

# Plot dell'accuratezza delle iterazioni
plt.plot(range(1, len(X.columns) + 1), accuracy_scores, marker="o", linestyle="--")
plt.xlabel("Numero di Features Selezionate")
plt.ylabel("Accuratezza")
plt.title("Accuratezza vs. Numero di features selezionate")
plt.show()
Iterazione 1: Features Selezionate - Index(['petal.length'], dtype='object'), Accuratezza: 0.9200
Iterazione 2: Features Selezionate - Index(['petal.length', 'petal.width'], dtype='object'), Accuratezza: 0.9533
Iterazione 3: Features Selezionate - Index(['sepal.width', 'petal.length', 'petal.width'], dtype='object'), Accuratezza: 0.9600
Iterazione 4: Features Selezionate - Index(['sepal.length', 'sepal.width', 'petal.length', 'petal.width'], dtype='object'), Accuratezza: 0.9600
No description has been provided for this image