r's anti sparseness

40
Tsukuba.R#6 @ 筑波大学 y_benjo

Upload: ybenjo

Post on 12-Jun-2015

2.677 views

Category:

Technology


4 download

DESCRIPTION

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

TRANSCRIPT

Page 1: R's anti sparseness

Tsukuba.R#6 @ 筑波大学y_benjo

Page 2: R's anti sparseness

Intro

Page 3: R's anti sparseness

• y_benjo(便所糞⾍)• http://d.hatena.ne.jp/repose/

自⼰紹介

Page 4: R's anti sparseness

専門:機械学習っぽい事• これまで

Page 5: R's anti sparseness

専門:機械学習っぽい事• これまで

• やる夫でSVMを説明したりRで書いたり

Page 6: R's anti sparseness

専門:機械学習っぽい事• これまで

• やる夫でSVMを説明したりRで書いたり• Twitterをクラスタリングしたり

Page 7: R's anti sparseness

専門:機械学習っぽい事• これまで

• やる夫でSVMを説明したりRで書いたり• Twitterをクラスタリングしたり• アクセスログをRで触ったり

Page 8: R's anti sparseness

Agenda

Page 9: R's anti sparseness

• 疎⾏列って何

Page 10: R's anti sparseness

• 疎⾏列って何• 便利なパッケージの話

Page 11: R's anti sparseness

• 疎⾏列って何• 便利なパッケージの話• 試してみる

Page 12: R's anti sparseness

• 疎⾏列って何• 便利なパッケージの話• 試してみる• Matrixを楽に触るためにちょっとした関

数を書いてみる

Page 13: R's anti sparseness

What’s sparseness?

Page 14: R's anti sparseness

Sparseness:データが疎な事• 具体例

• ⼀度しか出てこない要素が全要素の7割を占めたり

• 1800000×1300の⾏列で値が⼊っている部分が約120000個しかない• 0.05%しか値が⼊っておらず、その他は全てゼロ• すっかすか

Page 15: R's anti sparseness

疎⾏列は⽇常茶飯事• 自然⾔語処理などの単語-⽂章⾏列

Page 16: R's anti sparseness

疎⾏列は⽇常茶飯事• 自然⾔語処理などの単語-⽂章⾏列• 情報推薦などにおけるユーザー-アイテム

⾏列

Page 17: R's anti sparseness

疎⾏列は⽇常茶飯事• 自然⾔語処理などの単語-⽂章⾏列• 情報推薦などにおけるユーザー-アイテム

⾏列• グラフを表した隣接⾏列

Page 18: R's anti sparseness

疎⾏列は⽇常茶飯事• 自然⾔語処理などの単語-⽂章⾏列• 情報推薦などにおけるユーザー-アイテム

⾏列• グラフを表した隣接⾏列

• データが大きくなればなるほどスパースネスは重要な問題になる

Page 19: R's anti sparseness

Problem

Page 20: R's anti sparseness

問題点• 大多数をゼロで占める⾏列の全てを持っ

ていてもメモリの無駄

Page 21: R's anti sparseness

問題点• 大多数をゼロで占める⾏列の全てを持っ

ていてもメモリの無駄• むしろそのままだとメモリに載せられない• Rだと作ることすらできなかったり

> i.u.mat <- matrix(0,1300,1800000)以下にエラー matrix(0, 1300, 1800000) : 指定された要素数が多すぎます

Page 22: R's anti sparseness

Anti sparseness?

Page 23: R's anti sparseness

• 怠惰な回避策• ゼロじゃないところだけで持てば良い• 連想配列を使う

• C++ : std::map<int, std::map<int, int> >• Ruby : hoge[i => j] = 1• …

Page 24: R's anti sparseness

問題点• これだと⾏列のフリは出来ても、⾏列操

作をそのまま⾏えるわけではない• Rの便利な関数やパッケージ達をそのまま

使えて、なおかつメモリを⾷わないようにしたい• 自作データ構造用に⾞輪の再開発なんてして

たら死んでしまう

Page 25: R's anti sparseness

Anti sparseness!

Page 26: R's anti sparseness

CRAN package

Page 27: R's anti sparseness

Matrix• Matrix: Sparse and Dense Matrix

Classes and Methods• “Package Matrix: a recommended R

package since R 2.9.0”• ⾊々なパッケージから依存されてるような⼼

強いパッケージ

• 導⼊はinstall.packages(“Matrix”)

Page 28: R's anti sparseness

Simple example

Page 29: R's anti sparseness

> mat <- spMatrix(10,20,+ i=c(1,5,3:6),+ j=c(2,8,17:20),+ x=2*c(1:6)+ )> mat10 x 20 sparse Matrix of class "dgTMatrix"

[1,] . 2 . . . . . . . . . . . . . . . . . .[2,] . . . . . . . . . . . . . . . . . . . .[3,] . . . . . . . . . . . . . . . . 6 . . .[4,] . . . . . . . . . . . . . . . . . 8 . .[5,] . . . . . . . 4 . . . . . . . . . . 10 .[6,] . . . . . . . . . . . . . . . . . . . 12[7,] . . . . . . . . . . . . . . . . . . . .[8,] . . . . . . . . . . . . . . . . . . . .[9,] . . . . . . . . . . . . . . . . . . . .

[10,] . . . . . . . . . . . . . . . . . . . .

Page 30: R's anti sparseness

• 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

Page 31: R's anti sparseness

> mat>710 x 20 sparse Matrix of class "lgTMatrix"

[1,] . : . . . . . . . . . . . . . . . . . .[2,] . . . . . . . . . . . . . . . . . . . .[3,] . . . . . . . . . . . . . . . . : . . .[4,] . . . . . . . . . . . . . . . . . | . .[5,] . . . . . . . : . . . . . . . . . . | .[6,] . . . . . . . . . . . . . . . . . . . |[7,] . . . . . . . . . . . . . . . . . . . .[8,] . . . . . . . . . . . . . . . . . . . .[9,] . . . . . . . . . . . . . . . . . . . .[10,] . . . . . . . . . . . . . . . . . . . .

Page 32: R's anti sparseness

補⾜• あとは普通の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)”

Page 33: R's anti sparseness

Lazy tips

Page 34: R's anti sparseness

SpMatrixめんどくせ…• 便利っぽそうなのは判った• でも代⼊がめんどくさい• 普段使うファイルはこんな形式v1,v2,valaa,bb,1.0Aa,cc,1.0xx,bb,0.5…• というわけで自作関数で対応

Page 35: R's anti sparseness

makaSM

raw.data <- read.csv("test.csv",h=F,stringsAsFactors=FALSE)

ans <- makeSM(raw.data)

• 使い⽅

Page 36: R's anti sparseness

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.uniqcolnames(ret) <- j.uniq

return(ret)}

Page 37: R's anti sparseness

Lazy&Happy!

Page 38: R's anti sparseness

Conclusion

Page 39: R's anti sparseness

まとめ• Matrixを使えば疎⾏列も怖くない!!!

• アンチスパースネス!!!!!!!!!• 既存の関数使いまくり!!!!!!!!• 疎⾏列が怖くないから機械学習だって怖くな

い!!!!!!!!• あとhashもあるから僕みたいなLL脳な⼈

はinstall.packages(“hash”)してもっと楽をしましょう

Page 40: R's anti sparseness

参考資料• 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/