ダウンロード - researchmap

データマイニングを味見する
~ 計算から見たデータマイニング ~
宇野 毅明 (国立情報学研究所
,総合研究大学院大学)
2011年6月 東北大学経済学部
簡単に自己紹介
名前: 宇野 毅明
年齢・職種:国立情報学研究所・准教授・41歳
研究分野: アルゴリズム理論とその応用
- グラフアルゴリズムを中心とした離散アルゴリズム
- 組合せ最適化とそれにまつわる数理
- 列挙アルゴリズムと、頻出パターンマイニングへの応用
最近の研究: ゲノム情報学やデータマイングで出てくる巨大なデー
タベースの基礎的(とはいっても非常に時間のかかる)な解析を超
高速で行うアルゴリズムの開発
今日のトピック: パターンマイニング
• 大規模データを入力し、そのデータに良く現れるパターンを全て見
つける問題
• データから、特徴的な部分を「発見」したいときに、その「候補」を見
つける手法として有益
• データマイニング分野の中心的な問題。たくさんの研究あり
• しかし、最近は閉塞感も漂う
本発表
データマイニングの目標とパターンマイニングの最近の成果
パターン
マイニング
データベース
実験1
●
●
●
▲
●
実験2
▲
●
●
●
●
●
▲
▲
実験3
▲
実験4
▲
▲
▲
▲
▲
実験結果
▲
●
●
●
●
ATGCGCCGTA
TAGCGGGTGG
TTCGCGTTAG
GGATATAAAT
GCGCCAAATA
ATAATGTATTA
TTGAAGGGCG
ACAGTCTCTCA
ATAAGCGGCT
ゲノム情報
パターン
• 実験1● ,実験3 ▲
• 実験2● ,実験4●
• ATGCAT
• 実験2●, 実験3 ▲, 実験4●
• 実験2▲ ,実験3 ▲
• CCCGGGTAA
.
• GGCGTTA
.
• ATAAGGG
.
.
.
.
1. データマイニングの見方
(私見です。ご了承下さい)
データマイニングとは
• データマイニングは、データからなんらかの知識を発見する手法
• (目的無く)集められたデータを分析することで、新たな知見を見い
だそう、というのがそもそもの動機
 嗜好的な商品の販売戦略
 異常事例の特徴解析
 顧客分類、データ分類
....
• 分析では、例えば、以下のようなものを見つける
+ グループ A とグループ B を分けるルール
+ A ならば B であることが多い、という依存関係
+ A と B と C は一緒に起ることが多い、という相関関係
「統計」と同じ?
+ グループ A とグループ B を分けるルール
+ A ならば B であることが多い、という依存関係
+ A と B と C は一緒に起ることが多い、という相関関係
 昔から統計の分野で盛んに行われてきたこと ?
• 実はそのとおりで、やっていること自体は依然と変わりがない
• しかし、アプローチの仕方、ものの見方の角度が大きく異なる
(分布、計算、発見、検証、…)
巨視的に見ると
① 統計は 検証 、データマイニングは 発見 、が目的
② 統計には モデル(分布) があるが、データマイニングは ない
③ マイニングの出発点は 計算 、統計は(たぶん) 数理モデル
④ マイニングの目標は 局所 、統計は(たぶん) 大域
⑤ データマイニングは 巨大なデータ が合い言葉
• おむつと缶ビールが一緒に売れている
- 統計は、これが「どれくらい普通でないことなのか」を調べる
- データマイニングは、これを「どのように発見するか」を問う
(つまりは、基本的に 計算手法 の学問)
発見と検証
① 統計は 検証 、データマイニングは 発見 が目的
• おむつと缶ビールが一緒に売れている
- 統計は、これが「どれくらい普通でないことなのか」を調べる
- データマイニングは、これを「どのように発見するか」を問う
• 統計では、分布を仮定して、おむつと缶ビールが一緒に売れること
がどれくらい珍しいことか、調べる。
 モデルが必要。また、「おむつと缶ビール」という、候補が必要
• データマイニングでは、「よく売れる商品の組合せ」を網羅的に調べ
上げるので、モデルや候補は不要
 どれくらい珍しいかわからない。候補は大量に出てくる
それぞれの難しさ
① 統計は 検証 、データマイニングは 発見 が目的
② 統計には モデル(分布) があるが、データマイニングは ない
③マイニングの目標は 局所 、統計は(たぶん) 大域
④ マイニングの出発点(困難性)は 計算 、統計は(たぶん) 数理モ
デル (工学と原理原則、帰納と演繹)
• おむつとビールの例(頻出集合)から、これらの違いはよく見える
• そうなると、統計では、モデルの構築と検証のための数理が技術
的な困難になる
• データマイニングでは、(巨大なデータから)「効率良く解を見つける
こと」が難しさになる
(効率良く見つけられるモデルは何か、という点も)
代表的な問題
• データマイニングの基礎的&代表的な問題
+ 決定木、分類(学習)
+ クラスタリング
+ 頻出パターン
• どれも、「局所的な特徴」を捕らえることを目標にしている
 似たような嗜好を持つ人のグループ
 AとBを分ける属性(の組合せ)
 多く(それでも一部)の客に共通して購買される商品
