当前位置:首页 > 代码 > 正文

som聚类算法实现代码(som神经网络聚类简单例子)

admin 发布:2022-12-19 09:09 130


本篇文章给大家谈谈som聚类算法实现代码,以及som神经网络聚类简单例子对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

基因表达谱的SOM聚类分析识别功能基因集

前不久我接触了这样一个分析,给定基因表达矩阵后,通过 自组织映射(Self-organizing map,SOM) 技术识别其中的高表达基因集,以便和功能建立关联。

下文将该方法简称为SOM聚类分析,因为它就是一种基于神经网络的聚类算法。那么,SOM聚类在表达谱数据中是如何应用的呢?本篇我们就来看一下。

为了帮助大家理解这种方法,首先来看文献“ NLRP3 inflammasome activation drives tau pathology ”中的部分内容。

作者构建小鼠模型,模拟额颞叶痴呆(FTD)病理学效应。Tau22小鼠转基因了人类tauFTD变体,并在一段时间内发展为tau病理学。获取野生型(WT)和Tau22小鼠的脑组织并提取RNA,包括2、8、11月龄的小鼠,进行RNA芯片分析基因表达,获得脑组织在tau病理学过程中显著被激活的基因。

作者通过SOM聚类,鉴定了参与tau蛋白的致病性基因集 。分别根据野生型或Tau22小鼠在3、8、11月时间点的相似表达水平将基因分组,并根据表达水平升高将其定义为每种条件的特征基因。共识别了6个主要的表达模块,同一模块内的基因集具有相似的表达模式,它们在该时间点均处于相对高表达的状态,暗示它们在这些时间点中发挥主要活性。

为了明确这些高度活跃的基因发挥的功能,随后作者通过基因集富集分析(GSEA),比较Tau22小鼠相较于WT小鼠中哪些途径被激活。在3个月大的Tau22小鼠中,特征基因显示与免疫反应的联系,表明在疾病开始时特征基因就参与了免疫过程;而在疾病发展后期,小鼠中上调的基因参与了诸如“应激反应”等功能中,且高达73%的特征基因与干扰素相关。

不难理解,上述文献中,作者通过SOM聚类识别高度表达的基因集,用作功能分析。

本篇模仿该文献中的思路,展示如何在R中执行基因表达谱的SOM聚类。

使用kohonen包执行SOM聚类,首先安装加载该包。

接下来基于示例的基因表达谱,对各基因执行SOM聚类。

如上过程基于基因表达值进行了聚类,获得了聚类模块,并按模块内基因的平均表达值赋值了模块颜色。随后,即可从图中判断选择高表达的模块,将其中的基因挑选出来,作为发挥生物学过程的“活跃”基因集。

那么,如何获得各模块中,都包含哪些基因呢?参考以下操作。

这样,就将基因名称和其所属模块对应起来了。

最后,识别高表达的模块,并从中进一步筛选基因集就可以了。这些基因集既然存在高表达,那么必然会和功能密不可分。了解它们的功能,可以初步执行GO或KEGG富集分析进行探索,如开篇展示的文献中思路那样,不再多说了。

som聚类怎么输出聚类中心

通过大数据进行输出。

记所有输出神经元c组成的集合为,神经元c与输入层神经元之间的连接权向量为,算法作为一种非监督类的方法,理论上可以将人以为的输入模式在输出层映射成一维、二维甚至更高维的离散图形,并保持其拓扑结构不变。

聚类特征和聚类特征树:BIRCH聚类的重要策略9.1.3BIRCH的聚类过程:由存储空间决定的动态聚类9.1.4聚类的R实现9.1.5聚类应用:两期岗位培训的比较9.2网络聚类概述。

手写体数字图像聚类实验代码怎么写

本文所有实现代码均来自《Python机器学习及实战》

#-*- coding:utf-8 -*-

#分别导入numpy、matplotlib、pandas,用于数学运算、作图以及数据分析

