SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
Tsukuba.R#6 @ 筑波大学
       y_benjo
Intro
自⼰紹介
• y_benjo(便所糞⾍)
 • http://d.hatena.ne.jp/repose/
専門:機械学習っぽい事
• これまで
専門:機械学習っぽい事
• これまで
 • やる夫でSVMを説明したりRで書いたり
専門:機械学習っぽい事
• これまで
 • やる夫でSVMを説明したりRで書いたり
 • Twitterをクラスタリングしたり
専門:機械学習っぽい事
• これまで
 • やる夫でSVMを説明したりRで書いたり
 • Twitterをクラスタリングしたり
 • アクセスログをRで触ったり
Agenda
• 疎⾏列って何
• 疎⾏列って何
• 便利なパッケージの話
• 疎⾏列って何
• 便利なパッケージの話
• 試してみる
•   疎⾏列って何
•   便利なパッケージの話
•   試してみる
•   Matrixを楽に触るためにちょっとした関
    数を書いてみる
What’s sparseness?
Sparseness:データが疎な事
• 具体例
 • ⼀度しか出てこない要素が全要素の7割を占
   めたり
 • 1800000×1300の⾏列で値が⼊っている部
   分が約120000個しかない
  • 0.05%しか値が⼊っておらず、その他は全てゼロ
  • すっかすか
疎⾏列は⽇常茶飯事
• 自然⾔語処理などの単語-⽂章⾏列
疎⾏列は⽇常茶飯事
• 自然⾔語処理などの単語-⽂章⾏列
• 情報推薦などにおけるユーザー-アイテム
  ⾏列
疎⾏列は⽇常茶飯事
• 自然⾔語処理などの単語-⽂章⾏列
• 情報推薦などにおけるユーザー-アイテム
  ⾏列
• グラフを表した隣接⾏列
疎⾏列は⽇常茶飯事
• 自然⾔語処理などの単語-⽂章⾏列
• 情報推薦などにおけるユーザー-アイテム
  ⾏列
• グラフを表した隣接⾏列

• データが大きくなればなるほどスパース
  ネスは重要な問題になる
Problem
問題点
• 大多数をゼロで占める⾏列の全てを持っ
  ていてもメモリの無駄
問題点
• 大多数をゼロで占める⾏列の全てを持っ
  ていてもメモリの無駄
 • むしろそのままだとメモリに載せられない
 • Rだと作ることすらできなかったり
  > i.u.mat <- matrix(0,1300,1800000)
  以下にエラー matrix(0, 1300, 1800000) : 指定
  された要素数が多すぎます
Anti sparseness?
• 怠惰な回避策
 • ゼロじゃないところだけで持てば良い
 • 連想配列を使う
  • C++ : std::map<int, std::map<int, int> >
  • Ruby : hoge[i => j] = 1
  •…
問題点
• これだと⾏列のフリは出来ても、⾏列操
  作をそのまま⾏えるわけではない
• Rの便利な関数やパッケージ達をそのまま
  使えて、なおかつメモリを⾷わないよう
  にしたい
 • 自作データ構造用に⾞輪の再開発なんてして
   たら死んでしまう
Anti sparseness!
CRAN package
Matrix
• Matrix: Sparse and Dense Matrix
  Classes and Methods
  • “Package Matrix: a recommended R
    package since R 2.9.0”
  • ⾊々なパッケージから依存されてるような⼼
    強いパッケージ

  • 導⼊はinstall.packages(“Matrix”)
Simple example
> 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,]   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . . .
• 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
> mat>7
10 x 20 sparse Matrix of class "lgTMatrix"

 [1,] . : . . . . . . . . . . . . . . . . . .
 [2,] . . . . . . . . . . . . . . . . . . . .
 [3,] . . . . . . . . . . . . . . . . : . . .
 [4,] . . . . . . . . . . . . . . . . . | . .
 [5,] . . . . . . . : . . . . . . . . . . | .
 [6,] . . . . . . . . . . . . . . . . . . . |
 [7,] . . . . . . . . . . . . . . . . . . . .
 [8,] . . . . . . . . . . . . . . . . . . . .
 [9,] . . . . . . . . . . . . . . . . . . . .