....
2. パターンマイニングの近況
(私見です。ご了承下さい)
頻出パターンの列挙
• データベースの中に多く現れるパターンを全て見つける問題を
頻出パターン列挙(あるいは発見、マイニング)問題という
データベース: トランザクション、ツリー、グラフ、多次元ベクトル
パターン: 部分集合、木、パス・サイクル、グラフ、図形
データベース
実験1 実験2 実験3 実験4
●
▲
▲
●
▲
●
●
▲
●
●
●
▲
●
▲
●
●
●
▲
●
●
▲
▲
▲
▲
実験結果
頻出する
パターンを抽出
ATGCGCCGTA
TAGCGGGTGG
TTCGCGTTAG
GGATATAAAT
GCGCCAAATA
ATAATGTATTA
TTGAAGGGCG
ACAGTCTCTCA
ATAAGCGGCT
ゲノム情報
• 実験1● ,実験3 ▲
• 実験2● ,実験4●
• 実験2●, 実験3 ▲, 実験4●
• 実験2▲ ,実験3 ▲
.
.
.
• ATGCAT
• CCCGGGTAA
• GGCGTTA
• ATAAGGG
.
.
.
パターンマイニングの応用
売上げデータの分析
• 雑誌とおにぎりが良く一緒に売れてます
• 夜 訪れる男性は高めの弁当を買ってます
• さんま と 大根 と すだち は
セット販売したらどうですか?
・・・
画像認識
• みかんとみかんでない画像を分ける
特徴を見つける
項目の自動分類
遺伝子Z: ●○★
遺伝子A: ●△▲
遺伝子Z: ●○★
遺伝子B: ●△▲
・・・ 遺伝子F1: ■□
遺伝子D: ●△▲
遺伝子F2: ■□
・・・
・・・
Webページのトピック分類
• Webページを、リンクやキーワードの
組合せで、トピック毎に分類
全国
ラーメンラーメン
巡り の旅人
基礎的な問題なので、応用に広がりがある
カツカレー
と私 カレーの
作り方
原始的なモチベーション
• もともとのモチベーションは、たぶん、
(大きな)データの局所的な特徴を捉えたい
• 全体的に均質ではなく、多種の要素が混在する巨大なデータの解
析が必要になってきたから
 単に全体的な分布を捕らえてしまうと、
局所に際だつ特徴は全て埋もれてしまう
• 局所的な特徴が得られれば、マイノリティーに対応できる
 嗜好的な商品の販売戦略
 異常事例の特徴解析
 顧客分類、データ分類
....
問題の定式化
• 次にモデル作り。局所的な特徴とは何か
 共通の要因が知りたいから、共通する構造にしましょう
 顕著なものが知りたいので、多くの項目に含まれる構造を
という流れだと思います。
パターンマイニング
(巨大な)データの、閾値以上の項目に含まれる(現れる)、
ある決められたクラスの構造を全て見つける問題
• 以後、apriori、深さ優先など多くの探索手法
ビットマップやFP-tree などデータ構造とアルゴリズム
飽和集合と極大頻出集合など、発展させたモデル が出ます。
問題設定:意外と良い感じです
• 元のモチベーションが「発見」。なので最適化型の問題設定は有用
性が低く、列挙型が適当
 ○
• 大規模データを対象とするので、単純なデータから単純な評価値
で解を見つけるようにしている
 ○
• 最小サポートというパラメータが存在し、それで見つける解をコント
ロールできる
 ○
• 便利にできている
アルゴリズムから見ると
• パターンマイニングは、データの巨大さと解の多さから、重たい計
算を要求するため、高速アルゴリズムは必須要因
• アルゴリズムから見ると、パターンマイニングは「列挙問題」
• 列挙の中でも簡単な問題になっているため、楽に設計ができる
 単調性、閾値(最小サポート)による制約、単純なアイテム集合