import numpy as np

import matplotlib.pyplot as plt

import pandas as pd

#第一步:使用pandas读取训练数据和测试数据

digits_train = pd.read_csv('',header=None)

digits_test = pd.read_csv('',header=None)

#第二步:已知原始数据有65个特征值,前64个是像素特征,最后一个是每个图像样本的数字类别

#从训练集和测试集上都分离出64维度的像素特征和1维度的数字目标

X_train = digits_train[np.arange(64)]

y_train = digits_train[64]

X_test = digits_test[np.arange(64)]

y_test = digits_test[64]

#第三步:使用KMeans模型进行训练并预测

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=10)

kmeans.fit(X_train)

kmeans_y_predict = kmeans.predict(X_test)

#第四步:评估KMeans模型的性能

#如何评估聚类算法的性能?

#1.Adjusted Rand Index(ARI) 适用于被用来评估的数据本身带有正确类别的信息,ARI指标和计算Accuracy的方法类似

#2.Silhouette Coefficient(轮廓系数) 适用于被用来评估的数据没有所属类别 同时兼顾了凝聚度和分散度,取值范围[-1,1],值越大,聚类效果越好

from sklearn.metrics import adjusted_rand_score

print 'The ARI value of KMeans is',adjusted_rand_score(y_test,kmeans_y_predict)

#到此为止,手写体数字图像聚类--kmeans学习结束,下面单独讨论轮廓系数评价kmeans的性能

#****************************************************************************************************

#拓展学习:利用轮廓系数评价不同累簇数量(k值)的K-means聚类实例

from sklearn.metrics import silhouette_score

#分割出3*2=6个子图,并且在1号子图作图 subplot(nrows, ncols, plot_number)

plt.subplot(3,2,1)

#初始化原始数据点

x1 = np.array([1,2,3,1,5,6,5,5,6,7,8,9,7,9])

x2 = np.array([1,3,2,2,8,6,7,6,7,1,2,1,1,3])

# a = [1,2,3] b = [4,5,6] zipped = zip(a,b) 输出为元组的列表[(1, 4), (2, 5), (3, 6)]

X = np.array(zip(x1,x2)).reshape(len(x1),2)

#X输出为:array([[1, 1],[2, 3],[3, 2],[1, 2],...,[9, 3]])

#在1号子图作出原始数据点阵的分布

plt.xlim([0,10])

plt.ylim([0,10])

plt.title('Instances')

plt.scatter(x1,x2)

colors = ['b','g','r','c','m','y','k','b']

markers = ['o','s','D','v','^','p','*','+']

clusters = [2,3,4,5,8]

subplot_counter = 1

sc_scores = []

for t in clusters:

subplot_counter += 1

plt.subplot(3,2,subplot_counter)

kmeans_model = KMeans(n_clusters=t).fit(X)

for i,l in enumerate(kmeans_model.labels_):

plt.plot(x1[i],x2[i],color=colors[l],marker=markers[l],ls='None')

plt.xlim([0,10])

plt.ylim([0,10])

sc_score = silhouette_score(X,kmeans_model.labels_,metric='euclidean')

sc_scores.append(sc_score)

#绘制轮廓系数与不同类簇数量的直观显示图

plt.title('K=%s,silhouette coefficient = %0.03f'%(t,sc_score))

#绘制轮廓系数与不同类簇数量的关系曲线

plt.figure() #此处必须空一行,表示在for循环结束之后执行!!!

plt.plot(clusters,sc_scores,'*-') #绘制折线图时的样子

plt.xlabel('Number of Clusters')

plt.ylabel('Silhouette Coefficient Score')

plt.show()

#****************************************************************************************************

#总结:

#k-means聚类模型所采用的迭代式算法,直观易懂并且非常实用,但是有两大缺陷

#1.容易收敛到局部最优解,受随机初始聚类中心影响,可多执行几次k-means来挑选性能最佳的结果

#2.需要预先设定簇的数量,

