.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/feature_selection/plot_feature_selection_pipeline.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code or to run this example in your browser via Binder .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_feature_selection_plot_feature_selection_pipeline.py: ================== Pipeline ANOVA SVM ================== This example shows how a feature selection can be easily integrated within a machine learning pipeline. We also show that you can easily introspect part of the pipeline. .. GENERATED FROM PYTHON SOURCE LINES 12-17 .. code-block:: default from sklearn import set_config set_config(display="diagram") .. GENERATED FROM PYTHON SOURCE LINES 18-20 We will start by generating a binary classification dataset. Subsequently, we will divide the dataset into two subsets. .. GENERATED FROM PYTHON SOURCE LINES 20-34 .. code-block:: default from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split X, y = make_classification( n_features=20, n_informative=3, n_redundant=0, n_classes=2, n_clusters_per_class=2, random_state=42, ) X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42) .. GENERATED FROM PYTHON SOURCE LINES 35-47 A common mistake done with feature selection is to search a subset of discriminative features on the full dataset instead of only using the training set. The usage of scikit-learn :func:`~sklearn.pipeline.Pipeline` prevents to make such mistake. Here, we will demonstrate how to build a pipeline where the first step will be the feature selection. When calling `fit` on the training data, a subset of feature will be selected and the index of these selected features will be stored. The feature selector will subsequently reduce the number of feature and pass this subset to the classifier which will be trained. .. GENERATED FROM PYTHON SOURCE LINES 47-57 .. code-block:: default from sklearn.feature_selection import SelectKBest, f_classif from sklearn.pipeline import make_pipeline from sklearn.svm import LinearSVC anova_filter = SelectKBest(f_classif, k=3) clf = LinearSVC() anova_svm = make_pipeline(anova_filter, clf) anova_svm.fit(X_train, y_train) .. raw:: html
Pipeline(steps=[('selectkbest', SelectKBest(k=3)), ('linearsvc', LinearSVC())])
Please rerun this cell to show the HTML repr or trust the notebook.


.. GENERATED FROM PYTHON SOURCE LINES 58-64 Once the training accomplished, we can predict on new unseen samples. In this case, the feature selector will only select the most discriminative features based on the information stored during training. Then, the data will be passed to the classifier which will make the prediction. Here, we report the final metrics via a classification report. .. GENERATED FROM PYTHON SOURCE LINES 64-70 .. code-block:: default from sklearn.metrics import classification_report y_pred = anova_svm.predict(X_test) print(classification_report(y_test, y_pred)) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none precision recall f1-score support 0 0.92 0.80 0.86 15 1 0.75 0.90 0.82 10 accuracy 0.84 25 macro avg 0.84 0.85 0.84 25 weighted avg 0.85 0.84 0.84 25 .. GENERATED FROM PYTHON SOURCE LINES 71-74 Be aware that you can inspect a step in the pipeline. For instance, we might be interested about the parameters of the classifier. Since we selected three features, we expect to have three coefficients. .. GENERATED FROM PYTHON SOURCE LINES 74-77 .. code-block:: default anova_svm[-1].coef_ .. rst-class:: sphx-glr-script-out Out: .. code-block:: none array([[0.75790919, 0.27158706, 0.26109741]]) .. GENERATED FROM PYTHON SOURCE LINES 78-82 However, we do not know which features where selected from the original dataset. We could proceed by several manner. Here, we will inverse the transformation of these coefficients to get information about the original space. .. GENERATED FROM PYTHON SOURCE LINES 82-85 .. code-block:: default anova_svm[:-1].inverse_transform(anova_svm[-1].coef_) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none array([[0. , 0. , 0.75790919, 0. , 0. , 0. , 0. , 0. , 0. , 0.27158706, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.26109741]]) .. GENERATED FROM PYTHON SOURCE LINES 86-88 We can see that the first three features where the selected features by the first step. .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 0.009 seconds) .. _sphx_glr_download_auto_examples_feature_selection_plot_feature_selection_pipeline.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: binder-badge .. image:: images/binder_badge_logo.svg :target: https://mybinder.org/v2/gh/scikit-learn/scikit-learn/1.0.X?urlpath=lab/tree/notebooks/auto_examples/feature_selection/plot_feature_selection_pipeline.ipynb :alt: Launch binder :width: 150 px .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_feature_selection_pipeline.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_feature_selection_pipeline.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_