无监督学习的集成方法:相似性矩阵的聚类

这篇具有很好参考价值的文章主要介绍了无监督学习的集成方法:相似性矩阵的聚类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在机器学习中,术语Ensemble指的是并行组合多个模型,这个想法是利用群体的智慧,在给出的最终答案上形成更好的共识。

这种类型的方法已经在监督学习领域得到了广泛的研究和应用,特别是在分类问题上,像RandomForest这样非常成功的算法。通常应用一些投票/加权系统,将每个单独模型的输出组合成最终的、更健壮的和一致的输出。

在无监督学习领域,这项任务变得更加困难。首先,因为它包含了该领域本身的挑战,我们对数据没有先验知识,无法将自己与任何目标进行比较。其次,因为找到一种合适的方法来结合所有模型的信息仍然是一个问题,而且对于如何做到这一点还没有达成共识。

在本文中,我们讨论关于这个主题的最佳方法,即相似性矩阵的聚类。

无监督学习的集成方法:相似性矩阵的聚类,人工智能,机器学习,聚类,集成学习

该方法的主要思想是:给定一个数据集X,创建一个矩阵S,使得Si表示xi和xj之间的相似性。该矩阵是基于几个不同模型的聚类结果构建的。

二元共现矩阵

构建模型的第一步是创建输入之间的二元共现矩阵。

无监督学习的集成方法:相似性矩阵的聚类,人工智能,机器学习,聚类,集成学习

它用于指示两个输入i和j是否属于同一个簇。

 import numpy as np
 from scipy import sparse
 
 def build_binary_matrix( clabels ):
   
   data_len = len(clabels)
 
   matrix=np.zeros((data_len,data_len))
   for i in range(data_len):
     matrix[i,:] = clabels == clabels[i]
   return matrix
 
 labels = np.array( [1,1,1,2,3,3,2,4] )
 build_binary_matrix(labels)

无监督学习的集成方法:相似性矩阵的聚类,人工智能,机器学习,聚类,集成学习

用KMeans构造相似矩阵

我们已经构造了一个函数来二值化我们的聚类,下面可以进入构造相似矩阵的阶段。

我们这里介绍一个最常见的方法,只包括计算M个不同模型生成的M个共现矩阵之间的平均值。定义为:

无监督学习的集成方法:相似性矩阵的聚类,人工智能,机器学习,聚类,集成学习

这样,落在同一簇中的条目的相似度值将接近于1,而落在不同组中的条目的相似度值将接近于0。

我们将基于K-Means模型创建的标签构建一个相似矩阵。使用MNIST数据集进行。为了简单和高效,我们将只使用10000张经过PCA降维的图像。

 from sklearn.datasets import fetch_openml
 from sklearn.decomposition import PCA
 from sklearn.cluster import MiniBatchKMeans, KMeans
 from sklearn.model_selection import train_test_split
 
 mnist = fetch_openml('mnist_784')
 X = mnist.data
 y = mnist.target
 
 X, _, y, _ = train_test_split(X,y, train_size=10000, stratify=y, random_state=42 )
 
 pca = PCA(n_components=0.99)
 X_pca = pca.fit_transform(X)

为了使模型之间存在多样性,每个模型都使用随机数量的簇实例化。

 NUM_MODELS = 500
 MIN_N_CLUSTERS = 2
 MAX_N_CLUSTERS = 300
 
 np.random.seed(214)
 model_sizes = np.random.randint(MIN_N_CLUSTERS, MAX_N_CLUSTERS+1, size=NUM_MODELS)
 clt_models = [KMeans(n_clusters=i, n_init=4, random_state=214) 
               for i in model_sizes]
 
 for i, model in enumerate(clt_models):
   print( f"Fitting - {i+1}/{NUM_MODELS}" )
   model.fit(X_pca)

