from sklearn import __version__ as sklearn_version from sklearn.datasets import load_iris from sklearn.feature_selection import SelectKBest, f_classif from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler iris = load_iris() X_train, X_test, y_train, y_test = train_test_split( iris.data, iris.target, test_size=0.25, stratify=iris.target, random_state=42, ) model = Pipeline( steps=[ ("scale", StandardScaler()), ("select", SelectKBest(score_func=f_classif, k=2)), ("classify", LogisticRegression(C=0.8, max_iter=300)), ] ) model.fit(X_train, y_train) predictions = model.predict(X_test) accuracy = accuracy_score(y_test, predictions) selected_features = model[:-1].get_feature_names_out(iris.feature_names) sample_prediction = model.predict(X_test[[0]])[0] sample_probability = model.predict_proba(X_test[[0]])[0] probability_map = { str(iris.target_names[index]): round(float(probability), 3) for index, probability in enumerate(sample_probability) } print(f"scikit-learn {sklearn_version}") print(f"pipeline steps: {list(model.named_steps)}") print(f"selected features: {selected_features.tolist()}") print(f"classifier C: {model.named_steps['classify'].C}") print(f"held-out accuracy: {accuracy:.3f}") print(f"first prediction: {iris.target_names[sample_prediction]}") print(f"first probabilities: {probability_map}")