.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples/pcovc/PCovC_Hyperparameters.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_examples_pcovc_PCovC_Hyperparameters.py: PCovC Hyperparameter Tuning =========================== .. GENERATED FROM PYTHON SOURCE LINES 10-29 .. code-block:: Python import matplotlib.pyplot as plt from matplotlib.colors import LinearSegmentedColormap from sklearn.datasets import load_iris from sklearn.decomposition import PCA from sklearn.inspection import DecisionBoundaryDisplay from sklearn.linear_model import LogisticRegressionCV, Perceptron, RidgeClassifierCV from sklearn.preprocessing import StandardScaler from sklearn.svm import LinearSVC from skmatter.decomposition import PCovC plt.rcParams["image.cmap"] = "tab10" plt.rcParams["scatter.edgecolors"] = "k" random_state = 10 n_components = 2 .. GENERATED FROM PYTHON SOURCE LINES 30-32 For this, we will use the :func:`sklearn.datasets.load_iris` dataset from ``sklearn``. .. GENERATED FROM PYTHON SOURCE LINES 33-39 .. code-block:: Python X, y = load_iris(return_X_y=True) scaler = StandardScaler() X_scaled = scaler.fit_transform(X) .. GENERATED FROM PYTHON SOURCE LINES 40-43 PCA --- .. GENERATED FROM PYTHON SOURCE LINES 44-60 .. code-block:: Python pca = PCA(n_components=n_components) pca.fit(X_scaled, y) T_pca = pca.transform(X_scaled) fig, axis = plt.subplots() scatter = axis.scatter(T_pca[:, 0], T_pca[:, 1], c=y) axis.set(xlabel="PC$_1$", ylabel="PC$_2$") axis.legend( scatter.legend_elements()[0], load_iris().target_names, loc="lower right", title="Classes", ) .. image-sg:: /examples/pcovc/images/sphx_glr_PCovC_Hyperparameters_001.png :alt: PCovC Hyperparameters :srcset: /examples/pcovc/images/sphx_glr_PCovC_Hyperparameters_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 61-67 Effect of Mixing Parameter :math:`\alpha` on PCovC Map ------------------------------------------------------ Below, we see how different :math:`\alpha` values for our PCovC model result in varying class distinctions between setosa, versicolor, and virginica on the PCovC map. .. GENERATED FROM PYTHON SOURCE LINES 68-97 .. code-block:: Python n_mixing = 5 mixing_params = [0, 0.25, 0.50, 0.75, 1] fig, axs = plt.subplots(1, n_mixing, figsize=(4 * n_mixing, 4), sharey="row") for ax, mixing in zip(axs, mixing_params): pcovc = PCovC( mixing=mixing, n_components=n_components, random_state=random_state, classifier=LogisticRegressionCV(), ) pcovc.fit(X_scaled, y) T = pcovc.transform(X_scaled) ax.set_xticks([]) ax.set_yticks([]) ax.set_title(r"$\alpha=$" + str(mixing)) ax.set_xlabel("PCov$_1$") ax.scatter(T[:, 0], T[:, 1], c=y) axs[0].set_ylabel("PCov$_2$") fig.subplots_adjust(wspace=0) plt.tight_layout() .. image-sg:: /examples/pcovc/images/sphx_glr_PCovC_Hyperparameters_002.png :alt: $\alpha=$0, $\alpha=$0.25, $\alpha=$0.5, $\alpha=$0.75, $\alpha=$1 :srcset: /examples/pcovc/images/sphx_glr_PCovC_Hyperparameters_002.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 98-105 Effect of PCovC Classifier on PCovC Maps and Decision Boundaries ---------------------------------------------------------------- Here, we see how a PCovC model (:math:`\alpha` = 0.5) fitted with different classifiers produces varying PCovC maps. In addition, we see the varying decision boundaries produced by the respective PCovC classifiers. .. GENERATED FROM PYTHON SOURCE LINES 106-156 .. code-block:: Python mixing = 0.5 fig, axs = plt.subplots(1, 4, figsize=(16, 4)) models = { RidgeClassifierCV(): "Ridge Classification", LogisticRegressionCV(random_state=random_state): "Logistic Regression", LinearSVC(random_state=random_state): "Support Vector Classification", Perceptron(random_state=random_state): "Single-Layer Perceptron", } for ax, model in zip(axs, models): pcovc = PCovC( mixing=mixing, n_components=n_components, random_state=random_state, classifier=model, ) pcovc.fit(X_scaled, y) T = pcovc.transform(X_scaled) ax.set_title(models[model]) DecisionBoundaryDisplay.from_estimator( estimator=pcovc.classifier_, X=T, ax=ax, response_method="predict", grid_resolution=1000, ) scatter = ax.scatter(T[:, 0], T[:, 1], c=y) ax.set_xlabel("PCov$_1$") ax.set_xticks([]) ax.set_yticks([]) axs[0].set_ylabel("PCov$_2$") axs[0].legend( scatter.legend_elements()[0], load_iris().target_names, loc="lower right", title="Classes", fontsize=8, ) fig.subplots_adjust(wspace=0.04) plt.tight_layout() plt.show() .. image-sg:: /examples/pcovc/images/sphx_glr_PCovC_Hyperparameters_003.png :alt: Ridge Classification, Logistic Regression, Support Vector Classification, Single-Layer Perceptron :srcset: /examples/pcovc/images/sphx_glr_PCovC_Hyperparameters_003.png :class: sphx-glr-single-img .. _sphx_glr_download_examples_pcovc_PCovC_Hyperparameters.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: PCovC_Hyperparameters.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: PCovC_Hyperparameters.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: PCovC_Hyperparameters.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_