下面的函数就是创建相似矩阵

 def build_similarity_matrix( models_labels ):
   n_runs, n_data = models_labels.shape[0], models_labels.shape[1]
 
   sim_matrix = np.zeros( (n_data, n_data) )
 
   for i in range(n_runs):
     sim_matrix += build_binary_matrix( models_labels[i,:] )
 
   sim_matrix = sim_matrix/n_runs
 
   return sim_matrix

调用这个函数:

 models_labels = np.array([ model.labels_ for model in clt_models ])
 sim_matrix = build_similarity_matrix(models_labels)

最终结果如下:

无监督学习的集成方法:相似性矩阵的聚类,人工智能,机器学习,聚类,集成学习

来自相似矩阵的信息在最后一步之前仍然可以进行后处理,例如应用对数、多项式等变换。

在我们的情况下,我们将不做任何更改。

 Pos_sim_matrix = sim_matrix

对相似矩阵进行聚类

相似矩阵是一种表示所有聚类模型协作所建立的知识的方法。

通过它,我们可以直观地看到哪些条目更有可能属于同一个簇,哪些不属于。但是这些信息仍然需要转化为实际的簇。

这是通过使用可以接收相似矩阵作为参数的聚类算法来完成的。这里我们使用SpectralClustering。

 from sklearn.cluster import SpectralClustering
 spec_clt = SpectralClustering(n_clusters=10, affinity='precomputed',
                               n_init=5, random_state=214)
 final_labels = spec_clt.fit_predict(pos_sim_matrix)

与标准KMeans模型的比较

我们来与KMeans进行性对比,这样可以确认我们的方法是否有效。

我们将使用NMI, ARI,集群纯度和类纯度指标来评估标准KMeans模型与我们集成模型进行对比。此外我们还将绘制权变矩阵,以可视化哪些类属于每个簇。

 from seaborn import heatmap
 import matplotlib.pyplot as plt
 
 def data_contingency_matrix(true_labels, pred_labels):
   
   fig, (ax) = plt.subplots(1, 1, figsize=(8,8))
 
   n_clusters = len(np.unique(pred_labels))
   n_classes = len(np.unique(true_labels))
   label_names =  np.unique(true_labels)
   label_names.sort()
 
   contingency_matrix = np.zeros( (n_classes, n_clusters) )
 
   for i, true_label in enumerate(label_names):
     for j in range(n_clusters):
       contingency_matrix[i, j] = np.sum(np.logical_and(pred_labels==j, true_labels==true_label))
 
   heatmap(contingency_matrix.astype(int), ax=ax,
           annot=True, annot_kws={"fontsize":14}, fmt='d')
   
   ax.set_xlabel("Clusters", fontsize=18)
   ax.set_xticks( [i+0.5 for i in range(n_clusters)] )
   ax.set_xticklabels([i for i in range(n_clusters)], fontsize=14)
   
   ax.set_ylabel("Original classes", fontsize=18)
   ax.set_yticks( [i+0.5 for i in range(n_classes)] )
   ax.set_yticklabels(label_names, fontsize=14, va="center")
   
   ax.set_title("Contingency Matrix\n", ha='center', fontsize=20)

