R语言谱聚类、K-MEANS聚类分析非线性环状数据比较

简介: R语言谱聚类、K-MEANS聚类分析非线性环状数据比较

有些问题是线性的,但有些问题是非线性的。我假设,你过去的知识是从讨论和解决线性问题开始的,这是一个自然的起点。对于非线性问题的解决,往往涉及一个初始处理步骤。这个初始步骤的目的是将问题转化为同样具有线性特征的问题。

一个教科书式的例子是逻辑回归,用于获得两类之间的最佳线性边界。在一个标准的神经网络模型中,你会发现逻辑回归(或多类输出的回归)应用于转换后的数据。前面的几层 "致力于 "将不可分割的输入空间转化为线性方法可以处理的东西,使逻辑回归能够相对容易地解决问题。

同样的道理也适用于谱聚类。与其用原始输入的数据工作,不如用一个转换后的数据工作,这将使它更容易解决,然后再链接到你的原始输入。

谱聚类是一些相当标准的聚类算法的重要变体。它是现代统计工具中的一个强大工具。谱聚类包括一个处理步骤,以帮助解决非线性问题,这样的问题可以用我们所喜欢的那些线性算法来解决。例如,流行的K-means。

内容

  • 谱系聚类的动机
  • 一个典型的谱聚类算法
  • 编码实例

谱聚类的动机

"一张图片,胜过万语 千言"(Tess Flanders)。

目标是划分两个不相交的类别。我们的数据就有这种 "两个环 "的形状。你可以看到,由于数据不是线性可分离的,K-means解决方案没有太大意义。我们需要考虑到数据中特别的非线性结构。做到这一点的方法之一是使用数据的特征子空间,不是数据的实际情况,而是数据的相似性矩阵。

典型的谱聚类算法步骤

输入:n个样本点 和聚类簇的数目k;

输出:聚类簇

(1)使用下面公式计算 的相似度矩阵W;

W为 组成的相似度矩阵。

(2)使用下面公式计算度矩阵D;

 ,即相似度矩阵W的每一行元素之和

D为 组成的 对角矩阵。

(3)计算拉普拉斯矩阵

(4)计算L的特征值,将特征值从小到大排序,取前k个特征值,并计算前k个特征值的特征向量

(5)将上面的k个列向量组成矩阵

(6)令 是的第i行的向量,其中

(7)使用k-means算法将新样本点 聚类成簇

(8)输出簇 ,其中, .

上面就是未标准化的谱聚类算法的描述。也就是先根据样本点计算相似度矩阵,然后计算度矩阵和拉普拉斯矩阵,接着计算拉普拉斯矩阵前k个特征值对应的特征向量,最后将这k个特征值对应的特征向量组成 的矩阵U,U的每一行成为一个新生成的样本点,对这些新生成的样本点进行k-means聚类,聚成k类,最后输出聚类的结果。这就是谱聚类算法的基本思想。相比较PCA降维中取前k大的特征值对应的特征向量,这里取得是前k小的特征值对应的特征向量。但是上述的谱聚类算法并不是最优的,接下来我们一步一步的分解上面的步骤,总结一下在此基础上进行优化的谱聚类的版本。

编码示例

环数据在代码中是对象dat。下面的几行只是简单地生成K-means解决方案,并将其绘制出来。

plot(dat, col= kmeans0cluster)

 

现在是谱聚类解决方案。

# 计算距离矩阵

dist(dat, method = "euclidean", diag= T, upper = T)  

sig=1 # 超参数

#  一个点与自身的距离为零

diag(tmpa) <- 0 #设置对角线为零

# 计算程度矩阵

# 因为D是一个对角线矩阵,所以下面一行就可以了:

diag(D) <- diag(D)^(-0.5)
# 现在是拉普拉斯的问题:

# 特征分解

eig_L <- eigen(L, symmetric= T)

K <- 4 # 让我们使用前4个向量

# 它是相当稳健的--例如5或6的结果不会改变

x <- eig_L$vectors\[,1:K\]
# 现在进行归一化处理:

sqrt( apply(x^2, 1, sum) ) #  临时分母

# 临时分母2:转换为一个矩阵

# 创建Y矩阵

# 在y上应用聚类

# 可视化:

plot(dat, col= spect0$cluster)

* 在我们的例子中, 的条目不仅是0和1(连接或不连接),而且是量化相似性的数字。

参考资料

Ng, Andrew Y., Michael I. Jordan, and Yair Weiss. “On spectral clustering: Analysis and an algorithm.” Advances in neural information processing systems. 2002.


相关文章
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
3月前
R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图
【9月更文挑战第9天】在R语言中,利用`ggplot2`包可绘制多系列柱状图与直方图。首先读取数据文件`data.csv`,加载`ggplot2`包后,使用`ggplot`函数指定轴与填充颜色,并通过`geom_bar`或`geom_histogram`绘图。参数如`stat`, `position`, `alpha`等可根据需要调整,实现不同系列的图表展示。
|
3月前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
|
4月前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。
|
2月前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
50 3
|
7月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
7月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
R语言在数据科学中的应用实例:探索与预测分析
【8月更文挑战第31天】通过上述实例,我们展示了R语言在数据科学中的强大应用。从数据准备、探索、预处理到建模与预测,R语言提供了完整的解决方案和丰富的工具集。当然,数据科学远不止于此,随着技术的不断发展和业务需求的不断变化,我们需要不断学习和探索新的方法和工具,以更好地应对挑战,挖掘数据的潜在价值。 未来,随着大数据和人工智能技术的普及,R语言在数据科学领域的应用将更加广泛和深入。我们期待看到更多创新的应用实例,为各行各业的发展注入新的动力。
|
4月前
|
资源调度 数据挖掘
R语言回归分析:线性回归模型的构建与评估
【8月更文挑战第31天】线性回归模型是统计分析中一种重要且实用的工具,能够帮助我们理解和预测自变量与因变量之间的线性关系。在R语言中,我们可以轻松地构建和评估线性回归模型,从而对数据背后的关系进行深入的探索和分析。
|
4月前
|
机器学习/深度学习 数据采集
R语言逻辑回归、GAM、LDA、KNN、PCA主成分分类分析预测房价及交叉验证
上述介绍仅为简要概述,每个模型在实施时都需要仔细调整与优化。为了实现高度精确的预测,模型选择与调参是至关重要的步骤,并且交叉验证是提升模型稳健性的有效途径。在真实世界的房价预测问题中,可能还需要结合地域经济、市场趋势等宏观因素进行综合分析。
82 3