• もし「情報量最大のものk個」なら、これほど流行らなかっただろう
(アルゴリズムとモデルの間の、いい落としどころを見つけている)
特徴の定義
が複雑
解析モデル
パターン
マイニング
指数的に時
間がかかる
列挙
アルゴリズム
既存研究の歴史
• いい落としどころ(新しい研究分野)ができたので、研究は発展
多種の構造データへの対応、頻度の定義、パターンの定義(極大)
探索アルゴリズム、データ構造...など
• が、今日はアルゴリズムの話を深くはしません (ちょっと紹介)
• 歴史的な話、最近の問題意識などを、紹介したいと思います。
(新しいモデルも少し)
3. マイニングアルゴリズム鳥瞰
頻出集合の単調性
• 工夫をするためには、何か問題の特徴をつ
かまなくてはいけない
111…1
• 使えそうなのが、「頻出集合の部分集合は
必ず頻出」、というもの(単調性という)
 つまり、ハッセ図(包含関係を
図示したもの)の上では、
頻出集合が存在する
エリアはつながっている
頻出
000…0
1,2,3,4
1,2,3 1,2,4
1,2
1,3
1
空集合から出発して、山登り的に(重複を出
さないように)探索 (共通の基本アイディア)
1,3,4
1,4
2,3,4
2,3
2,4
3,4
2
3
4
φ
マイニングの技術の歴史
• いくつかのブレイクスルーがある
第1世代
apriori (幅優先): ディスク上のデータ用
111…1
頻出
第2世代
深さ優先探索: データをメモリに保持
000…0
第3世代
データベースの圧縮: trie(FP-tree) などで再帰的に圧縮
第4世代?
基数ソート、振り分け、および ppc拡張による飽和集合列挙
第1世代: apriori
• 各レベルごとに頻出集合の候補(1つ下のレベルの頻出集合に1つアイ
テムを加えたもの)を生成し、その頻出度を計算
Comp_CK (K={v1,…,vk})
1. S0={φ}, k := 0
2. while Sk が空でない
3. for each トランザクション Ti
4. for each P∈Sk,P⊆Ti
P の頻出度+1
5. 頻出でない P を Sk から除去
6. for each P∈Sk
7.
for each アイテム e
8.
P+e を Sk+1 に挿入
1,2,3,4
1,2,3 1,2,4
1,2
1,3
1
1,3,4
1,4
2,3,4
2,3
2,4 3,4
2
3
4
φ
• P+e の部分集合で、Skに入っていないものがあれば頻出でない
• 1レベルにつき、ディスクのスキャンが一回ですむ
• メモリ使用量と検索の手間がボトルネック
第2世代: 深さ優先(バックトラック)
• 空集合から出発し、頻出集合である限り再帰的にアイテムを追加
Backtrack (P, Occ(P) )
1. output P
2. for each e > Pの末尾
(P の最大添え字のアイテム)
ダウンプロジェクト
3. Occ(P∪e) = Occ(P) ∩ Occ(e)
4. if |Occ(P∪e)| ≧ σ then (頻出なら再帰)
call Backtrack (P∪e, Occ(P∪e) )
1,2,3,4
1,2,3 1,2,4 1,3,4 2,3,4
• メモリにデータベースが全部
乗らないと効率が悪い
• 出現を更新していくところがポイント
1,2 1,3 1,4 2,3 2,4 3,4
1
3
2
φ
4
バックトラック法による探索
• そもそも重複が起こるのは、各頻出集合がいくつもの部分集
合から「アイテムを1つ追加」として得られるのが原因
({1,2,3} には、{2,3}+1, {1,3}+2, {1,2}+3 の3通りある)
• そこで、各頻出集合に対して、「作られ方」と1通りに制限する
• 具体的には、「一番大きなアイテムを加えた場合のみ」とする
({1,2,3} は、{1,2}+3 という
1,2,3,4
作り方でしか作らない、
ということ)
1,2,3 1,2,4
1,3,4 2,3,4
 探索ルートが木構造に
なるので、重複がなくなる
1,2
1,3
1
こういう探索方法をバックトラック法という
1,4
2,3
2,4
3,4
2
3
4
φ
含むものしか含まない
• アイテム集合 X の出現集合を T とする
• X+e の出現は X を含む(= X の出現)
 X+e を含むトランザクションを見つけるとき
には、 T のトランザクションしか見なくてよい
• T のトランザクションで e を含むものを集めると
X+e の出現集合が得られる
 Occ(X+e) = Occ(X) ∩ Occ(e)
配列リストの形で持てば、Occ(X) と Occ(e) の両方をスキャンす
るだけ、つまり O( |Occ(X)| + |Occ(e)|) 時間
• 出現集合を更新すれば、データ全体を見なくて良い
 計算時間はだいぶ短くなる
第3世代: 再帰的データ圧縮(FP-tree)
• データベースの縮約により、再帰の深いレベルでの高速化する
(1) 前回追加したアイテムより小さいアイテムは消す
(2) 現在の出現集合からできるデータベースの中で、頻出になって
いないアイテムは消去する
(再帰呼び出しの中で加えられることが無いから)
(3) まったく同一のトランザクションは、1つにまとめる
• 実データだと、下のほうのレベルではだいたい大きさが定数になる
• FP-tree(trie)を使うと、共有する prefix
も圧縮されるが、オーバーヘッドも大きい
1
1
2
2
5
6
4
7
4
3
2
4
4
3
1
σが小さいときと速度の大きな差はない
3
4
4
5
6
7
6
7
6
7
木構造を用いた圧縮 (trie, prefix tree)
• 各トランザクションを文字列とみなすと、2分木の形で格納でき、メ
モリを節約できる (共有する prefix の分だけ小さくなる)
 振り分けと併用できる。スキャンの時間も、それだけ短くなる
