前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Scikit-Learn 中文文档】双聚类 - 无监督学习 - 用户指南 | ApacheCN

【Scikit-Learn 中文文档】双聚类 - 无监督学习 - 用户指南 | ApacheCN

作者头像
片刻
发布2018-01-15 16:59:38
2.1K0
发布2018-01-15 16:59:38
举报
文章被收录于专栏:AILearning

2.4. 双聚类

Biclustering 可以使用 sklearn.cluster.bicluster 模块。 Biclustering 算法对数据矩阵的行列同时进行聚类。 同时对行列进行聚类称之为 biclusters。 每一次聚类都会通过原始数据矩阵的一些属性确定一个子矩阵。

例如, 一个矩阵 (10, 10) , 一个 bicluster 聚类,有三列二行,就是一个子矩阵 (3, 2)

>>>

代码语言:javascript
复制
>>> import numpy as np
>>> data = np.arange(100).reshape(10, 10)
>>> rows = np.array([0, 2, 3])[:, np.newaxis]
>>> columns = np.array([1, 2])
>>> data[rows, columns]
array([[ 1,  2],
       [21, 22],
       [31, 32]])

为了可视化, 给定一个 bicluster 聚类,数据矩阵的行列可以重新分配,使得 bi-cluster 是连续的。

算法在如何定义 bicluster 方面有一些不同,常见类型包括:

  • 不变的 values , 不变的 rows, 或者不变的 columns。
  • 异常高的或者低的值。
  • 低方差的子矩阵。
  • 相关的 rows 或者 columns。

算法在分配给 bicluster 行列的方式不同, 会导致不同的 bicluster 结构。 当行和列分成分区时,会发生对角线或者棋盘结构。

如果每一行和每一列同属于一种 bicluster ,就重新排列数据矩阵的行和列,会使得 bicluster 呈现对角线。 下面是一个例子,此结构的biclusters 具有比其他行列更高的平均值:

在棋盘结构的例子中, 每一行属于所有的列类别, 每一列属于所有的行类别。 下面是一个例子,每个 bicluster 中的值差异较小:

在拟合模型之后, 可以在 rows_ 和 columns_ 属性中找到行列 cluster membership 。 rows_[i] 是一个二进制的向量, 就是属于 bicluster i 的一行。 同样的, columns_[i] 就表示属于 bicluster i 的列。

一些模块也有 row_labels_ 何 column_labels_ 属性。 这些模块对行列进行分区, 例如对角线或者棋盘 bicluster 结构。

Note

Biclustering 在不同的领域有很多其他名称,包括 co-clustering, two-mode clustering, two-way clustering, block clustering, coupled two-way clustering 等.有一些算法的名称,比如 Spectral Co-Clustering algorithm, 反应了这些备用名称。

2.4.1. Spectral Co-Clustering

SpectralCoclustering 算法找到的 bicluster 的值比相应的其他行和列更高。

每一个行和列都只属于一个 bicluster, 所以重新分配行和列,使得分区连续显示对角线上的 high value:

Note

算法将输入的数据矩阵看做成二分图:该矩阵的行和列对应于两组顶点,每个条目对应于行和列之间的边,该算法近似的进行归一化,对图进行切割,找到更重的子图。

2.4.1.1. 数学公式

例子:

参考文献:

2.4.2. Spectral Biclustering

SpectralBiclustering 算法假设输入的数据矩阵具有隐藏的棋盘结构。 具有这种结构的矩阵的行列 可能被分区,使得在笛卡尔积中的 大部分 biclusters 的 row clusters 和 column cluster 是近似恒定的。

例如,如果有两个row 分区和三个列分区,每一行属于三个 bicluster ,每一列属于两个 bicluster。

这个算法划分矩阵的行和列,以至于提供一个相应的块状不变的棋盘矩阵,近似于原始矩阵。

2.4.2.1. 数学表示

示例:

参考文献:

2.4.3. Biclustering 评测

有两种评估双组分结果的方法:内部和外部。 诸如群集稳定性等内部措施只依赖于数据和结果本身。 目前在scikit-learn中没有内部的二集群措施。外部措施是指外部信息来源,例如真正的解决方案。 当使用真实数据时,真正的解决方案通常是未知的,但是,由于真正的解决方案是已知的,因此人造数据的双重分析可能对于评估算法非常有用。

为了将一组已发现的双组分与一组真正的双组分进行比较, 需要两个相似性度量:单个双色团体的相似性度量,以及将这些个体相似度结合到总分中的方法。

有些方法已经开发出来,用来比较两个 biclusters 的数据集。 从现在开始 之后 consensus_score (Hochreiter et. al., 2010) 是可以用:

  1. 使用 Jaccard 索引或类似措施,计算 biclusters 的 bicluster 相似性。
  2. 以一对一的方式将 bicluster 分从一组分配给另一组,以最大化其相似性的总和。该步骤使用匈牙利算法执行。
  3. 相似性的最终总和除以较大集合的大小。

最小共识得分为0,发生在所有 biclusters 完全不相似时。当两组 biclusters 相同时,最大分数为1。

参考文献:

中文文档: http://sklearn.apachecn.org/cn/stable/modules/biclustering.html

英文文档: http://sklearn.apachecn.org/en/stable/modules/biclustering.html

官方文档: http://scikit-learn.org/stable/

GitHub: https://github.com/apachecn/scikit-learn-doc-zh(觉得不错麻烦给个 Star,我们一直在努力)

贡献者: https://github.com/apachecn/scikit-learn-doc-zh#贡献者

关于我们: http://www.apachecn.org/organization/209.html

有兴趣的们也可以和我们一起来维护,持续更新中 。。。

机器学习交流群: 629470233

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-11-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.4. 双聚类
    • 2.4.1. Spectral Co-Clustering
      • 2.4.1.1. 数学公式
    • 2.4.2. Spectral Biclustering
      • 2.4.2.1. 数学表示
    • 2.4.3. Biclustering 评测
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档