R's anti sparseness
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

R's anti sparseness

on

  • 3,305 views

http://twitter.com/y_benjo

http://twitter.com/y_benjo
Tsukuba.R#6
http://wiki.livedoor.jp/syou6162/d/Tsukuba.R%236

Statistics

Views

Total Views
3,305
Views on SlideShare
3,138
Embed Views
167

Actions

Likes
3
Downloads
8
Comments
0

3 Embeds 167

http://d.hatena.ne.jp 160
http://www.slideshare.net 5
http://benjo.g.hatena.ne.jp 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

R's anti sparseness Presentation Transcript

  • 1. Tsukuba.R#6 @ 筑波大学 y_benjo
  • 2. Intro
  • 3. 自⼰紹介 • y_benjo(便所糞⾍) • http://d.hatena.ne.jp/repose/
  • 4. 専門:機械学習っぽい事 • これまで
  • 5. 専門:機械学習っぽい事 • これまで • やる夫でSVMを説明したりRで書いたり
  • 6. 専門:機械学習っぽい事 • これまで • やる夫でSVMを説明したりRで書いたり • Twitterをクラスタリングしたり
  • 7. 専門:機械学習っぽい事 • これまで • やる夫でSVMを説明したりRで書いたり • Twitterをクラスタリングしたり • アクセスログをRで触ったり
  • 8. Agenda
  • 9. • 疎⾏列って何
  • 10. • 疎⾏列って何 • 便利なパッケージの話
  • 11. • 疎⾏列って何 • 便利なパッケージの話 • 試してみる
  • 12. • 疎⾏列って何 • 便利なパッケージの話 • 試してみる • Matrixを楽に触るためにちょっとした関 数を書いてみる
  • 13. What’s sparseness?
  • 14. Sparseness:データが疎な事 • 具体例 • ⼀度しか出てこない要素が全要素の7割を占 めたり • 1800000×1300の⾏列で値が⼊っている部 分が約120000個しかない • 0.05%しか値が⼊っておらず、その他は全てゼロ • すっかすか
  • 15. 疎⾏列は⽇常茶飯事 • 自然⾔語処理などの単語-⽂章⾏列
  • 16. 疎⾏列は⽇常茶飯事 • 自然⾔語処理などの単語-⽂章⾏列 • 情報推薦などにおけるユーザー-アイテム ⾏列
  • 17. 疎⾏列は⽇常茶飯事 • 自然⾔語処理などの単語-⽂章⾏列 • 情報推薦などにおけるユーザー-アイテム ⾏列 • グラフを表した隣接⾏列
  • 18. 疎⾏列は⽇常茶飯事 • 自然⾔語処理などの単語-⽂章⾏列 • 情報推薦などにおけるユーザー-アイテム ⾏列 • グラフを表した隣接⾏列 • データが大きくなればなるほどスパース ネスは重要な問題になる
  • 19. Problem
  • 20. 問題点 • 大多数をゼロで占める⾏列の全てを持っ ていてもメモリの無駄
  • 21. 問題点 • 大多数をゼロで占める⾏列の全てを持っ ていてもメモリの無駄 • むしろそのままだとメモリに載せられない • Rだと作ることすらできなかったり > i.u.mat <- matrix(0,1300,1800000) 以下にエラー matrix(0, 1300, 1800000) : 指定 された要素数が多すぎます
  • 22. Anti sparseness?
  • 23. • 怠惰な回避策 • ゼロじゃないところだけで持てば良い • 連想配列を使う • C++ : std::map<int, std::map<int, int> > • Ruby : hoge[i => j] = 1 •…
  • 24. 問題点 • これだと⾏列のフリは出来ても、⾏列操 作をそのまま⾏えるわけではない • Rの便利な関数やパッケージ達をそのまま 使えて、なおかつメモリを⾷わないよう にしたい • 自作データ構造用に⾞輪の再開発なんてして たら死んでしまう
  • 25. Anti sparseness!
  • 26. CRAN package
  • 27. Matrix • Matrix: Sparse and Dense Matrix Classes and Methods • “Package Matrix: a recommended R package since R 2.9.0” • ⾊々なパッケージから依存されてるような⼼ 強いパッケージ • 導⼊はinstall.packages(“Matrix”)
  • 28. Simple example
  • 29. > mat <- spMatrix(10,20, + i=c(1,5,3:6), + j=c(2,8,17:20), + x=2*c(1:6) + ) > mat 10 x 20 sparse Matrix of class "dgTMatrix" [1,] . 2 . . . . . . . . . . . . . . . . . . [2,] . . . . . . . . . . . . . . . . . . . . [3,] . . . . . . . . . . . . . . . . 6 . . . [4,] . . . . . . . . . . . . . . . . . 8 . . [5,] . . . . . . . 4 . . . . . . . . . . 10 . [6,] . . . . . . . . . . . . . . . . . . . 12 [7,] . . . . . . . . . . . . . . . . . . . . [8,] . . . . . . . . . . . . . . . . . . . . [9,] . . . . . . . . . . . . . . . . . . . . [10,] . . . . . . . . . . . . . . . . . . . .
  • 30. • spMatrix(nrow, ncol, i = integer(), j = integer(), x = numeric()) • i、jには値が存在する⾏列のインデックスが ⼊ったベクトルを • xにはその値 > summary(mat) 10 x 20 sparse Matrix of class "dgTMatrix", with 6 entries i j x 1 1 2 2 2 5 8 4 3 3 17 6 4 4 18 8
  • 31. > mat>7 10 x 20 sparse Matrix of class "lgTMatrix" [1,] . : . . . . . . . . . . . . . . . . . . [2,] . . . . . . . . . . . . . . . . . . . . [3,] . . . . . . . . . . . . . . . . : . . . [4,] . . . . . . . . . . . . . . . . . | . . [5,] . . . . . . . : . . . . . . . . . . | . [6,] . . . . . . . . . . . . . . . . . . . | [7,] . . . . . . . . . . . . . . . . . . . . [8,] . . . . . . . . . . . . . . . . . . . . [9,] . . . . . . . . . . . . . . . . . . . . [10,] . . . . . . . . . . . . . . . . . . . .
  • 32. 補⾜ • あとは普通のmatrixのように操作可能 • x %*% y, x+y • crossprod(x,y) • eigen(x) • “operations on them using Lapack and SuiteSparse.” • まだ実装できてるわけじゃないらしいけど • “Matrix 1.0-0 will contain truly sparse lm(*, sparse=TRUE)”
  • 33. Lazy tips
  • 34. SpMatrixめんどくせ… • 便利っぽそうなのは判った • でも代⼊がめんどくさい • 普段使うファイルはこんな形式 v1,v2,val aa,bb,1.0 Aa,cc,1.0 xx,bb,0.5 … • というわけで自作関数で対応
  • 35. makaSM • 使い⽅ raw.data <- read.csv("test.csv", h=F, stringsAsFactors=FALSE) ans <- makeSM(raw.data)
  • 36. makeSM <- function(raw.data){ i.uniq <- unique(raw.data[,1]) j.uniq <- unique(raw.data[,2]) i.index <- c() j.index <- c() x <- c() for(i in 1:nrow(raw.data)){ i.index <- append(i.index, which(i.uniq == raw.data[i,1])) j.index <- append(j.index, which(j.uniq == raw.data[i,2])) x <- append(x, raw.data[i,3]) } ret <- (spMatrix(length(i.uniq),length(j.uniq), i = i.index, j = j.index, x)) rownames(ret) <- i.uniq colnames(ret) <- j.uniq return(ret) }
  • 37. Lazy&Happy!
  • 38. Conclusion
  • 39. まとめ • Matrixを使えば疎⾏列も怖くない!!! • アンチスパースネス!!!!!!!!! • 既存の関数使いまくり!!!!!!!! • 疎⾏列が怖くないから機械学習だって怖くな い!!!!!!!! • あとhashもあるから僕みたいなLL脳な⼈ はinstall.packages(“hash”)してもっと楽 をしましょう
  • 40. 参考資料 • Maechler Martin, Bates Douglas, “Sparse Matrices in package Matrix and applications”, http://www.agrocampus-ouest.fr/math/useR- 2009/slides/Maechler+Bates.pdf • 表紙ロゴ:とある画像の自動⽣成<ジェネレータ>, http://zio3.net/toarugen/