Spec-Zone.ru › scikit-learn

Примечание

Перейти к концу, чтобы загрузить весь пример кода. или запустить этот пример в браузере через JupyterLite или Binder

Демонстрация алгоритма спектрального биклостерирования

В этом примере показано, как сгенерировать набор данных с шахматной доской и выполнить биклостеризацию с помощью алгоритма SpectralBiclustering. Алгоритм спектрального биклостерирования специально разработан для кластеризации данных, одновременно учитывая строки (образцы) и столбцы (признаки) матрицы. Он стремится выявить закономерности не только между образцами, но и внутри подмножеств образцов, что позволяет обнаруживать локальную структуру в данных. Это делает спектральное биклостерирование особенно подходящим для наборов данных, где порядок или расположение признаков фиксированы, например, в изображениях, временных рядах или геномах.

Данные генерируются, затем перемешиваются и передаются алгоритму спектрального биклостерирования. Затем строки и столбцы перемешанной матрицы переупорядочиваются для построения найденных биклостеров.

# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

Генерация примера данных

Мы генерируем пример данных с помощью функции make_checkerboard. Каждый пиксель внутри shape=(300, 300) представляет с помощью своего цвета значение из равномерного распределения. Шум добавляется из нормального распределения, где значение, выбранное для noise , является стандартным отклонением.

Как видите, данные распределены по 12 ячейкам кластеров и относительно хорошо различимы.

from matplotlib import pyplot as plt

from sklearn.datasets import make_checkerboard

n_clusters = (4, 3)
data, rows, columns = make_checkerboard(
    shape=(300, 300), n_clusters=n_clusters, noise=10, shuffle=False, random_state=42
)

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

Мы перемешиваем данные, а цель состоит в том, чтобы восстановить их позже с помощью SpectralBiclustering.

import numpy as np

# Creating lists of shuffled row and column indices
rng = np.random.RandomState(0)
row_idx_shuffled = rng.permutation(data.shape[0])
col_idx_shuffled = rng.permutation(data.shape[1])

Мы переопределяем перемешанные данные и строим их. Мы наблюдаем, что мы потеряли структуру исходной матрицы данных.

data = data[row_idx_shuffled][:, col_idx_shuffled]

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

Подгонка SpectralBiclustering

Мы подгоняем модель и сравниваем полученные кластеры с истинным значением. Обратите внимание, что при создании модели мы указываем то же количество кластеров, что и при создании набора данных (n_clusters = (4, 3)), что будет способствовать получению хорошего результата.

from sklearn.cluster import SpectralBiclustering
from sklearn.metrics import consensus_score

model = SpectralBiclustering(n_clusters=n_clusters, method="log", random_state=0)
model.fit(data)

# Compute the similarity of two sets of biclusters
score = consensus_score(
    model.biclusters_, (rows[:, row_idx_shuffled], columns[:, col_idx_shuffled])
)
print(f"consensus score: {score:.1f}")
consensus score: 1.0

Оценка находится в диапазоне от 0 до 1, где 1 соответствует идеально совпадению. Она показывает качество биклостеризации.

Построение результатов

Теперь мы переупорядочиваем данные на основе меток строк и столбцов, назначенных моделью SpectralBiclustering в порядке возрастания и строим снова. Значения row_labels_ изменяются от 0 до 3, а значения column_labels_ изменяются от 0 до 2, представляя в общей сложности 4 кластера на строку и 3 кластера на столбец.

# Reordering first the rows and then the columns.
reordered_rows = data[np.argsort(model.row_labels_)]
reordered_data = reordered_rows[:, np.argsort(model.column_labels_)]

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

В качестве последнего шага мы хотим продемонстрировать взаимосвязи между метками строк и столбцов, назначенными моделью. Поэтому мы создаем сетку с помощью numpy.outer, которая берет отсортированные row_labels_ и column_labels_ и добавляет 1 к каждому, чтобы гарантировать, что метки начинаются с 1, а не с 0, для лучшей визуализации.

plt.matshow(
    np.outer(np.sort(model.row_labels_) + 1, np.sort(model.column_labels_) + 1),
    cmap=plt.cm.Blues,
)
plt.title("Checkerboard structure of rearranged data")
plt.show()
Checkerboard structure of rearranged data

Внешнее произведение векторов меток строк и столбцов демонстрирует представление структуры шахматной доски, где различные комбинации меток строк и столбцов представлены различными оттенками синего.

Общее время выполнения скрипта: (0 минут 0,509 секунд)

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_spectral_biclustering.ipynb

Download Python source code: plot_spectral_biclustering.py

Download zipped: plot_spectral_biclustering.zip

Связанные примеры

Демонстрация алгоритма спектрального совместного кластерирования

Выбор количества кластеров с помощью анализа силуэта в кластеризации KMeans

Обучение Label Propagation сложной структуре

Сравнение различных алгоритмов кластеризации на наборах данных-игрушках

© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/auto_examples/bicluster/plot_spectral_biclustering.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API