Rule法の出力の中身とその視覚化について確認します。以下はRmdファイルです。こちらなどを参考にすれば、自由にhtml文書化・epub化できます(が、それが面倒な場合には、kindleで→こちら)メモ1行に1回の買い物アイテムセットがタブ区切りで入っているテキストファイルを読み込んでarulesの買い物情報オブジェクト(transactionsオブジェクト)を作る。Rule法をRでいじってみる========================================================スーパーマーケットでの買い物を考えてみよう。色んな人が来ては、色んなアイテムを買っていく。そのときに何を何と一緒に買うかには、それなりの意味が込められている。「ジャガイモと人参と玉ねぎとカレールー」という組合せとか、「食パンと牛乳とインスタントコーヒーとオレンジ」とか。Wikipediaはhttp://en.wikipedia.org/wiki/Association_rule_learning。買い物を行、アイテムを列とした{0,1}の行列がデータである。アイテムの部分集合が2個あって、$X=\{x_1,x_2,...,x_{nx}\},Y=\{y_1,y_2,...,y_{ny}\}$とする。今、Xを買っているときには、必ずYも買っているとする。そのとき、"Xという部分集合を買うならば、Yという部分集合も買う"と言えるが、このようなXとYの関係を見つけ、それを「ルール」と呼ぶ。LHS)と呼び、Yをconsequent(right-hand-side,RHS)と呼ぶ。簡単な例でやってみよう。matrix(c(1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,1),byrow=TRUE,6,4)D```行が買い物、列がアイテムである。第2,3列の両方が1になっているのは、第4行と第6行である。その第4,6行では、第2,3列のアイテム以外では、そろって第4列のアイテムが買われている。したがって、X={第2アイテム,第3アイテム}を買うならば、Y={第4アイテム}は必ず一緒に買われている、と読める。したがって、LHSをX={第2アイテム,第3アイテム}とし、RHSをY={第4アイテム}とするルールが見つかったことになる。実際のルールの検出には、Xなら「必ず」Yというところに少し緩みを入れたりもするが、原則はこのような感じである。お勉強はひとまず横に置き、ひとまずRでいじってみよう。arulesという基本パッケージもインストールされるはずlibrary(arulesViz)```Wiki記事にもあるように、ルールの検出アルゴリズムは複数ある。searchそのうちの、Aprioriアルゴリズム。read.transactions("data1.txt",sep="\t",format="basket")```のようにして読み込む。最後のformat="basket"は、1行が1回の買い物に相当し、アイテムを並べている、というファイル形式である、ということを示す引数である。ルールを引きだす〜Aprioriアルゴリズム〜基本的なアルゴリズム"Aprioriアルゴリズム"を使ってルールを引き出してみる。confidence=0.5))rules```5668個のルールが見出されたことがわかる。このrulesの中身を調べてみる。rulesの主な出力は、169個のアイテムの部分集合の束。```{r}str(rules)str(rules@lhs)```このrules@lhs@dataが169行5668列であるから、各列がルールで、各列は個々のルールの構成アイテムを表していることがわかる。Y"のXに当たるアイテムのリストである。```{r}rules@lhs@data[1:10,1:20]```同様にY(RHS)のは```{r}rules@rhs@data[1:30,1:20]```に格納されている。ルールを構成するアイテム名を呼び出すには以下のようにする。ルールの重み〜サポートとコンフィデンスとリフト〜たくさんの買い物で繰り返し認められるルールは信用性が高いだろう。それを定量化するのがサポートである。全部で$n$回分の買い物をしたときに、あるルールのLHS,Xが$n_x$回の買い物に登場したのなら、サポートは$\frac{n_x}{n}$となる。一つの指標がコンフィデンスである。$n_x$回登場したXに対して、いつも必ずYが買われるならばコンフィデンスは1。ある割合で買われるなら、その割合がコンフィデンスである。Y)}{supp(X)}\\\end{equation}$$また、もう一つの指標がリフトである。supp(Y)}$$Rに話を戻せば、これらは、出力rulesにはその値が付いてきている。```{r}rules@quality[1,]```たくさんのルールができたが、ルールに何度も登場するアイテムと登場しないアイテムとがある。各アイテムが、LHS、RHSに何回登場したかを数えてみる。RHSlength(which(n.RHS>0))```RHSに現れるアイテム数はかなり少ないことがわかる。ルールの指標の分布を視覚化する全ルールをそのサポートとコンフィデンスとリフトの値によって、どんなルールが見つかったかをプロットする。サポートを横軸、コンフィデンスを縦軸、リフトで明暗を分けている。アイテムの登場パターンを視覚化するLHSとRHSに現れる様子を二次元表示する。表示の指標はリフトとし、それを濃淡で表すことにする。すべてのルールがプリントアウトされてしまうのだが...そこは適当に無視し欲しい。measure="lift",echo=FALSE)```ルールの数が多いと、一部の描図のために時間がかかるので、confidence値の高い方に限定しておく。measure="lift")```アイテムを適当に並べ替えて、シグナルがかたまるようにする。control=list(reorder=TRUE))```2つの指標を反映させる異にする。ルールをグループ分けして視覚化する対象は全ルールに戻して実施する。オオマカニ言うと、LHSの方はたくさんのアイテムが採用され、多様性が高いのに対して、RHSの方がアイテム数が限定している。ルールをグループ分けするなら、LHSの方をグループ分けしたい。色々なアイテムで構成される部分集合がたくさんあるわけであるが、それらを、共通するアイテムでLHSをグループにしてやる方法が以下のプロットである。「少なくともx1を買うならば、Yを買う」という意味になっている。円の大きさがサポートを、色具合がliftを表している。特定のルールについてグラフ表示するアイテム間がルールによってどのように結びついているかをグラフオブジェクトで表示してみる。複雑な関係の視覚化方法である。したがって、ルール数は少なくしておく必要がある。以下では、ランダムに10ルールを選んで実施している。control=list(type="items"))```インターラクティブに動かせるプロット。interactive=TRUE)```Graphvizにつないで、ちょっと豪華にプロット。type="items"))```その他。一つのプロットがルール集の中でどのような意味合いになるのかを視覚化する。適当にルールを選んでプロットする。Eclatアルゴリズムの出力とその視覚化eclatアルゴリズムはaprioriアルゴリズムが幅優先探索であるのに対して、深さ優先探索アルゴリズムである。「併せて買われるアイテムの部分集合」を基準に照らして取り出す手法である。0.02))itemsets```122ルールが見出されたことがわかる。```{r}str(itemsets)dim(itemsets@items@data)```これにより、行にアイテム、列にルールという行列のありかがわかる。中味を覗けば、0,1(0は.、1は|)の行列であるとわかる。```{r}head(itemsets@items@data)```これをグラフオブジェクトでプロットする。円がルールを表し、その大きさがサポートの強さを表している。ルールにはアイテムが帰属しているので、アイテムからの矢印が描かれている。アイテムは一度しか描かれないので、同じアイテムを含むルール同士は近い位置に配置されることとなる。全ルールを視覚化するとこのようになる。method="graph")```40個のルールを適当に選んで描いてみると以下のようになる。GWAS/GWASメタアナリシスとその周辺解析用のアプリケーションへのリンク複合遺伝性疾患とは----------News----------20万アクセス2008/07/2040万アクセス2010/09/12-------------------------はてなブログをはじめよう!ryamada22さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。