无监督学习的集成方法:相似性矩阵的聚类,人工智能,机器学习,聚类,集成学习

 from sklearn.metrics import normalized_mutual_info_score, adjusted_rand_score
 
 def purity( true_labels, pred_labels ):
   
   n_clusters = len(np.unique(pred_labels))
   n_classes = len(np.unique(true_labels))
   label_names =  np.unique(true_labels)
 
   purity_vector = np.zeros( (n_classes) )
   contingency_matrix = np.zeros( (n_classes, n_clusters) )
 
   for i, true_label in enumerate(label_names):
     for j in range(n_clusters):
       contingency_matrix[i, j] = np.sum(np.logical_and(pred_labels==j, true_labels==true_label))
 
   purity_vector = np.max(contingency_matrix, axis=1)/np.sum(contingency_matrix, axis=1)
 
   print( f"Mean Class Purity - {np.mean(purity_vector):.2f}" ) 
   for i, true_label in enumerate(label_names):
     print( f" {true_label} - {purity_vector[i]:.2f}" ) 
 
   
   cluster_purity_vector = np.zeros( (n_clusters) )
   cluster_purity_vector = np.max(contingency_matrix, axis=0)/np.sum(contingency_matrix, axis=0)
 
   print( f"Mean Cluster Purity - {np.mean(cluster_purity_vector):.2f}" ) 
   for i in range(n_clusters):
     print( f" {i} - {cluster_purity_vector[i]:.2f}" ) 
 
 kmeans_model = KMeans(10, n_init=50, random_state=214)
 km_labels = kmeans_model.fit_predict(X_pca)
 
 data_contingency_matrix(y, km_labels)
 
 print( "Single KMeans NMI - ", normalized_mutual_info_score(y, km_labels) )
 print( "Single KMeans ARI - ", adjusted_rand_score(y, km_labels) )
 purity(y, km_labels)

无监督学习的集成方法:相似性矩阵的聚类,人工智能,机器学习,聚类,集成学习

 data_contingency_matrix(y, final_labels)
 
 print( "Ensamble NMI - ", normalized_mutual_info_score(y, final_labels) )
 print( "Ensamble ARI - ", adjusted_rand_score(y, final_labels) )
 purity(y, final_labels)

无监督学习的集成方法:相似性矩阵的聚类,人工智能,机器学习,聚类,集成学习

无监督学习的集成方法:相似性矩阵的聚类,人工智能,机器学习,聚类,集成学习

从上面的值可以看出,Ensemble方法确实能够提高聚类的质量。我们还可以在权变矩阵中看到更一致的行为,具有更好的分布类和更少的“噪声”。

本文引用

Strehl, Alexander, and Joydeep Ghosh. “Cluster ensembles — -a knowledge reuse framework for combining multiple partitions.” Journal of machine learning research 3.Dec (2002): 583–617.

Fred, Ana, and Anil K. Jain. “Combining multiple clusterings using evidence accumulation.” IEEE transactions on pattern analysis and machine intelligence 27.6 (2005): 835–850.

Topchy, Alexander, et al. “Combining multiple weak clusterings.” Third IEEE International Conference on Data Mining. IEEE, 2003.

Fern, Xiaoli Zhang, and Carla E. Brodley. “Solving cluster ensemble problems by bipartite graph partitioning.” Proceedings of the twenty-first international conference on Machine learning. 2004.

Gionis, Aristides, Heikki Mannila, and Panayiotis Tsaparas. “Clustering aggregation.” ACM Transactions on Knowledge Discovery from Data (TKDD) 1.1 (2007): 1–30.

https://avoid.overfit.cn/post/526bea5f183249008f77ccc479e2f555

作者:Nielsen Castelo Damasceno Dantas文章来源地址https://www.toymoban.com/news/detail-755214.html