数据挖掘干货总结(四)--聚类算法

本文共计2680字,预计阅读时长七分钟

聚类算法

 

一 、 本质

将数据划分到不同的类里,使相似的数据在同一类里,不相似的数据在不同类里

 

二 、 分类算法用来解决什么问题

文本聚类、图像聚类和商品聚类,便于发现规律,以解决数据稀疏问题

三 、 聚类算法基础知识

1. 层次聚类 vs 非层次聚类

– 不同类之间有无包含关系

2. 硬聚类 vs 软聚类

– 硬聚类:每个对象只属于一个类

– 软聚类:每个对象以某个概率属于每个类

3. 用向量表示对象

– 每个对象用一个向量表示,可以视为高维空间的一个点

– 所有对象形成数据空间(矩阵)

– 相似度计算:Cosine、点积、质心距离

4. 用矩阵列出对象之间的距离、相似度

5. 用字典保存上述矩阵(节省空间)

    D={(1,1):0,(1,2):2,(1,3):6...(5,5):0}

6. 评价方法

– 内部评价法(Internal Evalution):

• 没有外部标准,非监督式

• 同类是否相似,跨类是否相异

DB值越小聚类效果越好,反之,越不好

– 外部评价法(External Evalution):

• 准确度(accuracy): (C11+C22) / (C11 + C12 + C21 + C22)

• 精度(Precision): C11 / (C11 + C21 )

• 召回(Recall): C11 / (C11 + C12 )

• F值(F-measure):

β表示对精度P的重视程度,越大越重视,默认设置为1,即变成了F值,F较高时则能说明聚类效果较好。

四 、 有哪些聚类算法

主要分为 层次化聚类算法 , 划分式聚类算法 , 基于密度的聚类算法 , 基于网格的聚类算法 , 基于模型的聚类算法等 。

4.1 层次化聚类算法

又称树聚类算法,透过一种层次架构方式,反复将数据进行分裂或聚合。典型的有BIRCH算法,CURE算法,CHAMELEON算法,Sequence data rough clustering算法,Between groups average算法,Furthest neighbor算法,Neares neighbor算法等。

凝聚型层次聚类 :

先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终结条件被满足。

算法流程:

1. 将每个对象看作一类,计算两两之间的最小距离;

2. 将距离最小的两个类合并成一个新类;

3. 重新计算新类与所有类之间的距离;

4. 重复2、3,直到所有类最后合并成一类。

特点:

1. 算法简单

2. 层次用于概念聚类(生成概念、文档层次树)

3. 聚类对象的两种表示法都适用

4. 处理大小不同的簇

5. 簇选取步骤在树状图生成之后

4.2 划分式聚类算法

预先指定聚类数目或聚类中心,反复迭代逐步降低目标函数误差值直至收敛,得到最终结果。K-means,K-modes-Huang,K-means-CP,MDS_CLUSTER, Feature weighted fuzzy clustering,CLARANS等

经典K-means:

算法流程:

1. 随机地选择k个对象,每个对象初始地代表了一个簇的中心;

2. 对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;

3. 重新计算每个簇的平均值,更新为新的簇中心;

4. 不断重复2、3,直到准则函数收敛。

特点:

1.K的选择

2.中心点的选择

– 随机

– 多轮随机:选择最小的WCSS

3.优点

– 算法简单、有效

– 时间复杂度:O(nkt)

4.缺点

– 不适于处理球面数据

– 密度、大小不同的聚类,受K的限制,难于发现自然的聚类

4.3 基于模型的聚类算法

为每簇假定了一个模型,寻找数据对给定模型的最佳拟合,同一”类“的数据属于同一种概率分布,即假设数据是根据潜在的概率分布生成的。主要有基于统计学模型的方法和基于神经网络模型的方法,尤其以基于概率模型的方法居多。一个基于模型的算法可能通过构建反应数据点空间分布的密度函数来定位聚类。基于模型的聚类试图优化给定的数据和某些数据模型之间的适应性。

