データマイニング & パターンマイニング
description
Transcript of データマイニング & パターンマイニング
データマイニング &パターンマイニング
目次相関ルールApriori algorithm
頻出アイテム集合を探すsubset 関数Apriori-Gen 関数
相関ルールを探すFP-growth algorithmさまざまな手法列パタンのマイニング :PrefixSpan
相関ルールとは
「目玉商品 A と日用品 B を購入した顧客は、同時に高級品 C も高い確率で購入する」
• A,B,C のセット商品を発売する• 顧客の便利性を考えて、商品の配置を近づける
{ 目玉商品 A 、日用品 B} {⇒ 高級品 C} と表現できる
{X} {Y}⇒
定義{X} {⇒ Y} 相関ルール
X, Y X: 前提部 , Y: 結論部
I={i1,i2,…,im} アイテム集合 , ik, k=1,.,m はアイテム、例えば個別の商品
T トランザクション ( 例えば買い物かごの中身 ) =アイテムの集合
support(X)支持度 : support アイテム集合 X 含む T の全 T に対する割合
conf(X⇒Y)確信度 : confidence X を含む T のうち、 Y を含む T の全 T に対する割合 =support(XUY)/support(X)
価値のある相関ルールを求める
M このアイテムの中からkこを選ぶ方法 =
kこのアイテムの各々が前提に来るか、結論に来るかのわけ方= 2k
全部のアイテムが前提に集まる場合と、結論に集まる場合は、ルールにならないので排除
2k -2
個のルールが存在する
種類のアイテムで
m
kk
km
m
2)22(
km
価値のある相関ルールを求める
アイテムが 10 種類の場合でもルールは約57,000 もある
価値のある相関ルールはわずかだけ
価値のある相関ルールとは確信度 conf が高い支持度 support が高い
個のルールが存在する
種類のアイテムで
m
kk
km
m
2)22(
アプリオリアルゴリズム(Agrawal 1994, VLDB94)
• 最小確信度、最小サポート (min support)を与えて確信度、サポートがそれ以上の相関ルールを発見する
support(XUY)>αsupport(XUY)/support(X)=conf(X Y) >β⇒を満たす相関ルール X⇒Y を取り出すのが目的
効率よく探し出すために
アイテム集合のサポートは単調減であることを使う。 頻出アイテム集合とは、最小サポート以上のサポートを持つアイテム集合
この背反を取ると
support(XUY) と support(X) が必要。 support(XUY) は最小サポート以上であるので、 XUY の部分集合である X の
サポートも最小サポート以上( X と Y はともに条件なので、 XUY は、 X 、 Y 単独よりも厳しい条件)
最小サポート以上の頻出アイテム集合のサポートを求めておけばすべての相関ルールの確信度を求めることができる
)support()support( JIJI ならば
{ A,B }が頻出アイテム集合でない ↓{ A,B,C }も頻出アイテム集合ではない
{ A,B,C }が頻出アイテム集合⇒{ A,B }も頻出アイテム集合
アルゴリズム1. support(XUY)>α を満たす頻出アイテム集合をす
べて探し出し、サポートを求める
2. support(XUY)/support(X)>βを満たす相関ルールを探し出す
(1) が求まれば、それを使うと (2) は簡単どうやって (1) を効率よくもとめるか
Apriori algorithmk アイテム集合 k個のアイテムを持つアイテム集合
Lk 頻出kアイテム集合(これらは最小サポート以上を持つ)以下の2つのフィールドからなる : (1) アイテム集合、 (2) support count
Ck 頻出アイテム集合の可能性のある k アイテム集合 : 以下の2つのフィールドからなる (1) アイテム集合 (2) support count
C’k TIDs(Transaction ID) の transaction から生成された k アイテム集合の候補の集合
頻出アイテム集合を探し出す
• 要素数の少ないサポートから求めていき、最小サポートより少ない集合を含めるものは計算しない
{ A,B }が頻出アイテム集合でない⇒{ A,B,C }も頻出アイテム集合ではない
1.データベースをスキャンし Ck 中の各サポートを計算する
2. Ck 中の最小サポートを満足する部分を Lk とする
3. Lk から Ck+1 を生成する
Apriori algorithmL1={ 頻出アイテム集合 }for ( k=2; Lk-1≠Ø; k++) do { Ck= apriori_gen(Lk-1) ; // New candidates
for (all transactions t in D )do{ Ct = subset(Ck , t) // Candidates contained
in t; for (all candidates c in Ct) do
{c.count++} }; Lk ={c in Ck | c.count≥ minsup} }Answer ∪k Lk}
Apriori-Gen 関数
結合フェーズLk 中から最後の要素だけが異なる二つのアイ
テム集合を結合して要素数 k+1 の候補アイテム集合を作る
枝狩りフェーズ結合フェーズで作った候補アイテム集合に対
し、要素数 k の部分集合が Lk に含まれていないような候補を除去する
Transaction data の例
データベース D
TID item
00001 A,C,D
00002 B,C,E
00003 A,B,C,E
00004 B,E
頻出アイテム集合を計算する例min support =2
C 1
アイテム集合
{A}{B}{C}{D}{E}
L1アイテム集合
カウント
{A} 2{ B}
3
{ C}
3
{ E}
3
subset 関数&
minsupport>=2 のものを選択
頻出アイテム集合の候補
頻出アイテム集合
Apriori-Gen 関数
C2
アイテム集合
{A,B}{A,C}{A,E}{B,C}{B,E}{C,E}
頻出アイテム集合の候補
頻出アイテム集合を計算する例つづき
C3
アイテム集合
{ B,C,E}
L2アイテム集合
カウント
{A,C} 2{ B,C}
2
{ B,E}
3
{ C,E}
2
C2アイテム集合
{A,B}{A,C}{A,E}{B,C}{B,E}{C,E}
頻出アイテム集合の候補
頻出アイテム集合
Apriori-Gen 関数
頻出アイテム集合の候補
subset関数
L3
アイテム集合 カウント
{ B,C,E}
2
頻出アイテム集合
subset 関数&
minsupport>=2 のものを選択 ここだけ
が異なる
要素数 3 の部分集合{A,D,E}が含まれていないので、{A,C,D,E} は排除
{A,B,C}
{A,B,D}
{A,C,D}
{A,C,E}
{B,C,D}
頻出アイテム集合 C3
{A,B,C,D}
{A,C,D,E}
頻出アイテム集合の候補 L4
Apriori_Gen (Lk){ Ck +1= φ;foreach p,q in Lk such that ( p.item1=q.item1,…, p.itemk-1=q.itemk-1, p.itemk ≠ q.itemk)
{c=p U q.itemk; Ck+1=Ck+1U{c}}
//prunefor (all itemsets c in Ck+1 )do for(all k subsets s of c )do
{if s not in Lk then delete c from Ck+1}
}return Ck+1}
subset 関数
トランザクション t に含まれる候補アイテム集合を見つけ出す
例 t={A,B,C,E} SUBSET(C2,t) = {{A,B}1 、 {A,C}2 、 {A,E}1 、
{B,C}2 、 {B,E}3 、 {C,E}2} (数字は出現回数)
が subset 関数で生成されるが、そのうち min support=2 以上のものだけを選ぶと {{A,C} 、 {B,C} 、 {B,E} 、 {C,E}}
相関ルールの導出(枝刈り1)
)support()~support(~ aaaa について
)support()support())(conf(
alala
))(conf())~(~conf( alaala
)~support()support())~(~conf(
alala
るも最小確信度以上であばが最小確信度以上なら
))(conf())~(~conf(
alaala
}){},,conf({}),{},conf({
},,,{},,{
},{~
DCBADCBA
DCBAlCBAa
BAa
相関ルールの導出:枝刈り 2
るも最小確信度未満であばが最小確信度未満なら
))conf(()~)~conf((
cclccl
ccalcalc
~~~ とする、
るも最小確信度以上であばが最小確信度以上なら
))(conf())~(~conf(
alaala
対偶をとる
• {A,B,C} {⇒ D} と {A,B,D} {⇒ C} のどちらか一方でも最小確信度未満ならば
• {A,B} {⇒ C,D} も最小確信度未満である
}),{},conf({}){},,conf({
},,,{}{~
},{
DCBADCBA
DCBAlDc
DCc
FP-growth algorithm
• Apriori algorithm の効率を大きく改善するアルゴリズム (J.Han, 1999 SIGMOD)
I = {a1; a2; : : :; am} be a set of itemsa transaction database DB = {T1; T2; : :Tn} where Ti (i =1,..,n) is a transaction which
contains a set of items in I. The support1 (or occurrence frequency) of a
pattern A, which is a set of items is the number of transactions containing A in DB.
A is a frequent pattern if A's support is no less than a predefined minimum support threshold, ξ.
FP-tree の定義
• 要素– one root “null”– a set of item prefix subtrees as the children of the root– a frequent-item header table
• Node in the item prefix subtree consists of– (1)item-name, (2)count, (3)node-link
• frequent-item header table con-sists of– (1) item-name and (2) head of node-link
例
Item name CountItem link
a:3 ----->
FP-tree construction algorithm
Step1:DB を scan し、 ξ 以上の頻度を持つ frequent item F を集め、頻度の降順にソート。
Step2:DB の格要素 (transaction) において、それに含まれる item を頻度の降順にソートし、
Step3: for( each transaction: L) do { root の null ノードからスタートして、以下
のように root にぶら下がる木を作る。ただし、 T=root
する ; L=[p|P], p は先頭の要素、 P は残りのリスト ; insert_tree([p|P],T) }
insert_tree([p|P],T){If T has a child N such that N.item-name= p.item-name, then increment N's count by 1; else { create a new node N, and let its count be 1; its parent link be linked to T ; its node-link be linked to the nodes with the
same item-name via the node-link structure. } If P is nonempty, then call insert tree(P;N) recursively}
FP-Tree の木の高さは、ひとつのtransaction に含まれる item の個数の最大値
Root から leaf までの枝( path) において、item は頻度の降順に並んでいる。
FP-Tree からのルール導出
• Property 3.1 (Node-link property) For any frequent item ai, all the possible frequent patterns that contain ai can be obtained by following ai's node-links,starting from ai's head in the FP-tree header.
パタンマイニング関数 :mine
Header table の中で、一番頻度の低い(つまり、一番下の) item から順にパターンを探す。
(p:3)の上に来るパタンは p の条件付パタンベースと呼ばれ、以下の通り。
{<f:4; c:3; a:3;m:2>| p}, {<c:1; b:1>| p}
pの上に共通に来るパタンはcのみなので、抽出されたパタンは (cp:3) だけ。
つづきmの上には、 <f:4; c:3; a:3>, <f:4; c:3; a:3; b:1> が来るが、共通するパ
タンは < f:3; c:3; a:3> だけ。そこで、 mine(< f:3; c:3; a:3>|m) を実行す
ると (am:3),(cm:3),(fm:3) が得られる。次に、 mine(< f:3; c:3>|am) を実行すると、
(cam:3),(fam:3) が得られる。さらに (<f:3>|cam) を実行すると、
(fcam:3) が得られる。 以下他のパタンについても同様。
Conditional FP-tree は、条件の item (例えば 1番上の例だと p)の countに合わせる。
パタン・マイニング・アルゴリズム• Input: FP-tree constructed based on Algorithm 1,using DB and a
minimum support threshold ξ.• Output: The complete set of frequent patterns.• Method: Call FP-growth (FP-tree ; null).Procedure FP-growth (Tree 、 α ){
if Tree contains a single path Pthen for each combination (denoted as β ) of the nodes in
the path P do
{ generate pattern β∪α [ with support =minimum support of
nodes in β] }else for each ai in the header of Tree do
{ generate pattern β= ai ∪α [ with support = ai :support}; construct 's conditional pattern base; β‘s conditional FP-tree : Treeβ; if Tree β≠Ø then call FP-growth (Treeβ, β) }}
その他
• 分類階層つき相関ルール• 数値属性を1個持つ相関ルール• 数値属性を2個持つ相関ルール• 並列アルゴリズム• 視覚化手法
抽出対象のデータは要素の列の集合要素は item の集合min_support 以上の出現頻度を持つ部分列
をすべて探し出すこと
Sequential pattern mining列パタンのマイニング
対象のデータ I={i1,i2,….,in}, ij は item Sequence は順序付きの item 集合の列 Sequence:S=<s1,s2,…,sl>, Si=(x1,x2,…,xm) xi は I の要素(= item) 。 1 個しか item
を含まない (x) は x と略記 Sequence : S の長さ: S が含む item 数
length(<(a)(b)>)=length(<ab>)=2, length(<(a b)>)=2 β(=b1,..,bm) is super-sequence of α(=a1,…,an) (逆に α
は β の subsequence) とは 次の条件を満たす1≤j1≤j2≤…. ≤ jn≤m なるサフィックス列が存在すること。
Sequence database: <sid,s> の集合。 sid は seqience:s の名前
l i1for ISi要素:
m21 bjan,.....,bja2bja1 かつ
Sequence database の例 :S
Sequence id Sequence
10 <a(abc)(ac)d(cf)>
20 <(ad)c(bc)(ae)>
30 <(ef)(ab)(df)cb>
40 <eg(af)abc>
Prefix, projection and postfix α=<e1,e2,..en>, β=<e1’,e2’,..,em’>, m≤n 次の条件を満たすとき、 β は α の prefix
(1)ei’=ei for (i≤m-1) (2) (3)em-e’m の要素は e’m の要素より辞書順で後のも
の β を α の subsequence とするとき、 α の
subsequence α’ が α の projection であるとは以下のように定義される α’ は prefix β を持つ α’ の super-sequence であり、 prefixβ を持ち、かつ α の
subsequence であるものは存在しない。( α’ は上記の条件を持たす最大の列
mm ee '
Prefix, projection and postfix α’=<e1,e2,..,e k > は β=< e1,e2,..,em-1,e’m> に対する α
の projection. ただし (m≤ k ) このとき列 γ=<e’’m,em+1,…,e k > は β に対する α の
postfix ただし、 e’m + e’’m = em 。 つまり α = βγ 例: α=< (a) (b) (a b c) (f) > β=< (a) (b) (a b )> γ=<(c) (f) > 例: <a>,<aa>,<a(ab)>,<a(abc)> は <a(abc)(ac)d(cf)> の prefix だ
が、 <ab> や <a(bc)> は prefix ではない?? prefix <ab> =<(a)(b)> の postfix は <(_c) )(ac)d(cf)> 。 2項目の
(abc) は集合だから、いきなり <ab> を prefix にしてもよい。
mm ee '
PrefixSpan の動作sequence data base :S の例を用いて
ただし、 min_support=2
Step 1: length=1 の列パタンを全て求める<a>:a, <b>:4, <c>:4, <d>:3, <e>:3, <f>:3
Step 2: 列パタンの分割(辞書順に含むアイテムを拡大していくように)a 以外は持たないもの、a b 以外は持たないもの、a b c 以外は持たないもの、……
Step 3:列パタンの部分集合を数え上げる
これは、 step 2 の各結果に対して、 projection を数え上げ、その結果の列パタンに同様の数え上げを再帰的に繰り返す。
Step 3 のSにおける動作例<a> に対する projection のデータベース
は<a(abc)(ac)d(cf)> <( abc)(ac)d(cf)> (1)<(ad)c(bc)(ae)> <(_d)c(bc)(ae)> (2)<(ef)(ab)(df)cb> <(_b)(df)cb> (3)<eg(af)cbc> <(_f)cbc> (4)
prefix<a> を含む length=2 の列パタン(min_support=2) は上記の結果のprojection たちを調べると
<aa>:2 (1),(2), <ab>:4 (1)(2)(3)(4)<(ab)>:2 (1)(3), <ac>:4 (1)(2)(3)(4)<ad>:2 (1)(3), <af>:2 (1)(3)
つづき Prefix <aa> を持つ postfix subsequence(<aa>-projected
database) は (1) から得られる < (_bc)(ac)d(cf)> だけ。よって、 min_support 以上の頻出パタンはここからは生成されない。よって、このパタンは修了
<ab>-projected database からは <(_c) (ac)d(cf)> (1) , <(_c)a> (1)(2), <c> (1)-(4)
この結果を再帰的に調べると <(_c)>:2, <(_c)a>:2, <a>:2, <c>:3 ( 全部書くと <a(bc)>, <a(bc)a>, <aba>, <abc>)
<(ab)>-projected database からは <(_c) (ac)d(cf)>, <(df)cb> この結果を再帰的に調べると <(ab)c>, <(ab)d>, <(ab)f>,
<(ab)dc> 以下同様に全ての列パタンを再帰的に調
べ、 min_support 以上の列パタンを数え上げる。
例:Sから PrefixSpan で得た列パタンPrefix Projected postfix 列パタン
<a> <(abc)(ac)d(cf)>, <(_d)c(bc)(ae)>,<(_b)(df)cb>,<(_f)cbc>
<a>,<aa>,<ab>,<a(bc)>,<a(bc)a>,<aba>,<abc>,<(ab)>,<(ab)c>,<(ab)d>,<(ab)f>,<(ab)dc>,<ac>,<aca>,<acb>,<acc>,<ad>,<adc>,<af>
<b> <(_c)(ac)d(cf)>, <(_c)(ae)>, <(df)cb>, <c>,
<b>, <ba>, <bc>, <(bc)>, <(bc)a>, <bd>, <bdc>, <bf>
<c> <(ac)d(cf)>, <(bc)(ae)>, <b>, <bc>
<c>, <ca>, <cb>, <cc>,
<d> <(cf)>, <c(bc)(ae)>,<(_f)cb> <d>, <db>, <dc>, <dcb>
<e> <(_f)(ab)(df)cb>, <(af)cbc> <e>, <ea>, <eab>, <eac>, <eacb>, <eb>, <ebc>, <ec>, <ecb>, <ef>, <efb>,<efc>,<efcb>
<f> <(ab)(df)cb>, <cbc> <f>, <fb>, <fbc>, <fc>, <fcb>
PrefixSpan の効率化 Apriori property の利用
例: <ac> は列パタン ( すなわち min_support 以上)だが、 <ad> は列パタンでない( min_support 未満)の場合は、両者を含む <acd> およびその super-sequence は列パタンにならないことは明白なので、調べる必要はない。
Pointer 利用によるメモリの効率的使用例えば、 <a(abc)(ac)d(cf)> の処理では、その部分列
が何回も処理される。 例えば、 <a> の projection: <(abc)(ac)d(cf)>①
と、 <ab> の projection :② <(_c) )(ac)d(cf)> 。これらが別々にメインメモリに格納されることを防ぐために、 projection database には、s①=2 (offset), s =4(offset)② を記憶しておけば、 <a(abc)(ac)d(cf)>は1箇所で記憶しておくだけで良い。