推 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: 裡面就明確提到用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