机器学习之聚类——双聚类简介及简单案例

这篇具有很好参考价值的文章主要介绍了机器学习之聚类——双聚类简介及简单案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


活动地址:CSDN21天学习挑战赛

 引子:高大上的生物学

        在生物学领域,为了研究基因表达 ,通常使用微阵列记录mRNA分子的含量并对基因的表达强度进行推断。它可以记录人体大量乃至全部基因在不同环境下的表达强度,并以矩阵形式进行储存,这些以矩阵形式存储的数据,被称为基因表达数据。

双聚类,人工智能,算法,机器学习,聚类,人工智能,python
        可以将基因表达数据抽象成基因表达矩阵,对基因表达数据很重要的一个研究方面就是发现基因和环境所属的类别,也即,对基因表达矩阵进行双聚类(对矩阵的行列两个方向同时聚类)

双聚类,人工智能,算法,机器学习,聚类,人工智能,python

双聚类算法

总的来说,双聚类的过程就是从原矩阵中获取聚类子矩阵,如下图两个例子

 双聚类,人工智能,算法,机器学习,聚类,人工智能,python

双聚类问题描述如下:

双聚类,人工智能,算法,机器学习,聚类,人工智能,python

        通过公式我们可以观察到,残差是用自身值减去相应行和相应列的平均值,再加上总体平均值得到。也就是说,残差值的大小与自身以及所在的行列中的元素有关。残差值越小,表明该位置上的元素与这一行这一列的相关性越大,在聚类时更有可能划分到一起。而残差值大,则表明本身的值较其他元素差距较大。所以,通过残差我们就可以表示出元素与双向聚类其他元素之间的相关性。

        双向聚类针对不一样的问题有不一样的策略,策略不同,运行效率也不同。策略一般有:贪婪策略(Greedy Iterative Search);穷举策略(Exhaustive Bicluster Enumeration);分而治之策略(Divide-and-Conquer);直接策略等。贪婪策略通过在每一步都选用局部内的最优结果,结合每一步达到最终全局最优;穷举策略由于其复杂度是指数型的,在数据很多的情况下有很大的弊端;分治策略通过将问题划分为不同的独立的小问题,通过逐个解决小问题寻求全局最优解,但这个解并不一定是最好的。

        上面只是对双聚类算法的原理做了最基础的探讨,在具体算法实现中,双聚类算法主要分为基于谱聚类算法的双聚类和基于凸聚类算法的双聚类。具体内容小编会找时间仔细研究并形成博文,尽情期待吧!!!

案例:官方案例

双聚类的案例网上资料比较少,这里附上sklearn官方的一个案例,感官上跟双聚类来一次亲密接触吧!

# 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()

运行结果如下:

双聚类,人工智能,算法,机器学习,聚类,人工智能,python

关于双聚类,笔者会更深入的研究,并写出博文,供大家参考!!

作者这水平有限,有不足之处欢迎留言指正

文章来源地址https://www.toymoban.com/news/detail-593045.html

到了这里,关于机器学习之聚类——双聚类简介及简单案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包