作者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/m.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