• BDD(ZDD)も利用可能
A: 1,2,5,6,7,9
B: 2,3,4,5
C: 1,2,7,8,9
D: 1,7,9
E: 2,3,7,9
F: 2,7,9
*
1
2
1
2
5
6
7
7
8
9
7
9
3
4
5
7
9
7
9
D
F
B
E
9
C
A
末広がり性
• 再帰の末端以外はさほど高速化されていないのに、なぜ実際
には大幅に高速化されるのか?
• バックトラックは、各反復で複数の再帰呼び出しをする
 計算木は、下に行くほど大きくなる
 反復の平均計算時間を支配するのは一番下の数レベル
計算時間長
・・・
計算時間短
ダウンプロジェクトや圧縮による末端の高速化が
全体を高速化している
第4(?)世代: 振り分け・基数ソート・ppc拡張
• trie を使ったデータの圧縮には nlogn の時間がかかる
 基数ソートで、(ハッシュでの)オーバーヘッドなしに線形時間
• 疎な行列の転置を使って、追加するアイテムの出現を、いっぺん
に線形時間で求める (振り分け)
• ppc 拡張を用いて飽和集合を無駄なく列挙
1
1
3
2
2
6
4
7
4
3
2
5
4
3
1
4
4
4
5
6
7
6
7
6
7
振り分けによる高速化
• 各アイテムに空のバケツを用意する
• X の各出現 T に対して、以下を行う
- T に含まれるアイテム e に対して、 e のバケツにT を入れる
 この操作が終わった後は、各アイテムe
のバケツの中身は X+e の出現集合になる
振り分け (X)
1. for each X の各出現 T
2. for each e∈T, e > Xの末尾
eのバケツに T を挿入
A: 1,2,5,6,7,9
B: 2,3,4,5
C: 1,2,7,8,9
D: 1,7,9
E: 2,7,9
F: 2
1: A,C,D
2: A,B,C,E,F
3: B
4: B
5: A,B
6: A
7: A,C,D,E
8: C
9: A,C,D,E
1反復の計算時間のイメージ
• 普通に頻出度の計算をすると
各 P+e に対してデータを
一回スキャンする
• ダウンプロジェクトは
Occ(P) と Occ({e}) をスキャンする
 Occ(P) を n-i 回スキャンし、
データベースの i より大きな
アイテムをスキャンする
n個
+
(n-i)個
i
• 振り分けは出現Occ(P) 中のトランザ
クションの i より大きい部分をスキャンする
Occ(P)
i
技術のまとめ
第1世代 apriori (幅優先)
ディスク上のデータ用のスキャン回数を最小化
データがメモリに乗らないとき速い
第2世代 深さ優先(バックトラック)
出現の集合を保持するところがミソ
データをメモリに入ると速い
第3世代 再帰的データ圧縮(FP-tree)
末端の計算の高速化が全体を高速化
第4世代 基数ソート、振り分け、 ppc拡張
検索技術からアルゴリズム技術へ
111…1
頻出
000…0
実データ(超疎)
BMS-WebView2
飽和:LCM
頻出:LCM
極大:afopt
実データ(疎)
kosarak
飽和:LCM
頻出:nonodrfp&LCM
極大: LCM
賞状と賞品
賞品は {ビール, 紙おむつ}
“Most Frequent Itemset” だそうです
4.新しい問題設定とその解法
最近目につく問題点
• 最近、パターンマイニングの研究は、たこつぼにはまっている気が
します。やり尽くされているので、新規の研究は難しいと言うことです
(計算が高速化できるようになってしまったので、大きな課題がな
い)
 いいモデルがなかなか出てこない。いい技術も
出てこない。既存のものを大きく超えることは難しい
 モデルの単純さゆえに直接的に利用ができない。
副次的に利用するには、道具が複雑すぎる
 有益なものを見つけようとすると、解が沢山出てくる。
大量の似た解を処理できない
• 昔はきっと、「これができれば」という希望があったと思います
また距離が開いてしまった
• パターンマイニングは、いい落としどころだったはずだが、いつの
まにかアルゴリズムのほうに入ってしまっている
(最近の研究はモデルでなく「アルゴリズムの拡張」になっている)
• いつの間にか、また「モデルとアルゴリズムの距離」が開いた!
• ということは、また新しい「落としどころ」が必要
新たな落としどころを、計算とモデルの両面から考える
特徴の定義
が複雑
解析モデル
パターン
マイニング
指数的に時
間がかかる
パターン
マイニング 列挙アル
列挙
ゴリズム
アルゴリズム
もう一度モチベーションから
• 立ち戻ってみると、もともと「局所的な」「特徴」が見つけたかったの
だが、「大量の局所」と「大量の特徴」が見つかってしまっている。
• 少しの(代表的な)局所の、代表的な特徴がわかれば十分だろう
• しかし、代表のみを残すために、パターンに制約を付ける、というア
プローチは今ひとつうまくいっていない。
 多くの面白い局所のパターンを切ってしまう可能性があるため