到了这里,关于无监督学习的集成方法:相似性矩阵的聚类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 相似性度量(距离度量)方法(一):基本种类与公式

    相似性度量(或距离度量)方法在多元统计中的聚类分析、判别分析中的距离判别法、泛函分析、机器学习等方面都有应用。所以对于数据分析、机器学习等方面,掌握相似性的不同度量方法是十分重要且必要的。 相似性度量与距离度量本质上是同一件事情。如果两组数据之

    2024年01月24日
    浏览(41)
  • ModaHub魔搭社区:AI原生云向量数据库Zilliz Cloud与 OpenAI 集成搭建相似性搜索系统

    目录 准备工作 检索图书 本文将讨论如何使用 OpenAI 的 Embedding API 与 Zilliz Cloud 搭建相似性搜索系统。 在本篇中你将看到如何使用 OpenAI 的 Embedding API 和 Zilliz Cloud 完成图书检索。当前,很多的图书检索方案,包括公共图书馆里使用的那些方案,都是使用匹配的方式获取

    2024年02月15日
    浏览(49)
  • 大脑与机器学习的相似性:探索人工智能的未来

    人工智能(Artificial Intelligence, AI)是一门研究如何让计算机模拟人类智能的学科。人类智能包括学习、理解语言、认知、推理、计划、视觉、语音等多种能力。人工智能的目标是让计算机具备这些能力,以便在各种应用场景中与人类相互作用。 机器学习(Machine Learning, ML)是

    2024年01月19日
    浏览(52)
  • OpenCV书签 #结构相似性SSIM算法的原理与图片相似性实验

    结构相似性(Structural Similarity,简称SSIM算法) ,主要用于检测两张相同尺寸的图像的相似度、或者检测图像的失真程度,是一种衡量两幅图像相似度的指标。 给定两个图像 x 和 y,两张图像的结构相似性可按照以下方式求出: 结构相似性的范围为 -1 到 1。当两张图像一模一

    2024年01月24日
    浏览(42)
  • 注意力机制中Q和K相乘的意义是什么?为什么Q和K相乘就可以得到它们之间的相似性/权重矩阵呢?

    在注意力机制中, query 和 key 相乘得到的相似度其实是通过计算两个向量之间的点积来实现的。具体而言,我们将 query 和 key 进行点积运算后【这里的点积运算可以看作是一种度量相似度的方法,它可以从数学上衡量两个向量之间的相关性。当两个向量越相似时,它们的点积

    2024年02月15日
    浏览(53)
  • 图像检索技术研究:深度度量与深度散列在相似性学习中的应用比较与实践 - 使用Python与Jupyter环境

    引言 在计算机视觉领域,图像检索是一个长期存在并持续受到研究者关注的重要话题。随着大数据时代的到来,如何高效、准确地从海量数据中检索到相似的图像成为一个巨大的挑战。传统的检索方法在大数据环境下表现不佳,而深度学习技术的崛起为图像检索带来了新的机

    2024年02月12日
    浏览(43)
  • 相似性和相异性的度量

    相似度(Similarity): 两个数据对象相似程度的数值度量; 对象越相似,值越高; 通常在[0, 1]区间取值。 有时候相似度的取值范围可能在[-1, 1]之间,这时正负号包含了一定信息,这种情况下可以保留其符号,而非强行转换到[0, 1]之间。 相异度(Dissimilarity): 两个对象不同

    2024年02月07日
    浏览(45)
  • 图像质量评估算法SSIM(结构相似性)

    由于最近在阅读图像超分辨率方面的RCAN论文,里面涉及到了两幅图像之间的相似性,所以就引入了这个指标,并最终使用pyhton进行实现。结构相似性,是一种衡量两幅图像相似度的指标。该指标首先由德州大学奥斯丁分校的图像和视频工程实验室(Laboratory for Image and Video Eng

    2024年01月18日
    浏览(96)
  • 安全研究 # 二进制代码相似性检测综述

    本文参考: [1]方磊,武泽慧,魏强.二进制代码相似性检测技术综述[J].计算机科学,2021,48(05):1-8. (信息工程大学数学工程与先进计算国家重点实验室, 国家重点研发课题,北大核心) 代码相似性检测常用于 代码预测 、 知识产权保护 和 漏洞搜索 等领域,可分为 源代码相似性检测

    2024年02月02日
    浏览(39)
  • 相似性搜索:第 7 部分--LSH 组合物

    Vyacheslav Efimov – Medium S 相似性搜索 是一个问题,给定一个查询,目标是在所有数据库文档中找到与其最相似的文档。         在数据科学中,相似性搜索经常出现在 NLP 领域、搜索引擎或推荐系统中,其中需要检索最相关的文档或项目以进行查询。有多种不同的方法可以

    2024年02月07日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包