作者blueblance ( )
看板DataScience
标题[问题] 巨量稀疏矩阵进行分群问题
时间Thu Dec 3 11:41:24 2020
各位好,我目前正在学习资料分群,目前遇到一个问题想请问各位
如果在一个针对使用者购买习惯的分群的过程中
由於商品数量有数十万笔,使用者也有上百万笔
要将使用者做分群的话我是以类似下面的排法
( '消费者A' , [0,1,0,0,0,0,0........])
( '消费者B' , [1,0,0,0,0,0,1........])
....
也就是每个使用者所购买的每一个产品都是一个特徵
但这从建立一个这麽大的资料量就已经是一个问题了
即便降低消费者到只剩下100人,也因为维度太大跑到後面就直接memory error
想请问各位像这种稀疏矩阵,在分群上大家觉得资料应该要先做怎样的处理是洽当的呢
因为实在是新手,所以问题可能问得不太好
希望能有人能提供建议~
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 39.13.192.19 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/DataScience/M.1606966886.A.6CD.html
1F:推 ddavid: 基本上稀疏矩阵就会用特定的稀疏矩阵资料结构去存,不要存 12/03 11:49
2F:→ ddavid: 一大堆无意义的0,空间会节省非常多 12/03 11:49
3F:→ ddavid: [0,1,0,0,0,0,1]在资料结构内部会类似1:1,6:1的方式在存 12/03 11:51
4F:→ ddavid: 当然做法也不只一种,自行Google 稀疏矩阵资料结构 有很多 12/03 11:51
5F:→ ddavid: 资讯可以参考 12/03 11:52
6F:→ ddavid: 或是你用特定framework就加上该关键字去查询该framework有 12/03 11:52
7F:→ ddavid: 支援的稀疏矩阵处理方式 12/03 11:52
8F:→ blueblance: d大你好,我目前是利用python sklearn的kmeans来做分群 12/03 11:59
9F:→ blueblance: 我google後kmeans似乎支援csr_matrix但即便用csr压缩 12/03 12:00
10F:→ blueblance: 矩阵的大小,经过了分群的API应该也会被还原成一个那 12/03 12:01
11F:→ blueblance: 麽大的维度的矩阵,我也好奇针对这种特徵值那麽多的 12/03 12:02
12F:→ blueblance: 但资料基本上是很稀疏的数据,各位都是用什麽方式处理 12/03 12:03
13F:→ blueblance: 因为目前矩阵,数据与空的部分可能只有1/100000这样 12/03 12:04
14F:推 ddavid: 基本上就是要采用I/O都支援稀疏矩阵的Framework吧 12/03 13:53
15F:→ ddavid: 像这篇: 12/03 13:55
17F:→ ddavid: 里面就明确提到用sklearn的PCA输入是稀疏,但输出不是,那 12/03 13:55
18F:→ ddavid: 自然你就可能在输出上遭遇这个问题 12/03 13:56
19F:→ ddavid: 所以要嘛去找更符合需求的Framework,不然就自己改 12/03 13:56
20F:→ ddavid: 不过kmeans好像比较麻烦吧,就算输入是稀疏,但途中计算只 12/03 13:57
21F:→ ddavid: 要一个平均算中心点就都不稀疏了。 12/03 13:59
22F:推 ddavid: 所以如果直接保持用矩阵一次运算,即便k值不大,也很可能 12/03 14:01
23F:→ ddavid: 在运算过程中的某个时间点爆记忆体。 12/03 14:01
24F:→ ddavid: 不过k-means这麽简单的东西,可以自己手写一个跑回圈一点 12/03 14:02
25F:→ ddavid: 点处理的版本,就很容易避开记忆体用量的问题,只不过可能 12/03 14:02
26F:→ ddavid: 会在速度上付出代价 12/03 14:03
27F:→ ddavid: 写得好,记忆体用量就可以控制在只记录k个中心点的值(非 12/03 14:04
28F:→ ddavid: 稀疏)以及所有点当下所属的cluster 12/03 14:04
29F:→ ddavid: 如果资料笔数为n,维度为m,cluster数量为k,用量就可以精 12/03 14:05
30F:→ ddavid: 确控制在km + n + 少量运算暂存(大约是m)吧 12/03 14:06
31F:推 wtchen: 要不要先用sklearn的LogisticRegression+l1 penalty 12/03 19:40
32F:→ wtchen: 找出有明显关联的元素,没影响的元素就去掉 12/03 19:42
33F:→ wtchen: 这样应该可以降点维度 12/03 19:42
34F:→ wtchen: 然後再用降维过的资料分群应该会容易多 12/03 19:43