データマイニング • • • • • • 問題の動機付け 決定木 サポートベクターマシン アソシエーションルール クラスタリング 協調フィルタリング データマイニングとは • (巨大な)データセットから、ある種の規則性とか特徴的な部 分を(大量に)取り出すこと • 統計的に顕著(優位)な部分を(複数)取り出す 例: • 百貨店の売り上げデータから、 年齢層と購買物品の相関が高いものを見つける • 新聞記事データベースから、共通の単語を多く使用している 記事群を見つける 最適化モデルとの違い 最適化: データセットから、ある種の特徴を最適化する部分を見つ けよう データマイニング: データセットから、ある種の特徴を持つ部分を大量に見つ けよう ある種のルールや知識を掘り出そう 自動分類 例) いくつかの属性を持つデータセットがあり、それらが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,e {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,e 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パターン程度 まとめ • データマイニングの定義と動機付け (データから情報を自動的に吸い出す) • 自動学習 (データから機械的に知識を獲得) • 決定木 (メタヒューリスティックで解く) • サポートベクターマシン (線形計画で解く) • 頻出パターン (列挙で解く) アソシエーションルール データベースの比較
© Copyright 2024 ExpyDoc