• 飽和集合のように、完全性
を保証しようとすると、少し
しか減らせない
(臆病すぎ)
データ
パターンへの制約は妥当か?
• 「局所」とは、パターンマイニングの言葉で言えば、
「パターンが出現する項目の集合」
• 「出現集合が他と違うもの」を残したくて、「出現集合が似ているも
の」はまとめたい
 パターンに対する制約ではない!!!
 パターンに対する制約でうまくゆく訳がない
• もっと「出現集合」に
注目して計算すべき
 代表は、出現集合に制約
を与えて定義すべき
データ
複雑なモデル・手法は、、、
• こういう方向性で問題を考えると、ついつい複雑なモデルを複雑
な手法を使って解く、というパターンになる。
あるいは、ある程度強い仮定を置いて問題を解くことになる
(アルゴリズム的な意味です)
• 数理的にはいい結果が出せるかもしれないが、利用者にとって
は親切でない
• だんだん、何をしているのか分からなくなってくる、、、
(最適化の分野、アルゴリズムの分野などで、こういうトピックをいく
つか見てきました。)
「見つけ方」の逆転
• 頻出パターンは、「局所的」な「特徴」であるが、その見つけ方は、
まず特徴候補を列挙して、どの局所に現れるかを計算している。
 定義の流れと逆なので、よく考えると気持ち悪い
• まず、「共通な要因を持つ項目の集合」を見つけてから、
「それらに共通する特徴」を見つけるようにできるといい。
 定義の流れに合っているので、自然な感じ
 「無駄なパターンを見つけなく」なってくれるとうれしい
データ
データ
もう、あるんじゃないですか?
• この方法、とどのつまりは類似性に基づいてクラスタリングして、共
通するパターンを見つけよう、ということ。
 Q: すでにあるんじゃないですか?
• A: あります。データをクラスタリングして、その中心を取って代表と
するような、パターン学習は多くあります。
• が、心意気が違います。
「クラスタリング」が「分類」なの
が問題です
思考実験
• Webページ(サイト)を、リンク先の類似性でクラスタリングする
+ g○ogle, Yah○o, amaz○n にリンクしているページ、という巨大
クラスタができそう。で、これら3サイトが特徴
 これら3サイトにリンクしていると、このクラスタに吸収されて
しまい、マイナーなトピックで類似している人々が全滅してしまう
• 宇野のページは、どのページも、トップページ、英語版、NII、にリン
クしているので、強力に全部似ているわけですが、「アルゴリズム関
係にリンクを張っているサイト」でくくって欲しいのです
• マイニングの基本「自明でない、深いパターンを見つけたい」という
心意気が否定されるモデリングになっているので、流行らない (?)
なんとかしようとすると
• 例えば、クラスタ数を変えれば、隠れたクラスタも見つけられるかも
 しかし、クラスタ数をあらかじめ決めるのが難しい
• 雰囲気的には、頻度を決めうちしてパターンマイニングをしている
ようなもの。全てのクラスタ数でのクラスタを列挙すればいいか。
• この問題、たぶんマルチラベルクラスタリングだが、ちょっと雰囲気
が違う感じがする (ラベルではなく、グループ分けが知りたい)
(マルチラベル自体、研究が少なく、
単純でぱっとした手法は難しそう)
クリークによる局所構造発見
• 共通した構造を持つ項目の集合
 どの2つの項目も共通する構造を持つ (類似性、と呼んでおく)
 どの2つの項目も類似性を持つ項目集合を見つけよう
• 「類似する項目」の間に枝が張ってあると思うと、
局所的な項目集合  (極大)クリーク
• 極大クリークを列挙することで、
「類似する項目集合」を見つけてしまおう
(クリークは高速列挙できる)
クリークマイニングの弱点
• クリークは基本的に局所構造を表すが、歓迎されないものもある
★ とてもよく似たクリークは不要
▲ クリークとクリークを橋渡しする構造も(小さければ)不要
• それぞれ、★ クリークに枝欠損があるとき、▲ クリーク同士が近
いとき、に多発する
クリーク
クリーク
クリーク
クリ
ーク
クリ
ーク
クリ
ーク
クリ
ーク
類似構造を考えると
• ★ クリークの枝欠損、▲ 近いクリーク、は多発しないだろう
★ A と B は多くのC に対して共に共通の構造を持つ
 A と B も共通の構造を持つ可能性が高いだろう
▲局所構造の多くが互いに共通の構造を持つ
 全体が共通の構造を持ちそうだ
