R でデータマイニング
 ∼サンプリングデータのケース∼




      Tokyo.R #24
    @kenchan0130_aki
自己紹介
某理科系大学院生

専攻は確率過程、信用リスク
            ⇨ テキストマイニング?

寝ることが趣味

働いたら負け

最近の原動力  ⇨
自己紹介
某理科系大学院生

専攻は確率過程、信用リスク
            ⇨ テキストマイニング?

寝ることが趣味

働いたら負け

最近の原動力  ⇨
Data Mining with R
 Learning with Case Studies
       Luis Torgo(2010)


• 導入


• 藻類の予測


• 株式市場のリターンの予測


• 不正行為の検知


• マクロアレイの分類
Data Mining with R
    Learning with Case Studies
           Luis Torgo(2010)


• 導入


• 藻類の予測


• 株式市場のリターンの予測        の 機会
       た次      ま


• 不正行為の検知    の 機会
    た次 ま


•   マクロアレイの分類機会
          次の
       また
本日の目標

私も初心者です!一緒に勉強しましょう

ここにはデータマイニングのプロが多くいらっ

しゃる

− 分からないことはお聞きしてしまおう!
データマイニング

 データマイニングとは、統計学、パターン認識、人工
知能等のデータ解析の技法を大量のデータに網羅的に適
用することで知識を取り出す技術。
  通 常 の デー タ の 扱 い 方 か ら は 想 像 が 及 び に く い 、
ヒューリスティクな知識獲得が可能であるという期待を
含意していることが多い。

                                   引用:Wikipedia
今回はすごい技術教えてくれるんですか?
いいえ
データをどう見るのか?(に近いです)
Predicting Algae Blooms
               (直訳:藻類の予測)

川に有害な藻類が発生してます

                       http://digimaga.net/uploads/2008/07/player-
                    performs-sailing-competition-in-an-alga-in-the-
                                                      dirty-sea.jpg




藻類の大繁殖の予測は川の質の向上に必要
不可欠

じゃあ藻類の発生頻度を予測しましょう
この問題の背景

水中に存在する藻類の識別は大変


顕微鏡検査やらなんやらと経験者が必要


高価で分析スピードが遅い
発生頻度を予測できたら

 安価で自動化されたシステムを作れるかもしれない

 化学物質だけではなく、他の特性(季節や川の種
 類など)がどう影響するか理解できるかもしれな
 い
データ
水のサンプルはヨーロッパの異なる河川で一年間
採取したもの

有害な藻類の発生頻度とほぼ同じ間隔で採取

DMwRパッケージのalgaeのデータセットを使いま
す
パッケージが用意されているのでインストール


使うのはalgae
mxPH・・・ ph値の最大値

mnO2・・・ 酸素の最小値

Cl ・・・ 塩化物の平均値

NO3 ・・・ 硝酸イオンの平均値

NH4 ・・・ アンモニウムイオンの平均値

oPO4 ・・・ オルソリン酸イオンの平均

PO4 ・・・ リン酸の合計の平均値

Chla ・・・ 葉緑素の平均

a1∼a7 ・・・ 異なる7つの藻類の発生頻度
データの要約と可視化

データが与えられたらとりあえずsummary

− データ(統計量など)を確認する


データを見える化しましょう
− plotしてみたりする
summaryから頻度などの特徴が得られる
とりあえずたくさん可視化してみましょう!
試しにmxPHのヒストグラムを出力してみる
Histogram of algae$mxPH




          0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7
Density




                                            6        7         8      9   10

                                                         algae$mxPH
Histogram of algae$mxPH




          0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7
Density




                                             6        7         8      9   10

                                                          algae$mxPH


                                            正規分布みたいですよね
ちなみに attach(algae) をすると

 mxPH   = algae$mxPH

 直接カラム名でアクセスできる


やめたいときは detach(algae)
じゃあ本当に正規分布なのか確かめる
Histogram of maximum pH value

          1.0
          0.8
          0.6
Density

          0.4
          0.2
          0.0




                6       7         8      9      10

                            algae$mxPH
Histogram of maximum pH value

             1.0
             0.8
             0.6
   Density

             0.4
             0.2
             0.0




                   6       7         8      9      10

                               algae$mxPH


裾の辺りに小さい値が2つ存在することがわかる
Normal QQ plot of maximum pH
             9
algae$mxPH

             8




                                                               # distribution:デフォルトで norm
                                                               # envelope:デフォルトで 0.95
             7
             6




                 -3    -2    -1         0          1   2   3

                                  norm quantiles
Normal QQ plot of maximum pH
             9
algae$mxPH

             8




                                                               # distribution:デフォルトで norm
                                                               # envelope:デフォルトで 0.95
             7
             6




                 -3    -2    -1         0          1   2   3

                                  norm quantiles
                 5%エラーで

                            ほぼ正規分布であることがわかる
次にoPO4の箱ひげ図
Orthophosphate (oPO4)

0   100 200 300 400 500
Orthophosphate (oPO4)

                      0   100 200 300 400 500




positive skewが確認できる
Orthophosphate (oPO4)

                                           0   100 200 300 400 500




                     positive skewが確認できる

