Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 对大数据集进行聚类(定量/定性值)_R_K Means_Hierarchical Clustering_Bigdata - Fatal编程技术网

R 对大数据集进行聚类(定量/定性值)

R 对大数据集进行聚类(定量/定性值),r,k-means,hierarchical-clustering,bigdata,R,K Means,Hierarchical Clustering,Bigdata,我有一个由54000行和几列组成的数据集(7)。我的值是数字和字母数字(定性和定量变量)。我想使用R中的函数hclust对其进行集群 让我们举一个例子: X <- data.frame(rnorm(54000, sd = 0.3), rnorm(54000, mean = 1, sd = 0.3), sample( LETTERS[1:24], 54000, replace=TRUE), sam

我有一个由54000行和几列组成的数据集(7)。我的值是数字和字母数字(定性和定量变量)。我想使用R中的函数hclust对其进行集群

让我们举一个例子:

X <- data.frame(rnorm(54000, sd = 0.3),
                rnorm(54000, mean = 1, sd = 0.3),
                sample( LETTERS[1:24], 54000, replace=TRUE),
                sample( letters[1:10], 54000, replace=TRUE),
                round(rnorm(54000,mean=25, sd=3)),
                round(runif(n = 54000,min = 1000,max = 25000)),
                round(runif(54000,0,200000)))
colnames(X) <- c("A","B","C","D","E","F","G") 
Col1     Col2  Col3
1   12 43.93145 Alpha
2   45 44.76081  Beta
3   48 45.09708 Gamma
4   31 45.42278 Alpha
5   12 46.53709 Delta
6    7 39.07841  Beta
7   78 49.60947 Alpha
我收到以下错误消息:

Error: cannot allocate vector of size 10.9 Gb
有什么问题?我试图创建一个54k*54k矩阵,它太大了,我的电脑无法计算(4Go内存)。我已经读到,从R3.0.0开始,该软件现在是64位的(能够使用2.916e+09矩阵,如我的示例中所示),因此限制来自我的计算机。我在stats/fastcluster/flashClust中使用hclust进行了尝试,也遇到了同样的问题

在本软件包中,hclust的描述如下:

hclust(d, method="complete", members=NULL)
flashClust(d, method = "complete", members=NULL)

d   a dissimilarity structure as produced by dist.
我们总是需要一个
dist
矩阵来实现这个函数。我还尝试使用以下方法为R会话设置更高的计算机限制:

memory.limit(size = 4014)
memory.size(max = TRUE)
问题:

对于带有R的定量/定性数据集,是否可以在不使用此
dist()
矩阵的情况下使用分层聚类(或类似的数据聚类方法)

编辑:

关于k-means:

k-means方法对于由数值组成的大数据集非常有效。在我的示例中,我得到了数字和字母数字值。我尝试将我的定性变量转换为二进制数值变量,以执行k-均值过程:

第一个数据帧(示例):

如果我把它转换成二进制变量,我会得到:

Col1     Col2 Alpha Beta Gamma Delta
1   12 44.29369     1    0     0     0
2   45 43.90610     0    1     0     0
3   48 44.82659     0    0     1     0
4   31 43.09096     1    0     0     0
5   12 42.71190     0    0     0     1
6    7 43.71710     0    1     0     0
7   78 42.24293     1    0     0     0

如果我只得到了一些模式就可以了,但是在一个真实的数据集中,我们可以得到大约10000个模式,一个50000行的基础。我不认为k-means是这类问题的解决方案

通过阅读您的问题,似乎有两个问题:

1. You have a fairly large amount of observations for clustering
2. The categorical variables have high cardinality
我的忠告是:

1)您只需取一个样本并使用
fastcluster::hclust
,或使用
clara
。 可能在整理了2)之后,您可以使用更多的观察结果,在任何情况下,使用样本都是可能的。尝试对类别进行分层抽样

2)您基本上需要以数字格式表示这些类别,而不需要再增加10000列。您可以使用PCA或其离散版本。 关于这个问题,有几个问题:

我相信在这种情况下,您唯一的选择,AFAIK,是直接使用
kmeans
,或者在
FactorMineR::HCPC
函数中使用@cedeterman:谢谢,感谢您的帮助。我尝试了两款新的k-means车型,但它不适合回答我的问题。谢谢你的时间,谢谢。我将尝试使用你的建议,稍后我将发布我的代码作为答案。
1. You have a fairly large amount of observations for clustering
2. The categorical variables have high cardinality