Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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_Macos_Bigdata_Cluster Analysis_Distance - Fatal编程技术网

混合和大型数据集的R距离矩阵和聚类?

混合和大型数据集的R距离矩阵和聚类?,r,macos,bigdata,cluster-analysis,distance,R,Macos,Bigdata,Cluster Analysis,Distance,我的意图是对零售数据进行聚类,以便在r 我需要用于聚类的完整数据集,但在评估模型时将分为培训/测试。该数据集有133153个36个变量的观察值,包括数值、分类和缺失值(14.1 MB) 如何使用混合的大型数据集在r中进行聚类? 我的机器: sessionInfo() R版本3.1.0(2014-04-10) 平台:x86_64-apple-darwin13.1.0(64位) Mac OSX版本10.9.3 4GB内存 这里有一个线程建议在使用聚类算法(如k-means)之前,将daisy()包用

我的意图是对零售数据进行聚类,以便在r

我需要用于聚类的完整数据集,但在评估模型时将分为培训/测试。该数据集有133153个36个变量的观察值,包括数值、分类和缺失值(14.1 MB)

如何使用混合的大型数据集在r中进行聚类?

我的机器:

sessionInfo() R版本3.1.0(2014-04-10) 平台:x86_64-apple-darwin13.1.0(64位)

Mac OSX版本10.9.3 4GB内存

这里有一个线程建议在使用聚类算法(如k-means)之前,将daisy()包用于混合数据类型:

由于无法分配向量的错误,我无法使用daisy。在传统的聚类方法(如k-means)之前,面向矩阵的方法存在可伸缩性问题

错误:

#Load Data
Store1 <- read.csv("/Users/scdavis6/Documents/Work/TowerData/TowerData/Client1.csv", head=FALSE)
#Convert csv to data.frame
df <-as.data.frame(Store1)
#Create dissimilarity matrix
daisy1 <- daisy(df)
Error: cannot allocate vector of size 66.0 Gb
#加载数据

Store1我一直被困在同一个问题上。对于计算距离的方法,您可能希望使用Gower变换。如果您没有continuos数据,那么可以使用重叠函数,我还没有在R()上找到它。下面是我对计算问题的发现:

要计算具有太多
N
观测值且在计算上不可行的超大数据集上的距离,可以应用本文中使用的解决方案()。他们提出了一种聪明的方法:创建一个新的数据集,其中每一行都是原始数据集中
d
属性上的值的可能组合。因此,这将给出一个新的矩阵,该矩阵具有
M
osbervations,距离矩阵在计算上是可行的。他们“创建了一个包含所有可能情况的网格,以及相应的距离(彼此之间的距离),并使用该网格创建了我们的集群,我们随后将我们的观察结果分配到该集群”

我试图在R中利用
库(plyr)
来复制它。在下文中,我将仅使用4个观察值,但它应该与
N
观察值一起使用,只要您生成的组合将减少内存需求

id <- c(1,2,3,4)
a <- c(1,1,0,1)
b <- c(0,1,0,0)
c <- c(3,2,1,3)
d <- c(1,0,1,1)
Mydata <- as.data.frame(cbind(id, a,b,c,d))
Mydata
id a b c d
1  1 0 3 1
2  1 1 2 0
3  0 0 1 1
4  1 0 3 1

require(plyr)
Mydata_grid <-  count(Mydata[,-1])
Mydata_grid
a b c d freq
1 0 3 1  2
1 1 2 0  1
0 0 1 1  1
这是我们的距离矩阵。现在,直接对
d_网格进行集群就足够了

clusters_d <- hclust(dist_grid, method="ward.D2")
cluster <- cutree(clusters_d, k = 2) # k= number of clusters 
cluster
1 2 1
您还可以添加原始的
id
向量并删除
freq
列d

Mydata_cluster_full$id <- id
Mydata_cluster_full$freq <- NULL

a b c d freq cluster id
0 0 1 1    1       1  1
1 0 3 1    2       2  2
1 0 3 1    2       2  3
1 1 2 0    1       2  4

Mydata\u cluster\u full$id@joran我描述了这个问题,并从stackoverflow.com链接了相关文章。我将继续讨论混合变量的集群问题,显示r不能处理b/c的可伸缩性问题。在另一个链接中,评论员建议使用r中的bigmemory包,它不能处理混合数据类型。我在stackoverflow.com上还没有看到其他任何人对这个问题进行如此彻底的调查。我尝试了一种面向矩阵的方法和一个内存共享包,但它并没有解决问题。到目前为止,这就是讨论在网站上结束的地方!请激活此帖子。
Mydata_cluster <- cbind(Mydata_grid, cluster, Mydata_grid$freq)
Mydata_cluster_full <- Mydata_cluster[rep(row.names(Mydata_cluster), Mydata_cluster$freq), 1:(dim(Mydata_cluster)[2]-1)]
Mydata_cluster_full
    a b c d freq cluster
    0 0 1 1    1       1
    1 0 3 1    2       2
    1 0 3 1    2       2
    1 1 2 0    1       1
Mydata_cluster_full$id <- id
Mydata_cluster_full$freq <- NULL

a b c d freq cluster id
0 0 1 1    1       1  1
1 0 3 1    2       2  2
1 0 3 1    2       2  3
1 1 2 0    1       2  4