[10,] . . . . . . . . . . . . . . . . . . . .
補⾜
• あとは普通の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)”
Lazy tips
SpMatrixめんどくせ…
• 便利っぽそうなのは判った
• でも代⼊がめんどくさい
• 普段使うファイルはこんな形式
v1,v2,val
aa,bb,1.0
Aa,cc,1.0
xx,bb,0.5
…
• というわけで自作関数で対応
makaSM

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

ans <- makeSM(raw.data)
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)
}
Lazy&Happy!
Conclusion
まとめ
• Matrixを使えば疎⾏列も怖くない!!!
 • アンチスパースネス!!!!!!!!!
 • 既存の関数使いまくり!!!!!!!!
 • 疎⾏列が怖くないから機械学習だって怖くな
   い!!!!!!!!
• あとhashもあるから僕みたいなLL脳な⼈
  はinstall.packages(“hash”)してもっと楽
  をしましょう
参考資料
• 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/

Weitere ähnliche Inhalte

Was ist angesagt? (6)

Backbone model collection (jscafe 8)
Backbone model collection (jscafe 8)Backbone model collection (jscafe 8)
Backbone model collection (jscafe 8)
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
 
dvipdfmxと3つのバッド・ノウハウ
dvipdfmxと3つのバッド・ノウハウdvipdfmxと3つのバッド・ノウハウ
dvipdfmxと3つのバッド・ノウハウ
 
20150329 tokyo r47
20150329 tokyo r4720150329 tokyo r47
20150329 tokyo r47
 
iPhone, iPad アプリ開発勉強会#3
iPhone, iPad アプリ開発勉強会#3iPhone, iPad アプリ開発勉強会#3
iPhone, iPad アプリ開発勉強会#3
 
Operations research yonezawa_no2
Operations research yonezawa_no2Operations research yonezawa_no2
Operations research yonezawa_no2
 

Andere mochten auch

Nonlinear latent factorization by embedding multiple user interests(Recsys 2013)
Nonlinear latent factorization by embedding multiple user interests(Recsys 2013)Nonlinear latent factorization by embedding multiple user interests(Recsys 2013)
Nonlinear latent factorization by embedding multiple user interests(Recsys 2013)
ybenjo
 
Overcoming browser cookie churn with clustering in wsdm2012 reading
Overcoming browser cookie churn with clustering in wsdm2012 readingOvercoming browser cookie churn with clustering in wsdm2012 reading
Overcoming browser cookie churn with clustering in wsdm2012 reading
ybenjo
 
AJACS HONGO8 (mining in DBCLS)
AJACS HONGO8 (mining in DBCLS)AJACS HONGO8 (mining in DBCLS)
AJACS HONGO8 (mining in DBCLS)
ybenjo
 
Predicting Cancel Users in Offline Events
Predicting Cancel Users in Offline EventsPredicting Cancel Users in Offline Events
Predicting Cancel Users in Offline Events
ybenjo
 
Link prediction
Link predictionLink prediction
Link prediction
ybenjo
 

Andere mochten auch (17)

useR!2010 matome
useR!2010 matomeuseR!2010 matome
useR!2010 matome
 
Preserving Personalized Pagerank in Subgraphs(ICML 2011)
Preserving Personalized Pagerank in Subgraphs(ICML 2011) Preserving Personalized Pagerank in Subgraphs(ICML 2011)
Preserving Personalized Pagerank in Subgraphs(ICML 2011)
 
首都圏における帰宅困難者のモデリング 中間報告
首都圏における帰宅困難者のモデリング 中間報告首都圏における帰宅困難者のモデリング 中間報告
首都圏における帰宅困難者のモデリング 中間報告
 
Nonlinear latent factorization by embedding multiple user interests(Recsys 2013)
Nonlinear latent factorization by embedding multiple user interests(Recsys 2013)Nonlinear latent factorization by embedding multiple user interests(Recsys 2013)
Nonlinear latent factorization by embedding multiple user interests(Recsys 2013)
 
Overcoming browser cookie churn with clustering in wsdm2012 reading
Overcoming browser cookie churn with clustering in wsdm2012 readingOvercoming browser cookie churn with clustering in wsdm2012 reading
Overcoming browser cookie churn with clustering in wsdm2012 reading
 
AJACS17
AJACS17AJACS17
AJACS17
 
Personalized next-song recommendation in online karaokes(Recsys 2013)
Personalized next-song recommendation in online karaokes(Recsys 2013)Personalized next-song recommendation in online karaokes(Recsys 2013)
Personalized next-song recommendation in online karaokes(Recsys 2013)
 
