搜索
首页科技周边人工智能无监督学习的集成方法:相似性矩阵的聚类

在机器学习中,术语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方法能够有效提升聚类的质量。同时,在权变矩阵中也能观察到更加一致的行为,具有更好的分布类别和较少的“噪声”

以上是无监督学习的集成方法:相似性矩阵的聚类的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:51CTO.COM。如有侵权,请联系admin@php.cn删除
AI游戏开发通过Upheaval的Dreamer Portal进入其代理时代AI游戏开发通过Upheaval的Dreamer Portal进入其代理时代May 02, 2025 am 11:17 AM

动荡游戏:与AI代理商的游戏开发彻底改变 Roupheaval是一家游戏开发工作室,由暴风雪和黑曜石等行业巨头的退伍军人组成,有望用其创新的AI驱动的Platfor革新游戏创作

Uber想成为您的Robotaxi商店,提供商会让他们吗?Uber想成为您的Robotaxi商店,提供商会让他们吗?May 02, 2025 am 11:16 AM

Uber的Robotaxi策略:自动驾驶汽车的骑车生态系统 在最近的Curbivore会议上,Uber的Richard Willder推出了他们成为Robotaxi提供商的乘车平台的策略。 利用他们在

AI代理玩电子游戏将改变未来的机器人AI代理玩电子游戏将改变未来的机器人May 02, 2025 am 11:15 AM

事实证明,视频游戏是尖端AI研究的宝贵测试场所,尤其是在自主代理和现实世界机器人的开发中,甚至有可能促进人工通用智能(AGI)的追求。 一个

创业公司工业综合体VC 3.0和James Currier的宣言创业公司工业综合体VC 3.0和James Currier的宣言May 02, 2025 am 11:14 AM

不断发展的风险投资格局的影响在媒体,财务报告和日常对话中显而易见。 但是,对投资者,初创企业和资金的具体后果经常被忽略。 风险资本3.0:范式

Adobe在Adobe Max London 2025更新创意云和萤火虫Adobe在Adobe Max London 2025更新创意云和萤火虫May 02, 2025 am 11:13 AM

Adobe Max London 2025对Creative Cloud和Firefly进行了重大更新,反映了向可访问性和生成AI的战略转变。 该分析结合了事件前简报中的见解,并融合了Adobe Leadership。 (注意:Adob

Llamacon宣布的所有元数据Llamacon宣布的所有元数据May 02, 2025 am 11:12 AM

Meta的Llamacon公告展示了一项综合的AI策略,旨在直接与OpenAI等封闭的AI系统竞争,同时为其开源模型创建了新的收入流。 这个多方面的方法目标bo

关于AI仅仅是普通技术的主张的酿造争议关于AI仅仅是普通技术的主张的酿造争议May 02, 2025 am 11:10 AM

人工智能领域对这一论断存在严重分歧。一些人坚称,是时候揭露“皇帝的新衣”了,而另一些人则强烈反对人工智能仅仅是普通技术的观点。 让我们来探讨一下。 对这一创新性人工智能突破的分析,是我持续撰写的福布斯专栏文章的一部分,该专栏涵盖人工智能领域的最新进展,包括识别和解释各种有影响力的人工智能复杂性(请点击此处查看链接)。 人工智能作为普通技术 首先,需要一些基本知识来为这场重要的讨论奠定基础。 目前有大量的研究致力于进一步发展人工智能。总目标是实现人工通用智能(AGI)甚至可能实现人工超级智能(AS

模型公民,为什么AI值是下一个业务码模型公民,为什么AI值是下一个业务码May 02, 2025 am 11:09 AM

公司AI模型的有效性现在是一个关键的性能指标。自AI BOOM以来,从编写生日邀请到编写软件代码的所有事物都将生成AI使用。 这导致了语言mod的扩散

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器