• つまり、共通の構造を持つもの(似ている
もの)が結ばれたグラフには、それほど多く
の極大クリークはないだろう、と推測される
クリーク
クリ
ーク
クリ
ーク
データクリーニング
• 逆に、積極的に不利な構造をグラフから取り除くと、より局所をはっ
きりさせられる (小さなクリークにしか含まれない枝は消していい)
-A と B 両方に隣接する頂点が多数あるなら、AB 間に枝をはる
★ クリークの枝欠損がなくなる
-A と B 両方に隣接する頂点が少しなら、AB 間の枝を切る
▲ 近いクリークを結ぶ枝が無くなる
クリーク
• 極大クリークの数が非常に小さい
グラフができるものと期待される
クリ
ーク
クリ
ーク
共通部分を取ってパターンを作る
• 局所的な項目グループが得られたら、それら項目の共通部分を
取ればパターンが得られる、 だろう。
• 共通部分が素直に取れないと、共通部分取得自体が一つの選
択問題になるが、ここは自然に行うことを目指す
(例えば頻度チャートとか、多数決による決定がある)
1, 2, 3, 4, 5, 6
1, 2, 3, 5
1, 2, 3, 4
------------1,2,3,(4),(5)
1, 2, 3, 4
1, 2,
5, 6
3, 4, 5, 6
-------------------------(1),(2),(3),(4),(5),(6)
計算的な課題
• 類似する項目の組を全て見つけ、近接グラフを作る
 アイテムセットマイニングの場合、大きさ2のアイテム集合
を見つける問題になる
A: 1, 2, 3, 4, 5, 6
B: 1, 2, 3, 5
C: 1, 2, 3, 4
• 極大クリーク列挙は、いろいろな方法で高速に列挙できる
• 共通部分を取るところは、多数決を取っているだけなので、た
いした時間はかからない
というわけで、高速計算が可能なモデル
アルゴリズム的な特性
• アルゴリズムから見た解法の特性は、と言うと、
① 仕組みがシンプル
類似性の列挙・クリーク列挙・多数決、どれも比較的単純
なので、
② 変化への対応が簡単
類似項目の列挙と多数決を組み込めばすぐに改良できる
① 結果がロバスト
変数の添え字順などによる変化がない
パラメータの変化による解の変化も、ある程度少ないだろう。
(クリークが大きくなったり小さくなったりするだけなので)
ねらっているところに、うまく着陸できている、か?
計算実験1:Webリンクデータ
•日本のWebリンクデータ (from 東大喜連川研究室)
- ノード数 550万、枝数1300万 (サイト単位に加工済み)
• Web はデータが大きいために、手法にある程度流れがある
+ データ全体を簡単な手法で解析
((k)連結成分、強連結成分、ページランク、最大流、、)
+ データをしぼって深い解析
(評判分析、リンク予測、、、)
(Webテキストマイニングは、リンク解析ではない)
• クリークを列挙して、コミュニティーを見つける研究もある
(が、解の多さが問題)
計算実験1:Webリンクデータ
• クラスタリングしようと思って極大クリークを列挙すると、
数が大きすぎて列挙できない
 リンク先の類似性でデータを作り直してみる
• 20個以上のリンク先を共有するものを「似ている」とし、大きさ
20以上の極大クリークを列挙
 極大クリーク数が約 8000個に減少!
ほとんどがスパムのグループ、、、
• 計算時間はおよそ10分(大きさ2の頻出集合を見つけているのと
等価)。実用に十分耐えうる
解の分布
• 通常のパターンマイニング(極大クリーク列挙)では、解が大
きくなるにつれ指数的にその数が増える
• 本手法の場合、非常に緩やかに解数が増加し、さらに非常に
大きな解がぽつぽつと見つかる
 大きな解を見つけるために要する時間は格段に短い
 非自明な解を見つけやすい???
極大クリーク数
• ある程度、情報をアブストラクト
することに成功しているのだろう
解の大きさ
実験2:BMS-WebView2 (クリック)
• KDDで使われたクリックストリームのベンチマークデータ
- アイテム数3300,トランザクション数 7.7万 平均サイズ 5
• 頻出度100で、頻出集合が1万個ほど、50で7万個ほど
• まずは、アイテムの類似性によるクラスタを見てみる
• 100(50)以上のトランザクションに共通して含まれていたら「似て
いる」として本手法を適用
 極大クリークが1個だけ! (全部が含まれる)
 ある程度頻出するアイテム全てが似てしまっている
• 計算時間も意外と長い(10分。頻出集合は10秒)
原因の推測
• クリックストリームデータには、ある種の特徴があるだろう
- トップページから順にリンクをつついてページをたどる
- だいたいのサイトはツリー構造をしている
 ほとんどの項目に共通して含まれるページが自然と多くなる
(ツリーの根に近いページは、多くの項目に含まれる)
 必然的に、多くのページが、多くの項目に共通して含まれてし
まう
対策
• たくさんの項目に含まれるページがあって、それが良くない
 頻出度がある程度以上高いアイテムは無視しよう
