看板 DataScience 關於我們 聯絡資訊
各位好,我目前正在學習資料分群,目前遇到一個問題想請問各位 如果在一個針對使用者購買習慣的分群的過程中 由於商品數量有數十萬筆,使用者也有上百萬筆 要將使用者做分群的話我是以類似下面的排法 ( '消費者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://www.ptt.cc/bbs/DataScience/M.1606966886.A.6CD.html
ddavid: 基本上稀疏矩陣就會用特定的稀疏矩陣資料結構去存,不要存 12/03 11:49
ddavid: 一大堆無意義的0,空間會節省非常多 12/03 11:49
ddavid: [0,1,0,0,0,0,1]在資料結構內部會類似1:1,6:1的方式在存 12/03 11:51
ddavid: 當然做法也不只一種,自行Google 稀疏矩陣資料結構 有很多 12/03 11:51
ddavid: 資訊可以參考 12/03 11:52
ddavid: 或是你用特定framework就加上該關鍵字去查詢該framework有 12/03 11:52
ddavid: 支援的稀疏矩陣處理方式 12/03 11:52
blueblance: d大你好,我目前是利用python sklearn的kmeans來做分群 12/03 11:59
blueblance: 我google後kmeans似乎支援csr_matrix但即便用csr壓縮 12/03 12:00
blueblance: 矩陣的大小,經過了分群的API應該也會被還原成一個那 12/03 12:01
blueblance: 麼大的維度的矩陣,我也好奇針對這種特徵值那麼多的 12/03 12:02
blueblance: 但資料基本上是很稀疏的數據,各位都是用什麼方式處理 12/03 12:03
blueblance: 因為目前矩陣,數據與空的部分可能只有1/100000這樣 12/03 12:04
ddavid: 基本上就是要採用I/O都支援稀疏矩陣的Framework吧 12/03 13:53
ddavid: 像這篇: 12/03 13:55
ddavid: https://bit.ly/39A4FnE 12/03 13:55
ddavid: 裡面就明確提到用sklearn的PCA輸入是稀疏,但輸出不是,那 12/03 13:55
ddavid: 自然你就可能在輸出上遭遇這個問題 12/03 13:56
ddavid: 所以要嘛去找更符合需求的Framework,不然就自己改 12/03 13:56
ddavid: 不過kmeans好像比較麻煩吧,就算輸入是稀疏,但途中計算只 12/03 13:57
ddavid: 要一個平均算中心點就都不稀疏了。 12/03 13:59
ddavid: 所以如果直接保持用矩陣一次運算,即便k值不大,也很可能 12/03 14:01
ddavid: 在運算過程中的某個時間點爆記憶體。 12/03 14:01
ddavid: 不過k-means這麼簡單的東西,可以自己手寫一個跑迴圈一點 12/03 14:02
ddavid: 點處理的版本,就很容易避開記憶體用量的問題,只不過可能 12/03 14:02
ddavid: 會在速度上付出代價 12/03 14:03
ddavid: 寫得好,記憶體用量就可以控制在只記錄k個中心點的值(非 12/03 14:04
ddavid: 稀疏)以及所有點當下所屬的cluster 12/03 14:04
ddavid: 如果資料筆數為n,維度為m,cluster數量為k,用量就可以精 12/03 14:05
ddavid: 確控制在km + n + 少量運算暫存(大約是m)吧 12/03 14:06
wtchen: 要不要先用sklearn的LogisticRegression+l1 penalty 12/03 19:40
wtchen: 找出有明顯關聯的元素,沒影響的元素就去掉 12/03 19:42
wtchen: 這樣應該可以降點維度 12/03 19:42
wtchen: 然後再用降維過的資料分群應該會容易多 12/03 19:43