图聚类(图聚类中心)
本篇文章给大家谈谈图聚类,以及图聚类中心对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
图像聚类
(1)利用主成分分析后选取主成分利用k-means算法进行聚类
(2)哪弊扮提取图卜罩像的灰度直方图,利用直方图作为特征向量聚类。(有些类似层次聚类,通过小区间合并依次聚类)
(3)像素聚类,使用滑窗方式求取局部均值,利用相关均值矩阵进行聚类。
(4)谱聚类:首先计算n个图像数据的相似性矩阵,矩阵中每个元素表示两个元素之间的相似度。通过相似度矩阵构建谱矩阵(具体通过拉普拉斯矩阵实现),对普矩阵进行特征分解得到特征向量降维后进行聚类。本质上是将原始空李灶间中的数据转换成更容易聚类的新特征向量。
[img]使用 sklearn 库中的 KMeans 实现彩色图像聚类分割
sklearn 库是最为常用且经典的机器学习库,里面封装了许多机器学习算法,此篇文章使用此库中的 KMeans 算法,从而实现图像的聚类分割。
本文不讲理论,只谈应用。
除了 sklearn 库之外,还需要一些图像处理的库,我引入了如下几个库:
我使用了 pylab 库来读入图片:
此时读入的 img 是一个三维 numpy 数组,其形状为 (height, width, 3) ,其中3是指通道数,即 RGB 三个通道。
但是, KMeans 传入的参数必须是二维数组,故,还需要将其打散为二维:
在此构建时,只需要使用最简单的方法即可:
参数有很多,我在构建的时候除了 n_clusters 都使用的默认值:
然后,使用 fit() 进行训练山滚:
聚类之后,有很多参数,比较重要的,以及此处需要用到的主要有俩:
聚类完成之后,需要将每个像素点重新填色,将同一类的像素点均填为此类聚类中心的颜色。
在此之前,首先需要得到图片的高度和宽度:
首先用 image.new() 重新创建一个图片,其语法如下:
然后需要用 putpixel() 方如渗法来填充像素,但是在此之前,还需要处理几个小细渣唯脊节:
RGB图中,每个通道都是 0-255 之间的整数,但是, kmeans.cluster_centers_ 中元素类型却是 float64 ,故在填充之前,还需要小小处理一番,将元素变为 int32 类型的。
直接转变类型不太合适,因为 kmeans.cluster_centers_ 毕竟是类似于一个属性值的东西,而且这个名字太长,换一个简短的也是好的。故重新复制一份再使用 astype 更改数据类型即可。
上面便提到, kmeans.labels_ 是一个一维数组,但是图片是二维的,所以将其恢复过来即可:
然后便可以 填充像素 了:
这里需要注意 putpixel() 方法,其的两个参数:
最后保存图片即可:
我使用了王者荣耀大乔的图片来做测试:
NBIS系列单细胞转录组数据分析实战(四):细胞聚类分析
在本节教程中,我们将基于批次矫正后的整合数据集进行细胞聚类分析,我们使用PCA线性降维的结果分别执行k-最近邻图聚类,层次聚类和k-均值聚类。
在执行图聚类的过程中主要包括以下3个步骤:
执行图聚类的第一步是构建一个kNN图,我们使用PCA降维的前 N个 PC用于计算。
我们可以使用Seurat包中的 FindNeighbors 函数计算构建KNN和SNN图。
我们可以看一下kNN图,它是一个连接矩阵,其中不同细胞之间的每个连接都表示为1个s,这称之为未加权图(Seurat中的默认值)。但是,某些细胞之间的连接可能比其他细胞的更重要,在这种情况下,图的尺度会从0到最大距离。通常,距离越小,两点越接近,它们之间的连接也越牢固,这称之为加权图。加权图和未加权图均适用于图聚类,但是对于大型数据集(100k细胞),使用非加权图在聚类上的速度会更快。
在构建好SNN图后,我们可以基于其执行图聚类。选用不同的分辨率(resolution)进行细胞聚类,分辨率越大,聚类出来的细胞簇数越多。
在Seurat中,我们使用 FindClusters 函数进行细胞聚类,默认情况下( algorithm = 1 ),该函数将使用“ Louvain”算法进行基于图的聚类。要使用leiden算法,我们需要将其设置为 algorithm = 4 。
现在,我们可以使用 clustree 包来可视化不同分辨率下细胞在聚类群之间的分配。
K-means是一种常用的聚类算法,已在许多应用领域中使用。在R中,可以通过 kmeans 函数进行调用。通常,它应用于表达数据的降维表示(由于低维距离的可解释性,因此通常用于PCA)。
我们需要预先设定聚类群的数量。由于聚类的结果取决于群集中心的初始化,因此通常建议使用多个启动配置(通过nstart参数)运行K-means。
使用clustree函数查看不同聚类群的结果
基本的R stats 包中包含一个 dist 函数,可以用于计算所有成对样本之间的距离。由于我们要计算样本之间的距离,而不是基因之间的距离,因此我们需要先对表达数据槐耐进行转置,然后再将其应用于 dist 函数中。 dist 函数中可用的距离计算方法有:“euclidean”, “maximum”, “manhattan”, “canberra”, “binary” or “minkowski”.
可以看到, dist 函数不能实现correlation的方法。但是,我们可以创建自己的距离并将其转换为距离对象。我们首先可以使用 cor 函数计算样本之间的相关性。如您所知,相关性的范围是从-1到1的,其中1表示两个样本最接近,-1表示两个样本最远,0介于两者之间铅陪春。但是,这在定义距离时会产生问题,因为距离0表示两个样本最接近,距离1表示两个样本最远,而距离-1没有意义。因此,我们需要将相关性转换为正尺度(又称 adjacency ):
将相关性转换为0-1比例后,我们可以简单地使用 as.dist 函数将其转换为距离对象。
在计算出所有样本之间的距离之后,我们可以对其进行层次聚类。我们将使用 hclust 函数实现该功能,在该函数中,我们可以简单地使用上面创建的距离对象来运行它。可用的方法有:“ward.D”, “ward.D2”, “single”乱禅, “complete”, “average”, “mcquitty”, “median” or “centroid”。
创建好分层聚类树后,下一步就是定义哪些样本属于特定簇。我们可以使用 cutree 函数根据特定k值切割聚类树,以定义聚类群。我们还可以定义簇的数量或确定高度。
关于图聚类和图聚类中心的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。