• でもやっぱりだめ。極大クリークは一個だけ
(主要なページは、行き来する人がたくさんいて、自然と
同一クラスタに入ってしまうのであろう。)
• こちらではうまくいかない。やはり「特徴のある局所を見つける」
ほうがいいのだろう。
 トランザクションをクラスタリングして、その共通部分を取る
トランザクション クラスタリング
• 10個のアイテムを共有するトランザクションが似てるとして実行
• でもやっぱりだめ。極大クリークは一個だけ
(主要なページは、行き来する人がたくさんいて、自然と
同一クラスタに入ってしまうのであろう。)
• また、頻出度が高いアイテムを無視してみる (頻出度100以上)
 大きさ10以上のクリークは1900個ほど
• データクリーニングをすると、余計に個数が増えてしまう。。。
 54000個ほど。中途半端に頂点をつなぐことで、かえって似
たクリークが増えてしまっているようだ
共通部分を取る
• 各クラスタの共通部分を取って、頻度チャートを作る
(1916:0.91) (1180:0.91) (1898:0.73)
(1916:1.00) (1180:0.82) (847:0.73) (1898:0.64)
(2272:1.00) (2382:0.91) (2258:0.91)
(2628:1.00) (2247:1.00) (2789:1.00) (1551:1.00) (2342:0.90)
(2775:0.80) (2469:0.70) (2797:0.60) (3047:0.60) (2704:0.50)
(2841:0.50)
(2247:1.00) (2342:0.90) (2789:0.90) (2628:0.80) (2775:0.80)
(1551:0.80) (2469:0.70) (2214:0.50) (3047:0.50) (2797:0.50)
• 共通性が高いものが多い、パターンも大きめ
• 100% 近いものが多いので、比較的安定しているだろう
• 同一なパターンで頻度チャートがビミョーに違うものが沢山出る
(同一なものを除くと個数が半分ぐらいになる)
(あいまい)頻出文字列の発見
頻出文字列
• (巨大な)文字列データから、頻出する文字列を見つけたい
(頻出する=あちこちに現れる)
• suffix array やradix sort などで、ほぼ線形時間で、多数現れる
部分文字列は見つけられる (閾値以上の回数現れる者の中で
極大なもの、といった設定もOK)
• しかし、アイテム集合のように、「現れる」ことが包含関係で表
されているものに比べると、自由度が低い
( = きっちりと全体が現れるものしか見つけられない)
• ゲノムなどエラーのあるデータ、ひな形や定型文書のような一
部変化するデータでは、今ひとつ
あいまい性の導入
• エラーや、部分的な変化に対応するには、厳密に一致する文
字列だけでなく、あいまいマッチングの意味であちこちに現れる
文字列を見つける必要がある
• あいまい性の尺度は、ハミング距離、編集距離、固定回数の
ギャップ、マルチプルアラインメントのスコアが小さい、など
• しかし、こうすると、短い頻出文字列がたくさん存在してしまう
• いくら高速なアルゴリズムを作っても、これらを全部列挙する
のは無理だし、そもそも見つけてもうれしくない
• 困った困った、ので、違うアプローチを考える
不都合をたっぷり享受
• あいまい頻出文字列問題は、パターンマイニングの負の側面
をたっぷりと享受している
 解数の爆発、 解の類似・冗長性、 無意味な解の氾濫
長さ固定 & 多数決
• 長さを固定すれば、今回の枠組みには収まる
 文字列の各所から、固定長の文字列を取得
 類似する文字列の組を列挙してクラスタリング
 全部に共通する構造(マジョリティ)を見つ
ABCDHFG
けて、それをパターンとみなす。
AABDEFH
ABCDEFH
• パターンは多数決で決めれば良い
BBHDEGH
ABHDHFG
• 長さはある程度短くないと、挿入削除が面倒
AAHDEFG
 短い類似部分列の発見には sachica を利用 ------AB*DEF[GH]
類似する部分列の発見 (sachica)
問題: 各項目が同じ長さ l の短い文字列(50文字程度)であるデ
ータベースを入力したときに、文字列のペアで異なり数(ハミング
距離)が d 文字以下である組を全て見つけよ
• 長い文字列の比較には、各ポジションを先頭とする長さ l の部
分文字列を全てに対してこの問題を解く。
(似ている部分列はペアを沢山含むところとして見つかる)
ATGCCGCG
GCGTGTAC
GCCTCTAT
TGCGTTTC
TGTAATGA
...
• ATGCCGCG と AAGCCGCC
• GCCTCTAT と GCTTCTAA
• TGTAATGA と GGTAATGG
...
簡単に解決
• 安定的ではないが、単純に行ってみる
 次数最大の 部分文字列(似たものが最も沢山ある)
を芯に据えて、そこから左右に伸ばしてみよう
 分布の山の真ん中にある頂上をとらえているイメージ