SOM 神经网络算法 :

该算法假设在输入对象中存在一些拓扑结构或顺序,可以实现从输入空间(n维)到输出平面(2维)的降维映射,其映射具有拓扑特征保持性质,与实际的大脑处理有很强的理论联系。

SOM网络包含输入层和输出层。输入层对应一个高维的输入向量,输出层由一系列组织在2维网格上的有序节点构成,输入节点与输出节点通过权重向量连接。学习过程中,找到与之距离最短的输出层单元,即获胜单元,对其更新。同时,将邻近区域的权值更新,使输出节点保持输入向量的拓扑特征。

算法流程:

1. 网络初始化,对输出层每个节点权重赋初值;

2. 将输入样本中随机选取输入向量,找到与输入向量距离最小的权重向量;

3. 定义获胜单元,在获胜单元的邻近区域调整权重使其向输入向量靠拢;

4. 提供新样本、进行训练;

5. 收缩邻域半径、减小学习率、重复,直到小于允许值,输出聚类结果。

4.4 基于密度聚类算法

只要邻近区域的密度(对象或数据点的数目)超过某个阈值,就继续聚类,擅于解决不规则形状的聚类问题,广泛应用于空间信息处理,SGC,GCHL,DBSCAN算法、OPTICS算法、DENCLUE算法。

DBSCAN:

对于集中区域效果较好,为了发现任意形状的簇,这类方法将簇看做是数据空间中被低密度区域分割开的稠密对象区域;一种基于高密度连通区域的基于密度的聚类方法,该算法将具有足够高密度的区域划分为簇,并在具有噪声的空间数据中发现任意形状的簇。

4.5 基于网格的聚类算法

    基于网格的方法把对象空间量化为有限数目的单元,形成一个网格结构。所有的聚类操作都在这个网格结构(即量化空间)上进行。这种方法的主要优点是它的处理 速度很快,其处理速度独立于数据对象的数目,只与量化空间中每一维的单元数目有关。但这种算法效率的提高是以聚类结果的精确性为代价的。经常与基于密度的算法结合使用。代表算法有STING算法、CLIQUE算法、WAVE-CLUSTER算法等。 

大数据分析之聚类算法

大数据分析之聚类算法

1. 什么是聚类算法

所谓聚类,就是比如给定一些元素或者对象,分散存储在数据库中,然后根据我们感兴趣的对象属性,对其进行聚集,同类的对象之间相似度高,不同类之间差异较大。最大特点就是事先不确定类别。

这其中最经典的算法就是KMeans算法,这是最常用的聚类算法,主要思想是:在给定K值和K个初始类簇中心点的情况下,把每个点(亦即数据记录)分到离其最近的类簇中心点所代表的类簇中,所有点分配完毕之后,根据一个类簇内的所有点重新计算该类簇的中心点(取平均值),然后再迭代的进行分配点和更新类簇中心点的步骤,直至类簇中心点的变化很小,或者达到指定的迭代次数。

KMeans算法本身思想比较简单,但是合理的确定K值和K个初始类簇中心点对于聚类效果的好坏有很大的影响。

聚类算法实现

假设对象集合为D,准备划分为k个簇。

基本算法步骤如下:

1、从D中随机取k个元素,作为k个簇的各自的中心。

2、分别计算剩下的元素到k个簇中心的相异度,将这些元素分别划归到相异度最低的簇。

3、根据聚类结果,重新计算k个簇各自的中心,计算方法是取簇中所有元素各自维度的算术平均数。

4、将D中全部元素按照新的中心重新聚类。

5、重复第4步,直到聚类结果不再变化。

6、将结果输出。

核心Java代码如下:

/**

* 迭代计算每个点到各个中心点的距离,选择最小距离将该点划入到合适的分组聚类中,反复进行,直到

* 分组不再变化或者各个中心点不再变化为止。

* @return

*/

