SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 2983|回复: 22
打印 上一主题 下一主题

假如我们面对1000万列的数据该怎么聚类?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-1-26 16:58:19 | 只看该作者

假如我们面对1000万列的数据该怎么聚类?

同题,有没有高手知道?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-1-27 11:56:38 | 只看该作者

Re: 假如我们面对100万列的数据该怎么聚类?

选好需要的变量 recode 之后
用fastclus
聚到一两百类里
再用每个需要的变量在这个类内的平均指标做cluster
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2010-1-27 16:06:18 | 只看该作者

Re: 假如我们面对100万列的数据该怎么聚类?

非常感谢楼上的答复。不过问题似乎没有这么简单,我不知道你有没有做过这样的数据?SAS会崩溃的。我们要做的似乎是自己开发代码,而绝非用SAS现成的子程序K-means过程步proc fastclus那么简单。还有什么层次聚类过程proc cluster,你想都不用想,它的计算复杂度是O(n的平方)^_^。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2010-1-28 16:02:40 | 只看该作者

Re: 假如我们面对100万列的数据该怎么聚类?

百万列的 我用fastlus做过 没问题
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2010-1-29 17:14:25 | 只看该作者

Re: 假如我们面对100万列的数据该怎么聚类?

100万,绝对没问题,除非你用自己的笔记本来跑。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2010-1-30 19:49:19 | 只看该作者

Re: 假如我们面对100万列的数据该怎么聚类?

哦,我倒是没有试过,不过100万只是一个假设,事实上可能在千万级以上。另外,proc fastclus可能只做欧式距离数据,不能对夹角余弦实现聚类,而我恰恰需要用夹角余弦。非常感谢两位的实验结果!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2010-2-3 19:07:32 | 只看该作者

Re: 假如我们面对100万列的数据该怎么聚类?

才一百万而已。。。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2010-2-7 17:41:18 | 只看该作者

Re: 假如我们面对100万列的数据该怎么聚类?

你是说100万列还是100万行的数据,这是非常不同的概念?SAS数据文件只支持最大到3万多个变量(列),你的100万列文件是没法全部load的。

如果你有100万列,但是行数很少的话,又需要对row (subject)做partition clustering,可以用kernelization的方法,就是转置,再求内积,再应用kernel函数(可以是identity,也可以是高斯,uniform,quadratic等),对这个新矩阵做PCA或者SVD,求出right eigenvector matrix,再用这个right eigenvector matrix对原数据做线性变换,得到的前几个score就足够用PROC FASTCLUS来做partition clustering,比如k-means clustering

--------------------
我的博客: <!-- m --><a class="postlink" href="http://sas-programming.blogspot.com">http://sas-programming.blogspot.com</a><!-- m -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2010-2-8 15:00:20 | 只看该作者

Re: 假如我们面对100万列的数据该怎么聚类?

非常感谢楼上两位的答复。不过,两位似乎有点粗心,只看标题不看回复。
我已经说过了,一百万列只是个假设,实际上列数可能达到千万级以上乃至上亿。另外,谁说SAS只能load三万多列?依据是什么?能给出引述出处吗?非常感谢你说的几个解决步骤,不过这些似乎都是纸上谈兵,实际上我已经试过了,我想你也可以试一下,等结果出来我们再探讨一下。注意:希望你最好用至少[b:f0m6i70s]1千万行×500万列[/b:f0m6i70s]数据测试。另外,SAS的fastcluster过程步不能做夹角余弦,而我的需求必须要夹角余弦。
多谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2010-2-8 16:12:58 | 只看该作者

Re: 假如我们面对1000万列的数据该怎么聚类?

我不是学统计的,不知道什么是聚类。看过大家的讨论,有些摸不着头脑,不过有一点我觉得很奇怪,那就是:我们现在有了关系型数据库概念了,为什么还要假设一个上万列甚至以百万为单位的数据表格形式呢?
搬门弄斧,各位莫怪啊,呵呵。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-4 03:27 , Processed in 0.093216 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表