使用Scikit-learn包的BiclusterMixin
【摘要】 BiclusterMixin 是 scikit-learn 中为所有双聚类(Biclustering) 估计器提供的一个混入类(Mixin class)。你可以把它理解为一个“工具箱”,为双聚类算法统一提供几个非常实用的功能,让你能方便地分析和提取聚类结果。 核心功能这个混入类主要提供了以下四个功能:biclusters_ 属性:一个便捷属性,用于同时获取所有双聚类的行和列指示器。get_i...
BiclusterMixin 是 scikit-learn 中为所有双聚类(Biclustering) 估计器提供的一个混入类(Mixin class)。
你可以把它理解为一个“工具箱”,为双聚类算法统一提供几个非常实用的功能,让你能方便地分析和提取聚类结果。
核心功能
这个混入类主要提供了以下四个功能:
biclusters_属性:一个便捷属性,用于同时获取所有双聚类的行和列指示器。get_indices(i)方法:获取第i个双聚类的行索引和列索引。get_shape(i)方法:获取第i个双聚类的形状,即它包含多少行和多少列。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 本身提供了双聚类算法,如 SpectralBiclustering 和 SpectralCoclustering,它们都使用了 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 的类继承体系中,
BiclusterMixin与BaseEstimator、ClassifierMixin等并列,都是为特定类型的估计器提供基础功能的基类。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)