使用Scikit-learn包的BiclusterMixin

举报
yd_37369233 发表于 2026/08/17 10:19:21 2026/08/17
【摘要】 BiclusterMixin 是 scikit-learn 中为所有双聚类(Biclustering) 估计器提供的一个混入类(Mixin class)。你可以把它理解为一个“工具箱”,为双聚类算法统一提供几个非常实用的功能,让你能方便地分析和提取聚类结果。 核心功能这个混入类主要提供了以下四个功能:biclusters_ 属性:一个便捷属性,用于同时获取所有双聚类的行和列指示器。get_i...

BiclusterMixin 是 scikit-learn 中为所有双聚类(Biclustering) 估计器提供的一个混入类(Mixin class)

你可以把它理解为一个“工具箱”,为双聚类算法统一提供几个非常实用的功能,让你能方便地分析和提取聚类结果。

核心功能

这个混入类主要提供了以下四个功能:

  1. biclusters_ 属性:一个便捷属性,用于同时获取所有双聚类的行和列指示器。
  2. get_indices(i) 方法:获取第 i 个双聚类的行索引和列索引。
  3. get_shape(i) 方法:获取第 i 个双聚类的形状,即它包含多少行和多少列。
  4. get_submatrix(i, data) 方法:直接从原始数据 data 中提取出第 i 个双聚类对应的子矩阵。

注意:以上方法(除 biclusters_ 属性外)都要求估计器实例已经成功拟合(fit),并生成了 rows_columns_ 这两个属性。

如何使用

1. 在自定义双聚类算法中使用

如果你想自己实现一个双聚类算法,可以通过多重继承来获得这些现成的方法:

import numpy as np
from sklearn.base import BaseEstimator, BiclusterMixin

class MyBiclustering(BiclusterMixin, BaseEstimator):
    def fit(self, X, y=None):
        # 假设你的算法找到了2个双聚类
        # rows_ 是一个布尔矩阵,形状为 (n_clusters, n_samples)
        self.rows_ = np.array([[True, False, True, False],
                               [False, True, False, True]])
        # columns_ 是一个布尔矩阵,形状为 (n_clusters, n_features)
        self.columns_ = np.array([[True, False],
                                  [False, True]])
        return self

2. 使用内置的双聚类算法

scikit-learn 本身提供了双聚类算法,如 SpectralBiclusteringSpectralCoclustering,它们都使用了 BiclusterMixin。因此,你可以直接使用这些便捷方法:

from sklearn.cluster import SpectralBiclustering
import numpy as np

# 生成一些示例数据
X = np.array([[1, 1], [2, 1], [1, 0],
              [4, 7], [3, 5], [3, 6]])

# 初始化并拟合模型
model = SpectralBiclustering(n_clusters=2, random_state=0)
model.fit(X)

# 使用 BiclusterMixin 提供的方法
print(model.biclusters_)  # 获取所有聚类的行列指示器
print(model.get_indices(0))  # 获取第一个双聚类的行列索引
print(model.get_shape(0))  # 获取第一个双聚类的形状
print(model.get_submatrix(0, X))  # 提取第一个双聚类对应的子矩阵

官方示例

以下是一个来自 scikit-learn 官方文档的完整示例,演示了如何创建一个虚拟的双聚类器并使用 BiclusterMixin 提供的方法:

import numpy as np
from sklearn.base import BaseEstimator, BiclusterMixin

# 定义一个虚拟的双聚类器,它将所有行列都归为一个双聚类
class DummyBiClustering(BiclusterMixin, BaseEstimator):
    def fit(self, X, y=None):
        self.rows_ = np.ones(shape=(1, X.shape[0]), dtype=bool)
        self.columns_ = np.ones(shape=(1, X.shape[1]), dtype=bool)
        return self

X = np.array([[1, 1], [2, 1], [1, 0],
              [4, 7], [3, 5], [3, 6]])

bicluster = DummyBiClustering().fit(X)

# 检查是否拥有 biclusters_ 属性
print(hasattr(bicluster, "biclusters_"))  # 输出: True

# 获取唯一一个双聚类的行列索引
print(bicluster.get_indices(0))
# 输出: (array([0, 1, 2, 3, 4, 5]), array([0, 1]))

补充说明

  • get_submatrix 方法也兼容稀疏矩阵(sparse matrices)。
  • 在 scikit-learn 的类继承体系中,BiclusterMixinBaseEstimatorClassifierMixin 等并列,都是为特定类型的估计器提供基础功能的基类。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。