Transcript Document
データマイニング
•
•
•
•
問題の動機付け
決定木
サポートベクターマシン
アソシエーションルール
データマイニングとは
・ (巨大な)データセットから、ある種の規則性とか特徴的な部
分を(大量に)取り出すこと
・ 統計的に顕著(優位)な部分を(複数)取り出す
例:
・ 百貨店の売り上げデータから、
年齢層と購買物品の相関が高いものを見つける
・ 新聞記事データベースから、共通の単語を多く使用している
記事群を見つける
最適化モデルとの違い
最適化:
データセットから、ある種の特徴を最適化する部分を見つ
けよう
データマイニング:
データセットから、ある種の特徴を持つ部分を大量に見つ
けよう
ある種のルールや知識を掘り出そう
自動分類
例)
いくつかの属性を持つデータセットがあり、それらが2つに分類(正
例と負例)されているとき、属性で分類を行うルールを作りたい
さらに例)
・ 年齢・収入・食費・住居費のデータセットから、
車を持っているかどうかを分類する
(年齢がXX歳以上で ( 2×収入+食費)≧1000万なら、持ってる
・ 新聞記事データベース(単語の集合)から、生活に関する記事と
その他を分けたい
・ 誕生日と血液型と今日の運勢から、運のいい人と悪い人を分類
したい
(みずがめ座でA型かおうし座でO型ならば運がいい)
自動分類
決定木とサポートベクターマシン
自動分類を使った予測
・ 年齢・収入・食費・住居費のデータセットから、
車を持っているかどうかを自動的に推測したい
・ 年齢・収入・食費・住居費・(車所持?)のデータセットを
使って、どのような属性を持つと車を持っているのか、と
いう分類ルールを得る
・ 新しく年齢・収入・食費・住居費のデータが来たときに、
ルールに当てはまるかどうかをチェックして、車を持って
いそうかどうかを推測する
データ分類の例
・ 毒キノコに関するデータベースがあるとする
A
B
C
D
E
F
G
H
I
色 高さ 形 毒
● 高
□ 強
● 低
● 低
● 低
△ 無
□ 弱
○ 強
● 高
● 低
● 高
○ 無
△ 強
□ 弱
● 低
● 高
□ 強
○ 無
・ このデータベースを使って、
毒キノコ(強)とそうでないキノコを
わけるルールを見つけたい
例えば、
「●&□ か 低 & ●でない」
「高 & □ 」は、毒キノコにもそうで
ないキノコにも見られるので、
使えない
決定木
・ 分類の仕方のひとつ
例)
・ 収入が700万以上か、収入が400万以上かつ食費が80万
以下か、住居費が200万以上なら、車を持っている
・ 家事という言葉を含むか、生活費と教育を含めば、生活に
関する記事である
・ 分類の仕方を絵で書くと、木になる
毒キノコの決定木
・ 「●&□ か 低 & ●でない」
A
B
C
D
E
F
G
H
I
色 高さ 形 毒
● 高
□ 強
● 低
● 低
● 低
△ 無
□ 弱
○ 強
● 高
● 低
● 高
○ 無
△ 強
□ 弱
● 低
□ 強
● 高
○ 無
●
●
●
×
低
毒
高
□
でない
□
×
毒
低
高
×
毒
良い決定木
・ 決定木は、全ての可能なデータを、論理式か不等式で再
帰的に分割し、できた切片を分類している
・ 切片に間違ったものが入っていなければいないほど、よく
分類されている
最適な決定木を求める、という最適化問題を解きたい
・ しかし、分割を繰り返せば、必ず正確に分類できるけど、
- ルールが複雑すぎて困る
- データの偏り、異常データに思いっきり引っ張られ、予
測精度が悪くなる(オーバーフィッティング:絵参照)
単純なルールで、という条件を入れる
単純にするための制約
・ 単純なルールにするため、決定木に制約をつける
・例えば、
- 分割は n 回まで
- 1つの論理式に、項は2つまで
- 1つの不等式に、変数は3つまで
・ これらの条件を満たす決定木の中で、最も良い分類をして
いるものを見つけなさい、という最適化問題になる
(分類の精度以外の尺度を入れることもある)
・ このほうが、実行可能解も少なくなるので、最適化もしや
すくなる
決定木最適化
・最適な決定木を求める
NP-complete(難しい)
・ ヒューリスティックで解く
・ 例えば貪欲法
- 各切片を分割する全ての分割の仕方の中で、その分
割を追加することで最も分類が良くなるものを追加する
- 切片がある程度 (n個) まで増えたら終了
決定木最適化(2)
・ 例えば近傍探索
- ある分割をやめる、変更する、分割を追加する、という
作業をして得られる決定木を、もとの決定木の近傍とす
る
- 近傍探索をする
・ どちらにしてもヒューリスティックなので、
うまくいったりいかなかったりのようです
決定木の評価
・ 計算で得られた決定木の有効性をどのように評価するか
実際に運用してみれば良いのだが、それでは直接的
過ぎるし、コストもかかるしリスクもある
・ 手持ちのデータを使って、評価する
・ 手持ちのデータをいくつかの小さいデータに分割し、
そのひとつを使って、性能を残りで評価する
・ これを、各小さいデータに対して行うことで、
平均的な挙動を見る
・ 時系列のデータなどで、全体がゆるやかに変化していくよ
うな場合、不利
成功事例
・ 文書の分類は、うまくいくようです。
サポートベクターマシン
・ 自動分類の手法その2
・ 属性を数値だと思うと、データの各項目は
ベクトルに対応する
(データが m 次元空間に散らばっている)
・ これを、平面や曲面ですぱっと、各分類に切り分ける、上
手な切り方を見つけよう(このような切り方を見つける手
法をサポートベクターマシンと呼ぶ)
・ あまりくにゃくにゃの曲面で切ると、オーバーフィッティング
になる
超平面サポートベクターマシン
・ シンプルなルールにするため、平面で切る、と制約をつける
線形計画として定式化できる
・ 各データの属性値は、
正例 i : ai1,…,aim
負例 j : bj1,…,bjm
・ m 次元の平面は c1 x1 +,…,+ cm xm = 1 で表される
・ c1,…,cm を変化させるといろいろな平面が得られる
変数は c1,…,cm
超平面サポートベクターマシン(2)
・ 平面が、データを切り分けているためには、
正例 i に対しては c1 ai1 +,…,+ cm aim ≦ 1
負例 j に対しては c1 bj1 +,…,+ cm bjm ≧ 1
となればよい
これが制約
・ さらに欲を張って、超平面からなるべく各データが離れてい
るようにするためには、
正例 i に対しては c1 ai1 +,…,+ cm aim ≦ 1 -ε
負例 j に対しては c1 bj1 +,…,+ cm bjm ≧ 1 +ε
として、 εを最大化する
実行不能な場合
・ 当然、平面で切り分けられないと、実行不能になる。
なるべく、分類違いが少ない切り方がほしい
・ 個数を最小化するのは大変なので、分類間違いデータの、
平面からの距離和を最小化する
・ 最大を最小化する方法を使う
正例に対しては c1 ai1 +,…,+ cm aim - ti ≦ 1 -ε
負例に対しては c1 bj1 +,…,+ cm bjm + tj ≧ 1 +ε
それと ti ≧ 0 という制約
として、各 ti の総和を最小化する
2次曲面で切り分けたい場合
・ 2次曲面は2次元で言えば、放物線・双曲線・楕円
3次元で言えば、放物曲面・双曲面・楕円体
・方程式は、係数行列と係数ベクトルを C,d とすると
xTCx +dTx = 1
・ 分類間違いデータの、曲面からの距離和を最小化する
正例に対しては aiTCai +dTai - ti ≦ 1 -ε
負例に対しては bjTCbj +dTbj + tj ≧ 1 +ε
それと ti ≧ 0 という制約
として、各 ti の総和を最小化する
・ 変数は C と d なので、不思議なことに線形計画問題
サポートベクターマシンの応用例
□ 最初の事例: 乳がんの検査
検査項目が6個くらいあり、各患者に対して、その検査結果の
数値がデータとしてある。その数値データで、乳がん患者と
そうでない患者を分類
・ 97% くらいの精度で分割できて、しかも予測的中率もそれく
らいの性能が出たそうだ
□ 企業の倒産予測:
多数の企業の過去の財務データで、半年後に倒産した会社
とそうでない会社を分類
・ 70-80 % くらいの精度で分類でき、予測的中率もそれくらい。
2次曲面を用いると、精度が5-10% くらい向上するそうだ
頻出パターン
現れるパターンからの分析
・ データベース構築と検索は、もうできるようになった
(絞込みや、あいまい検索はまだ改良の余地があるけど)
・ より詳しくデータを解析するために、データの特徴を捉えたい
各種統計量(データベースの大きさ、密度、項目に現れる属性値
の総計、分布)よりも、深い解析がしたい
組合せ(パターン)的な構造に注目
(どういう組合せ(パターン)が
どれくらい入っているか)
・ 組合せ・パターンの個数は指数なの
で、全てを尽くすのは効率的でない
多く現れるものだけに注目
データベース
実験1 実験2 実験3 実験4
●
▲
▲
●
▲
●
●
▲
●
●
●
▲
●
▲
●
●
●
▲
●
●
▲
▲
▲
▲
実験結果
ATGCGCCGTA
TAGCGGGTGG
TTCGCGTTAG
GGATATAAAT
GCGCCAAATA
ATAATGTATTA
TTGAAGGGCG
ACAGTCTCTCA
ATAAGCGGCT
ゲノム情報
頻出パターンの列挙
・ データベースの中に多く現れるパターンを全て見つける問題を
頻出パターン列挙(あるいは発見、マイニング)問題という
データベース: トランザクション、ツリー、グラフ、多次元ベクトル
パターン: 部分集合、木、パス・サイクル、グラフ、図形
データベース
実験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
.
.
.
多く現れる 頻出する
多く現れるものを見つけるために、多く現れるとは何か、を決める
・ データベースが項目の集まりだとする
・ パターンに対して、そのパターンを含む項目を出現という
・ 出現の数(頻出度)が閾値より大きければ、良く現れるとする
(含む、の定義は、集合で行ったり、文字列の
包含、グラフの埋め込みなどで定義する)
パターン
{A,C,D}
XYZ
項目
{A,B,C,D,E}
AXccYddZf
集合の出現と頻出度
集合K に対して:
K の出現: K を含むT のトランザクション
K の出現集合 I(K): K を含むT のトランザクション全ての集合
K の頻出度 frq(K): K の出現集合の大きさ
1,2,5,6,7,9
2,3,4,5
T = 1,2,7,8,9
1,7,9
2,7,9
2
{1,2}の出現集合
= { {1,2,5,6,7,9},
{1,2,7,8,9} }
{2,7,9}の出現集合
= { {1,2,5,6,7,9},
{1,2,7,8,9},
{2,7,9} }
頻出集合
・ 頻出集合:T の定数θ個以上のトランザクションに含まれる集合
(頻出度がθ以上の集合)( θを最小サポートとよぶ)
例) データベースT の3つ以上のトランザクションに含まれる集合
1,2,5,6,7,9
2,3,4,5
T = 1,2,7,8,9
1,7,9
2,7,9
2
3つ以上に含まれるもの
{1} {2} {7} {9}
{1,7} {1,9}
{2,7} {2,9} {7,9}
{1,7,9} {2,7,9}
与えられたデータベースT と定数θに対して、T の
頻出集合を列挙する問題を頻出集合列挙問題と言う
(頻出パターン列挙問題も同じ)
トランザクションデータベース
パターンとして、集合を考える
トランザクションデータベース:
各トランザクション T がアイテム集合 E の部分集合
1,2,5,6,7
になっているようなデータベース
2,3,4,5
つまり、 T , ∀T ∈T , T ⊆ E
T = 1,2,7,8,9
1,7,9
・ POSデータ(各項目が、客1人の購入品目)
2,7,9
・ アンケートのデータ(1人がチェックした項目)
2
・ web log (1人が1回のwebサーフィンで見たページ)
・ オプション装備 (車購入時に1人が選んだオプション)
実際のデータは、大きくて疎なものが多い
パワー則、スモールワールドが成り立つ
応用:バスケット分析
・ スーパーなどの小売店舗で、同時に購入される事の多い品物
の組を知りたい
・ 客が購入した品目 トランザクション
・ 品目の組で、多くの客が購入したもの
多くのトランザクションに含まれるアイテム集合
(あるθに対する)頻出集合
● 牛乳、弁当
「おむつとビールの組合せが良く売れる」
という発見が有名
● お茶、弁当
● おにぎり、雑誌
● はさみ、のり
● ラーメン、はし
● こっぷ、皿
● 弁当、おにぎり
...
応用:データベースの比較
・ 2つのデータベースが、意味的にどの程度似ているか知りたい
大きさの違い、ノイズは無視したい
・ 各アイテム、属性などの総数だけでは、組合せがわからない
・ 組合せを細かく見ると、ノイズに振り回される
頻出集合を列挙することで、
組合せ的な特徴を比較できる
データ
ベース
データ
ベース
・ いろいろな言語の辞書データ
・ 異なる種のゲノムデータ
・ 文書集合の単語データ(新聞のデータ、雑誌のデータなど)
・ 顧客のデータ
応用:分類ルール、特性の発見
・ データの特徴を現す規則、あるいは正例・負例を分類するような
規則が知りたい (A,B,C が含まれている、A,B が含まれれば、C
が含まれる、など)
・ 多く現れる組合せを用いないと、仮定部分を満たすものが少なく、
ルールとして意味がない
・ 組合せを細かく見ると、ノイズに振り回される
頻出集合を仮定に用いることで、
信頼度の高いルールを
効率良く見つけられる
データ
ベース
正例
・ 実験データ
・ 利用者履歴データ、マーケティング
データ
ベース
負例
アソシエーションルール
・ アイテム集合 E の部分集合が集まったデータセット T を考える
例:
・ 単語集合の部分集合である、ドキュメント
・ 商品集合の部分集合である、各顧客の購買品目
・ キーワード集合の部分集合である、論文のアブストラクト
S ⊆E に対して、 P(S) = | {H | S⊆H, H∈F} | /|T| とする
・ このデータセットから、P({u})×P(S) に比べて P({u}∪S) が顕著
に大きいような u, S のペアを見つけたい ( 関係が深い)
頻出パターンの単調性
・ 頻出パターンの部分パターンは頻出
単調性が成り立つ
111…1
バックトラック法を適用できる
頻出
000…0
頻出集合であるかどうかのチェック
はO(||T ||) 時間、最高 n 方向に登る
1つあたり O(||T ||n) 時間
1,2,3,4
1,2,3 1,2,4
1,2
1,3
1,3,4
1,4
2,3,4
2,3
2,4
3,4
2
3
4
多項式時間ではあるが、
||T || も n も大きすぎる
1
φ
列挙例
・ このデータベースで
頻出集合を列挙してみる
{1,7,9}: a,c,d
{1,7}: a,c,d
{1,9}: a,c,d
{1}:a,c,d
a:1,2,5,6,7,9
b: 2,3,4,5
T = c: 1,2,7,8,9
d: 1,7,9
e: 2,7,9
f: 2
{2,7,9}: a,c,d
{2,7}: a,c,e
{2,9}: a,c,e
{2}: a,b,c,e,f
{7}:a,c,d,e
φ : a,b,c,d,e,f
{7,9}:a,c,d,e
{9}: a,c,d,e
末広がり性の利用
・ パターン X の出現集合を T とする
X+e の出現は X を含む(= X の出現)
T の中で e を含むもの X+e の出現集合
・ 出現集合を更新すれば、
データ全体を見なくて良い
・ 反復が深くなると、見るべき出現集合は小さくなる
反復が深くなるにつれ、計算時間は短くなる
末広がり性
・ バックトラックは、各反復で複数の再帰呼び出しをする
計算木は、下に行くほど大きくなる
計算時間を支配するのは一番下の数レベル
計算時間長
・・・
計算時間短
ほぼ全ての反復が短時間で終了
(1秒間におよそ100万個)
多くの列挙アルゴリズムが似たような再帰構造を持つので、
下のレベルの仕事を上のレベルがやれば、同様の改良ができる
サポートが大きい場合も
・ θが大きいと、下のレベルでも多くの出現を見ることになる
末広がり性による高速化はいまひとつ
・ データベースの縮約により、下のレベルの高速化をはかる
(1) 前回追加したアイテムより小さいアイテムは消す
(2) 現在の出現集合からできるデータベースの中で、頻出になって
いないアイテムは消去する
(再帰呼び出しの中で加えられることが無いから)
(3) まったく同一のトランザクションは、1つにまとめる
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
データの縮小
・ このデータベースでの頻出集合時における
データベースの縮小を見る
a:1,2,5,6,7,9
b: 2,3,4,5
T = c: 1,2,7,8,9
d: 1,7,9
e: 2,7,9
{2,7,9}: a,c,d a:1,2,5,6,7,9
{1,7,9}: a,c,d
a:7,9 f: 2
a:2,5,6,7,9
a:7,9
b: 2,3,4,5
c: 7,9
2,7,8,9
1,2,7,8,9
c: 7,9
d: 7,9
{1,7}: a,c,d {1,9}:
a,c,d
{2,7}: a,c,e {2,9}:
a,c,e
{7,9}:a,c,d,e
2,7,9
e: 7,9
f: 2
{1}:a,c,d
{2}: a,b,c,e,f
φ : a,b,c,d,e,f
{7}:a,c,d,e
{9}: a,c,d,e
頻出集合の問題点
・ 面白い頻出集合を見つけようとすると、θを小さくする必要がある
大量の頻出集合が出てくる
・ 情報を失わずに、頻出集合的な、数の少ないものを
見つけるようにモデルを変えたい
111…1
1. 極大頻出集合:
他の頻出集合に含まれない頻出集合
2. 飽和集合:
出現集合が等しいものの中で極大なもの
000…0
極大頻出集合と飽和集合の例
・ 頻出集合を出現集合で分類
1,2,5,6,7,9
2,3,4,5
T = 1,2,7,8,9
1,7,9
2,7,9
2
頻出飽和集合
極大頻出集合
3つ以上に含まれるもの
{1}
{2}
{7}
{1,7}
{1,9}
{2,7}
{2,9}
{1,7,9}
{9}
{7,9}
{2,7,9}
極大頻出集合と飽和集合
極大頻出集合
・ 多項式時間で列挙できるかどうか、未解決
・ クリークと同じように枝刈りをすると、高速に列挙できる
・ 数が少ないがθによる解のぶれが大きい
飽和集合
・ 逆探索という探索手法で多項式時間列挙可能
・ 離散アルゴリズムと末広がり性を用いて、高速列挙可能
・ 出現の意味で情報の損失がない
・ ノイズが多いと出現集合が等しいものが少なくなり、
解の減少効率が悪くなる
両者とも、1つあたりほぼ定数時間、1秒間に1~10万個
飽和集合の列挙手法
・ 頻出集合列挙ベース
- 頻出集合列挙アルゴリズムをベースに、多少無駄な計算を
省く
- 飽和集合のよさが出ない。計算時間の改善も少ない
・ 保存 + 枝狩り
- 見つけた解を保存し、それを用いて無駄な分枝を刈る
- 計算速度はまあまあ
- 解保存のためにメモリを使用し、それがひとつのネック
・ 逆探索 + データベース縮約
- 計算効率が良い
- 解保存用のメモリが不要
飽和集合の隣接関係
・ 飽和集合から、添え字の大きい順に要素を抜いていく
・ どこかで出現集合が大きくなる
・ その出現集合の飽和集合を求める
・ こうして求めた飽和集合を、親とする (一意的に定まる)
・ 親の頻出度は必ず真に大きいので、親子関係は非巡回的
親子関係は有向根付き木を導出する
逆探索
親子関係は有向根付き木を導出する
この木を深さ優先探索すれば全ての解を見つけられる
・ 探索には、子供を見つけるアルゴリズムがあれば十分
・ 子供が1つあたり多項式時間で見つかれば、全体も多項式時間
(親に要素を1つ加えて極大をとった飽和集合が子供になる)
非巡回的な親子関係と、子供を見つける多項式時間アル
ゴリズムがあれば、なんでも多項式時間列挙ができる
親子関係の例
・ データベースの全ての
飽和集合とその親子関係
φ
2
1,2,5,6,7,9
2,3,4,5
T = 1,2,7,8,9
1,7,9
2,7,9
2
出現集合が隣接
親子関係
7,9
1,7,9
2,5
1,2,7,9
1,2,7,8,9
2,3,4,5
1,2,5,6,7,9
2,7,9
実験結果
・ 実データからとった、著名なベンチマーク問題でテスト
・ 項目数は 1万 ~ 100万
・ 属性数は 1000 ~ 1万
Pen. M 1GHz
256MB メモリ
データ種別
POS
クリック
Web閲覧
顧客
単語
項目数
51万
99万
7.7万
8.8万
6万
データサイズ
330万
800万
31万
90万
23万
出力数
460万
110万
53万
37万
100万
計算時間
80 秒
34 秒
3秒
3秒
6秒
単純なスキャンは1秒で100パターン程度
まとめ
・ データマイニングの定義と動機付け
(データから情報を自動的に吸い出す)
・ 自動学習 (データから機械的に知識を獲得)
・ 決定木 (メタヒューリスティックで解く)
・ サポートベクターマシン (線形計画で解く)
・ 頻出パターン (列挙で解く)
アソシエーションルール
データベースの比較