• まず芯と似ている部分列を全て並べ、似ているものが多い間
左右に伸ばす。似ているものが少なくなったら、その時点でやめ
る。
• 伸ばしきったところで、一つパターンが得られる。その部分列と
なってしまったものは除去し、同じように繰り返す。
頻出文字列を核にする
① 最も似ている物が多いもの S を見つける
② S と似ている物を全て集める ( S1,…,Sm)
③ それらをそろえて並べ、文字が共通している部分を抜き出す
次に進む
• 一番良く現れる物について頻出文字列を見つけたら、次に「2番
目に良く現れる文字列」について同じことをする
• ただし、頻出文字列を見つけるときに使った文字列の部分列で、
「見つけた頻出文字列」の一部になっているものは「もう使ったよ
う」という意味を込めて消去
• どんどん候補が消されるので、それほど多くの解は見つからない
• 仕組みが単純で、計算も速い
• それなりに似通っていない解が見つかる
計算結果
• マウス13番染色体 Genic1 での実験結果(150万文字)。長さ30異
なり数2、多数決の閾値は 70%。10回以上現れるもののみ注目
#T#GCAAAGGCTTT#CCACATTGATTACATTCATAAGGTTTCTCTCCAGTATGGGTTCTTTTATGATATCTGA
#TTGCAAAGGCTTTACCACATTGATTACATTCATAAGGTTT#TCTCCAGTATGG#TTCTTTTATGATATCTGA
GAC#A#TGTGACAGGAAAAGGCTTTACCACATTGATTACATTCATAAGGTTTCTCTCCAGTATGGGTTCTTTT
GATTACTGTGA#AGGAAAAGGCTTTACCACATTGATTACATTCATAAGGTTTCTCTCCAGTATGGGTTCTTTT
#TGATATCTGAGACTA#TGTGACAGGAAAAGGCTTT#CCACATTGATTACATTCATAAGGTTTCTCTCCAGTA
ATGA#ATTGGAGAT#A
TGGGTTCTTTTATGATAT#TGAGAC#A
#TCTCTGAA#AAAGAAAT#AAAGAAGATCTCAGAAGATGGAAAGATCTCCCATGCTCAT#GATTGGCAGGATC
AATATAGTAAAAATGGCTATCTTGCCAAAAGCAATCTACAGATTCAATGCAATCCCCATCAAAAT#CCAACT#
AATTCTTCA
• # は多数決が決まらない場所、計算時間は10秒ほど
計算結果 日本語テキスト
• さきほどと同じ日本語テキスト、100万文字、20文字異なり2、次
数(頻出度)20以上
##,000円までの商品#,000円までの商品#,000円までの商品
#,000円までの商品#,000円までの商品#
###月日月火水木金土12345678910111213141516171
819202122232425262728293031##
###月日月火水木金土12345678910111213141516171
819202122232425262728293031##
###Category:激安ポールスミス腕時計激安通販|格安最安値
通販へ【ポールスミス 腕時計 PS#0#
• 解は17個。だいぶ様相が変わりました。よりざっくり取っているの
で、解が減っているのでしょう
計算結果 日本語テキスト
• 異なりを4に、次数(頻出度)を10に変更すると、もっと出てくる
#組の成立となりました。## #月1#日(土)男性12名:女性1#名のご参
加で、5組の成立となりました。## 4月7日(土)男性#0名:女性#
##,###円(税別、送料別)Paul Smith Men’s/ポールスミス メンズ
サイズフェイス:H約4.5cm×W約3.#cm、厚み約#.#cm(リューズ除
く)ベルト:幅約2.#cm腕まわり:最大約###
#年0#月200#年0#月2006年0#月2006年0#月2006年0#月2006
年0#月2006年0#月200#年0#月200#年12月2005年…
• 解は29個。感度が落ちるので、少し低い頻出度、大きな異なり数
で行う必要があるようです。
調子に乗って
• 調子に乗って、さらに大きな問題を解いてみました。
- 日本語Webテキスト 500MB(2.5億文字程度)
- 頻出度10 長さ20、異なり2
• 計算時間30分ほどで、頻出文字列が6000個ほど。使用メモリは
600MBほど (入力データの1.3倍ほど)
• ほとんどはなんらかのテンプレートで、完全に一致しているようだ
• ときどき、日付などのゆらぎを吸収したパターンが見つかる
• 異なり数を4にすると2時間。ちょっと大きな異なりも見つける
#####[アウトレットセール]メーカー販売価格#,##0円(税込)acc
aplus特価#,##0円(税込)#
まとめ
• データマイニングは、「計算手法」のこと
 モデルに対して、良い候補生成手法を与える
• パターンマイニングは、アルゴリズムの進歩により「解ける問題」
になった。しかし、大量の解をいかに利用するかが問題
• 「(顧客の)クラスタを見つけたい」という原点に戻ると、クラスタ列
挙を使うパターンマイニングができる
• 頻出文字列を見つけると、既存手法とは異なるテキストマイニン
グができる