470 likes | 569 Views
データマイニング. 問題の動機付け 決定木 サポートベクターマシン アソシエーションルール クラスタリング 協調フィルタリング. データマイニングとは. • (巨大な)データセットから、ある種の規則性とか特徴的な部分を(大量に)取り出すこと • 統計的に顕著(優位)な部分を(複数)取り出す 例: • 百貨店の売り上げデータから、 年齢層と購買物品の相関が高いものを見つける • 新聞記事データベースから、共通の単語を多く使用している記事群を見つける. 最適化モデルとの違い. 最適化: データセットから、ある種の特徴を最適化する部分を見つけよう
E N D
データマイニング • 問題の動機付け • 決定木 • サポートベクターマシン • アソシエーションルール • クラスタリング • 協調フィルタリング
データマイニングとは • (巨大な)データセットから、ある種の規則性とか特徴的な部分を(大量に)取り出すこと •統計的に顕著(優位)な部分を(複数)取り出す 例: •百貨店の売り上げデータから、 年齢層と購買物品の相関が高いものを見つける •新聞記事データベースから、共通の単語を多く使用している記事群を見つける
最適化モデルとの違い 最適化: データセットから、ある種の特徴を最適化する部分を見つけよう データマイニング: データセットから、ある種の特徴を持つ部分を大量に見つけよう ある種のルールや知識を掘り出そう
自動分類 例) いくつかの属性を持つデータセットがあり、それらが2つに分類(正例と負例)されているとき、属性で分類を行うルールを作りたい さらに例) •年齢・収入・食費・住居費のデータセットから、 車を持っているかどうかを分類する (年齢がXX歳以上で(2×収入+食費)≧1000万なら、持ってる •新聞記事データベース(単語の集合)から、生活に関する記事とその他を分けたい •誕生日と血液型と今日の運勢から、運のいい人と悪い人を分類したい (みずがめ座でA型かおうし座でO型ならば運がいい)
自動分類を使った予測 •年齢・収入・食費・住居費のデータセットから、 車を持っているかどうかを自動的に推測したい •年齢・収入・食費・住居費・(車所持?)のデータセットを使って、どのような属性を持つと車を持っているのか、という分類ルールを得る •新しく年齢・収入・食費・住居費のデータが来たときに、ルールに当てはまるかどうかをチェックして、車を持っていそうかどうかを推測する
データ分類の例 •このデータベースを使って、 毒キノコ(強)とそうでないキノコを わけるルールを見つけたい 例えば、 「●&□ か 低 & ●でない」 「高 & □ 」は、毒キノコにもそうで ないキノコにも見られるので、 使えない •毒キノコに関するデータベースがあるとする
決定木 •分類の仕方のひとつ 例) •収入が700万以上か、収入が400万以上かつ食費が80万以下か、住居費が200万以上なら、車を持っている •家事という言葉を含むか、生活費と教育を含めば、生活に関する記事である •分類の仕方を絵で書くと、木になる
● ● ● × □ でない □ 低 高 毒 × 毒 低 高 × 毒 毒キノコの決定木 •「●&□ か 低 & ●でない」
良い決定木 •決定木は、全ての可能なデータを、論理式か不等式で再帰的に分割し、できた切片を分類している •切片に間違ったものが入っていなければいないほど、よく分類されている 最適な決定木を求める、という最適化問題を解きたい •しかし、分割を繰り返せば、必ず正確に分類できるけど、 -ルールが複雑すぎて困る -データの偏り、異常データに思いっきり引っ張られ、予測精度が悪くなる(オーバーフィッティング:絵参照) 単純なルールで、という条件を入れる
単純にするための制約 •単純なルールにするため、決定木に制約をつける •例えば、 -分割は 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% くらい向上するそうだ
現れるパターンからの分析 データベース •データベース構築と検索は、もうできるようになった (絞込みや、あいまい検索はまだ改良の余地があるけど) •より詳しくデータを解析するために、データの特徴を捉えたい 各種統計量(データベースの大きさ、密度、項目に現れる属性値の総計、分布)よりも、深い解析がしたい 組合せ(パターン)的な構造に注目 (どういう組合せ(パターン)が どれくらい入っているか) •組合せ・パターンの個数は指数なの で、全てを尽くすのは効率的でない 多く現れるものだけに注目 ATGCGCCGTA TAGCGGGTGG TTCGCGTTAG GGATATAAAT GCGCCAAATA ATAATGTATTA TTGAAGGGCG ACAGTCTCTCA ATAAGCGGCT 実験結果 ゲノム情報
頻出パターンの列挙 データベース •データベースの中に多く現れるパターンを全て見つける問題を 頻出パターン列挙(あるいは発見、マイニング)問題という データベース: トランザクション、ツリー、グラフ、多次元ベクトル パターン: 部分集合、木、パス・サイクル、グラフ、図形 頻出する パターンを抽出 •実験1● ,実験3 ▲ •実験2● ,実験4● •実験2●, 実験3 ▲, 実験4● •実験2▲,実験3 ▲ . . . ATGCGCCGTA TAGCGGGTGG TTCGCGTTAG GGATATAAAT GCGCCAAATA ATAATGTATTA TTGAAGGGCG ACAGTCTCTCA ATAAGCGGCT •ATGCAT •CCCGGGTAA •GGCGTTA •ATAAGGG . . . 実験結果 ゲノム情報
多く現れる 頻出する 多く現れるものを見つけるために、多く現れるとは何か、を決める •データベースが項目の集まりだとする •パターンに対して、そのパターンを含む項目を出現という •出現の数(頻出度)が閾値より大きければ、良く現れるとする (含む、の定義は、集合で行ったり、文字列の 包含、グラフの埋め込みなどで定義する) パターン XYZ {A,C,D} 項目 AXccYddZf {A,B,C,D,E}
集合の出現と頻出度 {1,2}の出現集合 ={ {1,2,5,6,7,9}, {1,2,7,8,9} } 1,2,5,6,7,9 2,3,4,5 1,2,7,8,9 1,7,9 2,7,9 2 集合Kに対して: Kの出現:Kを含むTのトランザクション Kの出現集合 I(K): Kを含むTのトランザクション全ての集合 Kの頻出度 frq(K): Kの出現集合の大きさ T= {2,7,9}の出現集合 ={ {1,2,5,6,7,9}, {1,2,7,8,9}, {2,7,9} }
頻出集合 1,2,5,6,7,9 2,3,4,5 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 の3つ以上のトランザクションに含まれる集合 T= 与えられたデータベースT と定数θに対して、T の 頻出集合を列挙する問題を頻出集合列挙問題と言う (頻出パターン列挙問題も同じ)
トランザクションデータベース 1,2,5,6,7 2,3,4,5 1,2,7,8,9 1,7,9 2,7,9 2 T= パターンとして、集合を考える トランザクションデータベース: 各トランザクション Tがアイテム集合 Eの部分集合 になっているようなデータベース つまり、 T,∀T∈T,T⊆ E •POSデータ(各項目が、客1人の購入品目) • アンケートのデータ(1人がチェックした項目) •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 1,2,3,4 1,2,3 1,2,4 1,3,4 2,3,4 1,3 1,4 2,3 2,4 3,4 1,2 1 3 4 2 φ 頻出パターンの単調性 • 頻出パターンの部分パターンは頻出 単調性が成り立つ バックトラック法を適用できる 頻出集合であるかどうかのチェック はO(||T||)時間、最高 n方向に登る 1つあたり O(||T||n)時間 多項式時間ではあるが、 ||T|| も nも大きすぎる
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 T= 列挙例 {2,7,9}: a,c,e {1,7,9}: a,c,d • このデータベースで 頻出集合を列挙してみる {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 {7}:a,c,d,e {9}: a,c,d,e {2}: a,b,c,e,f {1}:a,c,d φ : a,b,c,d,e,f
末広がり性の利用 • パターン Xの出現集合を Tとする X+e の出現は Xを含む(= Xの出現) Tの中で e を含むもの X+e の出現集合 •出現集合を更新すれば、 データ全体を見なくて良い •反復が深くなると、見るべき出現集合は小さくなる 反復が深くなるにつれ、計算時間は短くなる
・・・ 末広がり性 計算時間長 • バックトラックは、各反復で複数の再帰呼び出しをする 計算木は、下に行くほど大きくなる 計算時間を支配するのは一番下の数レベル 計算時間短 ほぼ全ての反復が短時間で終了 (1秒間におよそ100万個) 多くの列挙アルゴリズムが似たような再帰構造を持つので、 下のレベルの仕事を上のレベルがやれば、同様の改良ができる
サポートが大きい場合も •θが大きいと、下のレベルでも多くの出現を見ることになる 末広がり性による高速化はいまひとつ • データベースの縮約により、下のレベルの高速化をはかる (1)前回追加したアイテムより小さいアイテムは消す (2) 現在の出現集合からできるデータベースの中で、頻出になっていないアイテムは消去する (再帰呼び出しの中で加えられることが無いから) (3) まったく同一のトランザクションは、1つにまとめる • 実データだと、下のほうのレベルでは だいたい大きさが定数になる θが小さいときと速度の大きな差はない
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 T= データの縮小 {2,7,9}: a,c,e {1,7,9}: a,c,d a:1,2,5,6,7,9 b: 2,3,4,5 c: 1,2,7,8,9 e: 2,7,9 f: 2 a:7,9 b: c: 7,9 e: 7,9 f: a:2,5,6,7,9 c: 2,7,8,9 d: 7,9 a:7,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 {7}:a,c,d,e {9}: a,c,d,e {2}: a,b,c,e,f {1}:a,c,d φ : a,b,c,d,e,f
111…1 000…0 頻出集合の問題点 • 面白い頻出集合を見つけようとすると、θを小さくする必要がある 大量の頻出集合が出てくる • 情報を失わずに、頻出集合的な、数の少ないものを 見つけるようにモデルを変えたい 1. 極大頻出集合: 他の頻出集合に含まれない頻出集合 2. 飽和集合: 出現集合が等しいものの中で極大なもの
3つ以上に含まれるもの {1} {2} {7} {9} {1,7} {1,9} {2,7}{2,9} {7,9} {1,7,9} {2,7,9} 極大頻出集合と飽和集合の例 1,2,5,6,7,9 2,3,4,5 1,2,7,8,9 1,7,9 2,7,9 2 T= •頻出集合を出現集合で分類 頻出飽和集合 極大頻出集合
極大頻出集合 極大頻出集合と飽和集合 飽和集合 •逆探索という探索手法で多項式時間列挙可能 •離散アルゴリズムと末広がり性を用いて、高速列挙可能 •出現の意味で情報の損失がない •ノイズが多いと出現集合が等しいものが少なくなり、 解の減少効率が悪くなる •多項式時間で列挙できるかどうか、未解決 •クリークと同じように枝刈りをすると、高速に列挙できる •数が少ないがθによる解のぶれが大きい 両者とも、1つあたりほぼ定数時間、1秒間に1~10万個
飽和集合の列挙手法 •頻出集合列挙ベース - 頻出集合列挙アルゴリズムをベースに、多少無駄な計算を省く - 飽和集合のよさが出ない。計算時間の改善も少ない •保存 + 枝狩り - 見つけた解を保存し、それを用いて無駄な分枝を刈る - 計算速度はまあまあ - 解保存のためにメモリを使用し、それがひとつのネック •逆探索 + データベース縮約 - 計算効率が良い - 解保存用のメモリが不要
飽和集合の隣接関係 •飽和集合から、添え字の大きい順に要素を抜いていく •どこかで出現集合が大きくなる •その出現集合の飽和集合を求める •こうして求めた飽和集合を、親とする (一意的に定まる) •親の頻出度は必ず真に大きいので、親子関係は非巡回的 親子関係は有向根付き木を導出する
逆探索 親子関係は有向根付き木を導出する この木を深さ優先探索すれば全ての解を見つけられる • 探索には、子供を見つけるアルゴリズムがあれば十分 • 子供が1つあたり多項式時間で見つかれば、全体も多項式時間 (親に要素を1つ加えて極大をとった飽和集合が子供になる) 非巡回的な親子関係と、子供を見つける多項式時間アルゴリズムがあれば、なんでも多項式時間列挙ができる
φ 2 7,9 1,7,9 2,5 2,7,9 1,2,7,9 2,3,4,5 1,2,7,8,9 1,2,5,6,7,9 親子関係の例 1,2,5,6,7,9 2,3,4,5 1,2,7,8,9 1,7,9 2,7,9 2 T= • データベースの全ての 飽和集合とその親子関係 出現集合が隣接 親子関係
Pen. M 1GHz 256MB メモリ 実験結果 •実データからとった、著名なベンチマーク問題でテスト •項目数は 1万 ~ 100万 •属性数は 1000 ~ 1万 単純なスキャンは1秒で100パターン程度
まとめ •データマイニングの定義と動機付け (データから情報を自動的に吸い出す) •自動学習 (データから機械的に知識を獲得) •決定木 (メタヒューリスティックで解く) •サポートベクターマシン (線形計画で解く) •頻出パターン (列挙で解く) アソシエーションルール データベースの比較