import sklearn from sklearn.datasets import load_breast_cancer 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 dataset = load_breast_cancer() X = dataset.data y = dataset.target feature_names = dataset.feature_names X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.25, stratify=y, random_state=42, ) selector = SelectKBest(score_func=f_classif, k=8) classifier = LogisticRegression(max_iter=5000) model = Pipeline( steps=[ ("select", selector), ("classify", classifier), ] ) model.fit(X_train, y_train) fitted_selector = model.named_steps["select"] selected_indices = fitted_selector.get_support(indices=True) selected_names = fitted_selector.get_feature_names_out(feature_names) scores = fitted_selector.scores_[selected_indices] ranked_features = sorted( zip(selected_indices, selected_names, scores), key=lambda item: item[2], reverse=True, ) X_train_selected = fitted_selector.transform(X_train) X_test_selected = fitted_selector.transform(X_test) y_pred = model.predict(X_test) print(f"scikit-learn {sklearn.__version__}") print(f"original training shape: {X_train.shape}") print(f"selected training shape: {X_train_selected.shape}") print(f"selected test shape: {X_test_selected.shape}") print() print("selected features by score:") for index, name, score in ranked_features: print(f"{index:2d} {name:<24} score={score:.2f}") print() print(f"held-out accuracy: {accuracy_score(y_test, y_pred):.3f}")