patent analysis(LDA) and spotfire
patent analysis(LDA) and spotfirepatent analysis(LDA) and spotfire
patent analysis(LDA) and spotfire
 
とあるサイトの禁書目録(アクセスログ)
とあるサイトの禁書目録(アクセスログ)とあるサイトの禁書目録(アクセスログ)
とあるサイトの禁書目録(アクセスログ)
 
Topic Model Survey (wsdm2012)
Topic Model Survey (wsdm2012)Topic Model Survey (wsdm2012)
Topic Model Survey (wsdm2012)
 
AJACS HONGO8 (mining in DBCLS)
AJACS HONGO8 (mining in DBCLS)AJACS HONGO8 (mining in DBCLS)
AJACS HONGO8 (mining in DBCLS)
 
Predicting Cancel Users in Offline Events
Predicting Cancel Users in Offline EventsPredicting Cancel Users in Offline Events
Predicting Cancel Users in Offline Events
 
首都圏における帰宅困難者のモデリング 最終報告
首都圏における帰宅困難者のモデリング 最終報告首都圏における帰宅困難者のモデリング 最終報告
首都圏における帰宅困難者のモデリング 最終報告
 
Link prediction
Link predictionLink prediction
Link prediction
 
Modeling intransitivity in matchup and comparison data (WSDM 2016)
Modeling intransitivity in matchup and comparison data (WSDM 2016)Modeling intransitivity in matchup and comparison data (WSDM 2016)
Modeling intransitivity in matchup and comparison data (WSDM 2016)
 
anohana
anohanaanohana
anohana
 
Query Suggestion @ tokyotextmining#2
Query Suggestion @ tokyotextmining#2Query Suggestion @ tokyotextmining#2
Query Suggestion @ tokyotextmining#2
 

Ähnlich wie R's anti sparseness

K010 appstat201201
K010 appstat201201K010 appstat201201
K010 appstat201201
t2tarumi
 
第三回R勉強会
第三回R勉強会第三回R勉強会
第三回R勉強会
Paweł Rusin
 
Ruby科学データ処理ツールの開発 NArrayとPwrake
Ruby科学データ処理ツールの開発 NArrayとPwrakeRuby科学データ処理ツールの開発 NArrayとPwrake
Ruby科学データ処理ツールの開発 NArrayとPwrake
Masahiro Tanaka
 

Ähnlich wie R's anti sparseness (20)

Tokyo r27
Tokyo r27Tokyo r27
Tokyo r27
 
Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017
 
K010 appstat201201
K010 appstat201201K010 appstat201201
K010 appstat201201
 
Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
 
第三回R勉強会
第三回R勉強会第三回R勉強会
第三回R勉強会
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
 
R language definition3.1_3.2
R language definition3.1_3.2R language definition3.1_3.2
R language definition3.1_3.2
 
第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)
 
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoRRとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
 
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類[機械学習]文章のクラス分類
[機械学習]文章のクラス分類
 
Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編
 
Ruby科学データ処理ツールの開発 NArrayとPwrake
Ruby科学データ処理ツールの開発 NArrayとPwrakeRuby科学データ処理ツールの開発 NArrayとPwrake
Ruby科学データ処理ツールの開発 NArrayとPwrake
 
textsearch_jaで全文検索
textsearch_jaで全文検索textsearch_jaで全文検索
textsearch_jaで全文検索
 
Tokyor23 doradora09
Tokyor23 doradora09Tokyor23 doradora09
Tokyor23 doradora09
 
2017年3月版データマエショリスト入門
2017年3月版データマエショリスト入門2017年3月版データマエショリスト入門
2017年3月版データマエショリスト入門
 
Analyze by StatsModels or Numpy
Analyze by StatsModels or NumpyAnalyze by StatsModels or Numpy
Analyze by StatsModels or Numpy
 
拡張ライブラリ作成による高速化
拡張ライブラリ作成による高速化拡張ライブラリ作成による高速化
拡張ライブラリ作成による高速化
 
2017年3月版データマエショリスト入門(誤植修正版)
2017年3月版データマエショリスト入門(誤植修正版)2017年3月版データマエショリスト入門(誤植修正版)
2017年3月版データマエショリスト入門(誤植修正版)
 
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
 

Kürzlich hochgeladen

Kürzlich hochgeladen (11)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

R's anti sparseness