public List[] comput() {

List[] results = new ArrayList[k];//为k个分组,分别定义一个聚簇集合,未来放入元素。

boolean centerchange = true;//该变量存储中心点是否发生变化

while (centerchange) {

iterCount++;//存储迭代次数

centerchange = false;

for (int i = 0; i k; i++) {

results[i] = new ArrayListT();

}

for (int i = 0; i players.size(); i++) {

T p = players.get(i);

double[] dists = new double[k];

for (int j = 0; j initPlayers.size(); j++) {

T initP = initPlayers.get(j);

/* 计算距离 这里采用的公式是两个对象相关属性的平方和,最后求开方*/

double dist = distance(initP, p);

dists[j] = dist;

}

int dist_index = computOrder(dists);//计算该点到各个质心的距离的最小值,获得下标

results[dist_index].add(p);//划分到对应的分组。

}

/*

* 将点聚类之后,重新寻找每个簇的新的中心点,根据每个点的关注属性的平均值确立新的质心。

*/

for (int i = 0; i k; i++) {

T player_new = findNewCenter(results[i]);

System.out.println("第"+iterCount+"次迭代,中心点是:"+player_new.toString());

T player_old = initPlayers.get(i);

if (!IsPlayerEqual(player_new, player_old)) {

centerchange = true;

initPlayers.set(i, player_new);

}

}

}

return results;

}

上面代码是其中核心代码,我们根据对象集合List和提前设定的k个聚集,最终完成聚类。我们测试一下,假设要测试根据NBA球员的场均得分情况,进行得分高中低的聚集,很简单,高得分在一组,中等一组,低得分一组。

我们定义一个Player类,里面有属性goal,并录入数据。并设定分组数目为k=3。

测试代码如下:

List listPlayers = new ArrayList();

Player p1 = new Player();

p1.setName(“mrchi1”);

p1.setGoal(1);

p1.setAssists(8);

listPlayers.add(p1);

Player p2 = new Player();

p2.setName("mrchi2");

p2.setGoal(2);

listPlayers.add(p2);

Player p3 = new Player();

p3.setName("mrchi3");

p3.setGoal(3);

listPlayers.add(p3);

//其他对象定义此处略。制造几个球员的对象即可。

KmeansPlayer kmeans = new KmeansPlayer(listPlayers, 3);

ListPlayer[] results = kmeans.comput();

