.. 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 11-16 .. code-block:: default print(__doc__) from sklearn import set_config set_config(display='diagram') .. GENERATED FROM PYTHON SOURCE LINES 17-19 We will start by generating a binary classification dataset. Subsequently, we will divide the dataset into two subsets. .. GENERATED FROM PYTHON SOURCE LINES 19-28 .. 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 29-41 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 41-51 .. 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())])
SelectKBest(k=3)
LinearSVC()


.. GENERATED FROM PYTHON SOURCE LINES 52-58 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 58-64 .. 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 65-68 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 68-71 .. 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 72-76 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 76-79 .. 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 80-82 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/0.24.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 `_