.. only:: html

    .. note::
        :class: sphx-glr-download-link-note

        Click :ref:`here <sphx_glr_download_auto_examples_bicluster_plot_spectral_coclustering.py>`     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_bicluster_plot_spectral_coclustering.py:


==============================================
A demo of the Spectral Co-Clustering algorithm
==============================================

This example demonstrates how to generate a dataset and bicluster it
using the Spectral Co-Clustering algorithm.

The dataset is generated using the ``make_biclusters`` function, which
creates a matrix of small values and implants bicluster with large
values. The rows and columns are then shuffled and passed to the
Spectral Co-Clustering algorithm. Rearranging the shuffled matrix to
make biclusters contiguous shows how accurately the algorithm found
the biclusters.



.. rst-class:: sphx-glr-horizontal


    *

      .. image:: /auto_examples/bicluster/images/sphx_glr_plot_spectral_coclustering_001.png
          :alt: Original dataset
          :class: sphx-glr-multi-img

    *

      .. image:: /auto_examples/bicluster/images/sphx_glr_plot_spectral_coclustering_002.png
          :alt: Shuffled dataset
          :class: sphx-glr-multi-img

    *

      .. image:: /auto_examples/bicluster/images/sphx_glr_plot_spectral_coclustering_003.png
          :alt: After biclustering; rearranged to show biclusters
          :class: sphx-glr-multi-img


.. rst-class:: sphx-glr-script-out

 Out:

 .. code-block:: none


    consensus score: 1.000






|


.. code-block:: default

    print(__doc__)

    # Author: Kemal Eren <kemal@kemaleren.com>
    # License: BSD 3 clause

    import numpy as np
    from matplotlib import pyplot as plt

    from sklearn.datasets import make_biclusters
    from sklearn.cluster import SpectralCoclustering
    from sklearn.metrics import consensus_score

    data, rows, columns = make_biclusters(
        shape=(300, 300), n_clusters=5, noise=5,
        shuffle=False, random_state=0)

    plt.matshow(data, cmap=plt.cm.Blues)
    plt.title("Original dataset")

    # shuffle clusters
    rng = np.random.RandomState(0)
    row_idx = rng.permutation(data.shape[0])
    col_idx = rng.permutation(data.shape[1])
    data = data[row_idx][:, col_idx]

    plt.matshow(data, cmap=plt.cm.Blues)
    plt.title("Shuffled dataset")

    model = SpectralCoclustering(n_clusters=5, random_state=0)
    model.fit(data)
    score = consensus_score(model.biclusters_,
                            (rows[:, row_idx], columns[:, col_idx]))

    print("consensus score: {:.3f}".format(score))

    fit_data = data[np.argsort(model.row_labels_)]
    fit_data = fit_data[:, np.argsort(model.column_labels_)]

    plt.matshow(fit_data, cmap=plt.cm.Blues)
    plt.title("After biclustering; rearranged to show biclusters")

    plt.show()


.. rst-class:: sphx-glr-timing

   **Total running time of the script:** ( 0 minutes  0.292 seconds)


.. _sphx_glr_download_auto_examples_bicluster_plot_spectral_coclustering.py:


.. only :: html

 .. container:: sphx-glr-footer
    :class: sphx-glr-footer-example


  .. container:: binder-badge

    .. image:: https://mybinder.org/badge_logo.svg
      :target: https://mybinder.org/v2/gh/scikit-learn/scikit-learn/0.23.X?urlpath=lab/tree/notebooks/auto_examples/bicluster/plot_spectral_coclustering.ipynb
      :width: 150 px


  .. container:: sphx-glr-download sphx-glr-download-python

     :download:`Download Python source code: plot_spectral_coclustering.py <plot_spectral_coclustering.py>`



  .. container:: sphx-glr-download sphx-glr-download-jupyter

     :download:`Download Jupyter notebook: plot_spectral_coclustering.ipynb <plot_spectral_coclustering.ipynb>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_