for (int i = 0; i results.length; i++) {

System.out.println("类别" + (i + 1) + "聚集了以下球员:");

ListPlayer list = results[i];

for (Player p : list) {

System.out.println(p.getName() + "---" + p.getGoal()

}

}

算法运行结果:

可以看出中心点经历了四次迭代变化,最终分类结果也确实是相近得分的分到了一组。当然这种算法有缺点,首先就是初始的k个中心点的确定非常重要,结果也有差异。可以选择彼此距离尽可能远的K个点,也可以先对数据用层次聚类算法进行聚类,得到K个簇之后,从每个类簇中选择一个点,该点可以是该类簇的中心点,或者是距离类簇中心点最近的那个点。

建议收藏!10 种 Python 聚类算法完整操作示例

聚类或聚类分析是无监督学习问题。它通常被用作数据分析技术,用于发现数据中的有趣模式,例如基于其行为的客户群。有许多聚类算法可供选择,对于所有情况,没有单一的最佳聚类算法。相反,最好探索一系列聚类算法以及每种算法的不同配置。在本教程中,你将发现如何在 python 中安装和使用顶级聚类算法。完成本教程后,你将知道:

聚类分析,即聚类,是一项无监督的机器学习任务。它包括自动发现数据中的自然分组。与监督学习(类似预测建模)不同,聚类算法只解释输入数据,并在特征空间中找到自然组或群集。

群集通常是特征空间中的密度区域,其中来自域的示例(观测或数据行)比其他群集更接近群集。群集可以具有作为样本或点特征空间的中心(质心),并且可以具有边界或范围。

聚类可以作为数据分析活动提供帮助,以便了解更多关于问题域的信息,即所谓的模式发现或知识发现。例如:

聚类还可用作特征工程的类型,其中现有的和新的示例可被映射并标记为属于数据中所标识的群集之一。虽然确实存在许多特定于群集的定量措施,但是对所识别的群集的评估是主观的,并且可能需要领域专家。通常,聚类算法在人工合成数据集上与预先定义的群集进行学术比较,预计算法会发现这些群集。

有许多类型的聚类算法。许多算法在特征空间中的示例之间使用相似度或距离度量,以发现密集的观测区域。因此,在使用聚类算法之前,扩展数据通常是良好的实践。

一些聚类算法要求您指定或猜测数据中要发现的群集的数量,而另一些算法要求指定观测之间的最小距离,其中示例可以被视为“关闭”或“连接”。因此,聚类分析是一个迭代过程,在该过程中,对所识别的群集的主观评估被反馈回算法配置的改变中,直到达到期望的或适当的结果。scikit-learn 库提供了一套不同的聚类算法供选择。下面列出了10种比较流行的算法:

每个算法都提供了一种不同的方法来应对数据中发现自然组的挑战。没有最好的聚类算法,也没有简单的方法来找到最好的算法为您的数据没有使用控制实验。在本教程中,我们将回顾如何使用来自 scikit-learn 库的这10个流行的聚类算法中的每一个。这些示例将为您复制粘贴示例并在自己的数据上测试方法提供基础。我们不会深入研究算法如何工作的理论,也不会直接比较它们。让我们深入研究一下。

在本节中,我们将回顾如何在 scikit-learn 中使用10个流行的聚类算法。这包括一个拟合模型的例子和可视化结果的例子。这些示例用于将粘贴复制到您自己的项目中,并将方法应用于您自己的数据。

1.库安装

首先,让我们安装库。不要跳过此步骤,因为你需要确保安装了最新版本。你可以使用 pip Python 安装程序安装 scikit-learn 存储库,如下所示:

接下来,让我们确认已经安装了库,并且您正在使用一个现代版本。运行以下脚本以输出库版本号。

运行该示例时,您应该看到以下版本号或更高版本。

2.聚类数据集

我们将使用 make _ classification ()函数创建一个测试二分类数据集。数据集将有1000个示例,每个类有两个输入要素和一个群集。这些群集在两个维度上是可见的,因此我们可以用散点图绘制数据,并通过指定的群集对图中的点进行颜色绘制。这将有助于了解,至少在测试问题上,群集的识别能力如何。该测试问题中的群集基于多变量高斯,并非所有聚类算法都能有效地识别这些类型的群集。因此,本教程中的结果不应用作比较一般方法的基础。下面列出了创建和汇总合成聚类数据集的示例。

运行该示例将创建合成的聚类数据集,然后创建输入数据的散点图,其中点由类标签(理想化的群集)着色。我们可以清楚地看到两个不同的数据组在两个维度,并希望一个自动的聚类算法可以检测这些分组。

已知聚类着色点的合成聚类数据集的散点图接下来,我们可以开始查看应用于此数据集的聚类算法的示例。我已经做了一些最小的尝试来调整每个方法到数据集。3.亲和力传播亲和力传播包括找到一组最能概括数据的范例。

它是通过 AffinityPropagation 类实现的,要调整的主要配置是将“ 阻尼 ”设置为0.5到1,甚至可能是“首选项”。下面列出了完整的示例。

运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,我无法取得良好的结果。

数据集的散点图,具有使用亲和力传播识别的聚类

4.聚合聚类

聚合聚类涉及合并示例,直到达到所需的群集数量为止。它是层次聚类方法的更广泛类的一部分,通过 AgglomerationClustering 类实现的,主要配置是“ n _ clusters ”集,这是对数据中的群集数量的估计,例如2。下面列出了完整的示例。

运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,可以找到一个合理的分组。

使用聚集聚类识别出具有聚类的数据集的散点图

5.BIRCHBIRCH

聚类( BIRCH 是平衡迭代减少的缩写,聚类使用层次结构)包括构造一个树状结构,从中提取聚类质心。

它是通过 Birch 类实现的,主要配置是“ threshold ”和“ n _ clusters ”超参数,后者提供了群集数量的估计。下面列出了完整的示例。

运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,可以找到一个很好的分组。

使用BIRCH聚类确定具有聚类的数据集的散点图

6.DBSCANDBSCAN

聚类(其中 DBSCAN 是基于密度的空间聚类的噪声应用程序)涉及在域中寻找高密度区域,并将其周围的特征空间区域扩展为群集。

它是通过 DBSCAN 类实现的,主要配置是“ eps ”和“ min _ samples ”超参数。下面列出了完整的示例。

运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,尽管需要更多的调整,但是找到了合理的分组。

使用DBSCAN集群识别出具有集群的数据集的散点图

7.K均值

K-均值聚类可以是最常见的聚类算法,并涉及向群集分配示例,以尽量减少每个群集内的方差。

它是通过 K-均值类实现的,要优化的主要配置是“ n _ clusters ”超参数设置为数据中估计的群集数量。下面列出了完整的示例。

运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,可以找到一个合理的分组,尽管每个维度中的不等等方差使得该方法不太适合该数据集。

使用K均值聚类识别出具有聚类的数据集的散点图

8.Mini-Batch

K-均值Mini-Batch K-均值是 K-均值的修改版本,它使用小批量的样本而不是整个数据集对群集质心进行更新,这可以使大数据集的更新速度更快,并且可能对统计噪声更健壮。

它是通过 MiniBatchKMeans 类实现的,要优化的主配置是“ n _ clusters ”超参数,设置为数据中估计的群集数量。下面列出了完整的示例。

运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,会找到与标准 K-均值算法相当的结果。

带有最小批次K均值聚类的聚类数据集的散点图

9.均值漂移聚类

均值漂移聚类涉及到根据特征空间中的实例密度来寻找和调整质心。

它是通过 MeanShift 类实现的,主要配置是“带宽”超参数。下面列出了完整的示例。

运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,可以在数据中找到一组合理的群集。

具有均值漂移聚类的聚类数据集散点图

10.OPTICSOPTICS

聚类( OPTICS 短于订购点数以标识聚类结构)是上述 DBSCAN 的修改版本。

它是通过 OPTICS 类实现的,主要配置是“ eps ”和“ min _ samples ”超参数。下面列出了完整的示例。

运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,我无法在此数据集上获得合理的结果。

使用OPTICS聚类确定具有聚类的数据集的散点图

11.光谱聚类

光谱聚类是一类通用的聚类方法,取自线性线性代数。

它是通过 Spectral 聚类类实现的,而主要的 Spectral 聚类是一个由聚类方法组成的通用类,取自线性线性代数。要优化的是“ n _ clusters ”超参数,用于指定数据中的估计群集数量。下面列出了完整的示例。

运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,找到了合理的集群。

使用光谱聚类聚类识别出具有聚类的数据集的散点图

12.高斯混合模型

高斯混合模型总结了一个多变量概率密度函数,顾名思义就是混合了高斯概率分布。它是通过 Gaussian Mixture 类实现的,要优化的主要配置是“ n _ clusters ”超参数,用于指定数据中估计的群集数量。下面列出了完整的示例。

运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,我们可以看到群集被完美地识别。这并不奇怪,因为数据集是作为 Gaussian 的混合生成的。

使用高斯混合聚类识别出具有聚类的数据集的散点图

在本文中,你发现了如何在 python 中安装和使用顶级聚类算法。具体来说,你学到了:

som聚类算法实现代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于som神经网络聚类简单例子、som聚类算法实现代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/5741.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载