値の大きい外れ値がいくつか確認できる
もうちょい外れ値についてゴニョゴニョ
25000
                        mean
                        mean+sd
                        median
            15000
algae$NH4

            5000
            0




                    0      50     100   150   200
25000
                        mean
                        mean+sd
                        median
            15000
algae$NH4

            5000
            0




                    0      50     100   150   200

            やっぱり外れ値いっぱいあるね
外れ値の元データどういうのか知りたいですね
algae$NH4

      0   5000        15000    25000




0
50
100
150
                              153




200
いちいちマウスでクリックは面倒くさい




plotで大体15000以上だからそれで検索かけてもOK
げ、NA祭りだ・・・
ちゃんとNAを除く処理を書くようにしましょう
NAを処理する方法
   manyNAs()

   is.na()

   complete.cases()

   na.omit()

   mean()やsd()などのna.rmオプション
藻類の発生頻度の分布を箱ひげ図で確かめる
80
           60
Algal a1

           40
           20
           0




                 large    medium      small

                         River Size


                見づらいので・・・
River Size     small




             medium




               large




                       0   20   40         60   80

                                Algal a1
River Size     small




                medium




                  large




                          0   20   40         60   80

                                   Algal a1



a1はsmallに多く分布していることが確認できる
もうちょっと・・・すごい(気がする)箱ひげ図
small
River Size




                                                     # ●は頻度の平均値
             medium                                  # 縦線は左から 第一四分位点、中央値、第三四分位点
                                                     # ダッシュは実際のデータの頻度




               large




                       0   20   40         60   80

                                Algal A1
small
River Size




                                                     # ●は頻度の平均値
             medium                                  # 縦線は左から 第一四分位点、中央値、第三四分位点
                                                     # ダッシュは実際のデータの頻度




               large




                       0   20   40         60   80

                                Algal A1


                                頻度も確認できるので便利
0   10    20     30   40

                   minO2                           minO2
 winter

summer

 spring

autumn
                                                                     # number:データを何個に分けるか
                   minO2                           minO2             # overlap:分けた時にデータをどのくらい重複させるか
 winter
                                                                     # striplot は lattice パッケージ
summer

 spring

autumn


          0   10    20     30   40

                                     a3
0   10    20     30   40

                   minO2                           minO2
 winter

summer

 spring

autumn
                                                                     # number:データを何個に分けるか
                   minO2                           minO2             # overlap:分けた時にデータをどのくらい重複させるか
 winter
                                                                     # striplot は lattice パッケージ
summer

 spring

autumn


          0   10    20     30   40

                                     a3




                   a3とseasonの関係とminO2を表している
欠損値の補完

さっきも出てきたNAたちをどうしよう
か?ということ

欠損値を除く=その行のデータが消える
−色々な方法で補完
平均と中央値で補完する
相関関係を使って補完してみる
補完OKなのは相関係数0.9以上
今回はPO4とoPO4
回帰した結果で補完
k近傍法でNAを補完してくれる関数が
  DMwRには用意されている
予測モデル


藻類の発生頻度を予測

今回は線形回帰モデルと樹木モデルを使用
調整済み決定係数低いなぁー
調整済み決定係数低いなぁー

 分散分析確認してみよう
seasonのF値低いし除いてみようかな
正直、微妙
正直、微妙

一応ちゃんと比較してみる
約30%の信頼度
Rには素敵な関数stepが用意されています
うん、微妙
約40%の信頼度になった
どうも線形モデルはうまく当てはまらない?
これ
xerrorの最小値からその標準偏差1倍
 の範囲内の最大のxerror値を選ぶ
0.6158 < xerror < 0.83332
これ




この剪定した結果を用いて樹木を作る
なんでcp=0.08なんですかね?
今の作業を全部やってくれる関数が
 DMwRには用意されている
モデルの選択と評価


線形回帰モデルと樹木モデルのモデルを評
価する
平均絶対誤差(mae)、平均二乗誤差(mse)、平均二乗誤差の
ルート(rmse)、正規化平均二乗誤差(nmse)、正規化平均絶対
       誤差(nmae)を求めてくれる関数が
        DMwRには用意されている
80
                     Linear Model                             Regression Tree




                                                        80
              60




                                                        60
True Values




                                          True Values
              40




                                                        40
              20




                                                        20
              0




                                                        0
                   -10 0   10        30                      10   20      30    40

                       Predictions                                Predictions




                                正直、微妙
ホールドアウト、モンテカルロシミュレーション、
ブートストラップなどを使って予測モデルを直してくれる
   experimentalComparison関数というものが
        DMwRには用意されている
すみません
これより先よくわかりませんでした
おそらくスコアをつけて予測モデルを修正していくらしい
言い訳をすると

            この本は
「モデル選択の段階でとても興味深い得点を得ることができた」
         と終わらせています
まとめ
データを可視化してどうなってるのか見ま
しょう

欠損値(NA)をうまく処理しましょう

モデル予測の当てはめは面倒

今回の方法も
「こんな風にやっていけばデータマイニン
グできるんじゃない?」
という提唱にすぎません
ありがとうございました

Data Mining with R algae bloom case