聚类作为一种降维技术,以及如何为每个聚类挑选代表元素?
Clustering as a dimension reduction technique, and how to pick representatives elements for each cluster?
我有一些数据集,其中一些观察结果高度相关。我正在对从相关矩阵获得的距离矩阵进行聚类分析。此数据集中的某些元素是多余的,我想 select 一些具有最小相互关联性的代表元素。我认为一种蛮力方法是简单地从每个簇中选择一个元素。但我想知道在 R 中是否有更正式的方法来进行这种设想的降维?
例如,我们按照以下方式对 mtcars 数据集进行聚类:
> m=cor(t(mtcars))
> hc=hclust(as.dist(m),"ave")
> plot(hc)
我们正在获取以下树状图:
如何从上述树状图中提取必要元素?这意味着相互关联最小的元素 ?
一个选择是使用 caret
包中的一些预处理函数。
使用您的示例,下面的代码将删除与另一列具有 0.95 相关性的所有列。
library(caret)
m <- cor(t(mtcars))
highlyCor <- findCorrelation(m, cutoff = .95)
t(mtcars)[,-highlyCor]
以上代码改编自Max Kuhn's excellent book。请参阅它和 caret
文档以获取更多背景和信息。
我有一些数据集,其中一些观察结果高度相关。我正在对从相关矩阵获得的距离矩阵进行聚类分析。此数据集中的某些元素是多余的,我想 select 一些具有最小相互关联性的代表元素。我认为一种蛮力方法是简单地从每个簇中选择一个元素。但我想知道在 R 中是否有更正式的方法来进行这种设想的降维? 例如,我们按照以下方式对 mtcars 数据集进行聚类:
> m=cor(t(mtcars))
> hc=hclust(as.dist(m),"ave")
> plot(hc)
我们正在获取以下树状图:
如何从上述树状图中提取必要元素?这意味着相互关联最小的元素 ?
一个选择是使用 caret
包中的一些预处理函数。
使用您的示例,下面的代码将删除与另一列具有 0.95 相关性的所有列。
library(caret)
m <- cor(t(mtcars))
highlyCor <- findCorrelation(m, cutoff = .95)
t(mtcars)[,-highlyCor]
以上代码改编自Max Kuhn's excellent book。请参阅它和 caret
文档以获取更多背景和信息。