data mining with r algae bloom case
TRANSCRIPT
R でデータマイニング
@kenchan0130_aki
~サンプリングデータのケース~
Tokyo.R #24
某理科系大学院生
専攻は確率過程、信用リスク
⇨ テキストマイニング?
寝ることが趣味
働いたら負け
最近の原動力 ⇨
自己紹介
某理科系大学院生
専攻は確率過程、信用リスク
⇨ テキストマイニング?
寝ることが趣味
働いたら負け
最近の原動力 ⇨
自己紹介
Luis Torgo(2010)
•導入
•藻類の予測
•株式市場のリターンの予測
•不正行為の検知
•マクロアレイの分類
Data Mining with RLearning with Case Studies
Luis Torgo(2010)
•導入
•藻類の予測
•株式市場のリターンの予測
•不正行為の検知
•マクロアレイの分類
藻類の予測
また次の機会
また次の機会
また次の機会
Data Mining with RLearning with Case Studies
私も初心者です!一緒に勉強しましょう
ここにはデータマイニングのプロが多くいらっ
しゃる
− 分からないことはお聞きしてしまおう!
本日の目標
データマイニングとは、統計学、パターン認識、人工知能等のデータ解析の技法を大量のデータに網羅的に適用することで知識を取り出す技術。 通常のデータの扱い方からは想像が及びにくい、ヒューリスティクな知識獲得が可能であるという期待を含意していることが多い。
引用: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
algae$mxPH
Density
6 7 8 9 10
0.00.10.20.30.40.50.60.7
Histogram of algae$mxPH
algae$mxPH
Density
6 7 8 9 10
0.00.10.20.30.40.50.60.7
正規分布みたいですよね
ちなみに attach(algae) をすると
mxPH = algae$mxPH
直接カラム名でアクセスできる
やめたいときは detach(algae)
じゃあ本当に正規分布なのか確かめる
Histogram of maximum pH value
algae$mxPH
Density
6 7 8 9 10
0.0
0.2
0.4
0.6
0.8
1.0
Histogram of maximum pH value
algae$mxPH
Density
6 7 8 9 10
0.0
0.2
0.4
0.6
0.8
1.0
裾の辺りに小さい値が2つ存在することがわかる
-3 -2 -1 0 1 2 3
67
89
Normal QQ plot of maximum pH
norm quantiles
algae$mxPH
# distribution:デフォルトで norm# envelope:デフォルトで 0.95
-3 -2 -1 0 1 2 3
67
89
Normal QQ plot of maximum pH
norm quantiles
algae$mxPH
ほぼ正規分布であることがわかる5%エラーで
# distribution:デフォルトで norm# envelope:デフォルトで 0.95
次にoPO4の箱ひげ図
0100200300400500
Orth
opho
spha
te (o
PO
4)
0100200300400500
Orth
opho
spha
te (o
PO
4)
positive skewが確認できる
0100200300400500
Orth
opho
spha
te (o
PO
4)
positive skewが確認できる
値の大きい外れ値がいくつか確認できる
もうちょい外れ値についてゴニョゴニョ
0 50 100 150 200
05000
15000
25000
algae$NH4
meanmean+sdmedian
0 50 100 150 200
05000
15000
25000
algae$NH4
meanmean+sdmedian
やっぱり外れ値いっぱいあるね
外れ値の元データどういうのか知りたいですね
0 50 100 150 200
05000
15000
25000
algae$NH4
153
いちいちマウスでクリックは面倒くさい
plotで大体15000以上だからそれで検索かけてもOK
げ、NA祭りだ・・・
ちゃんとNAを除く処理を書くようにしましょう
manyNAs()
is.na()
complete.cases()
na.omit()
mean()やsd()などのna.rmオプション
NAを処理する方法
藻類の発生頻度の分布を箱ひげ図で確かめる
large medium small
020
4060
80
River Size
Alg
al a
1
見づらいので・・・
Algal a1
Riv
er S
ize
large
medium
small
0 20 40 60 80
Algal a1
Riv
er S
ize
large
medium
small
0 20 40 60 80
a1はsmallに多く分布していることが確認できる
もうちょっと・・・すごい(気がする)箱ひげ図
Algal A1
Riv
er S
ize
large
medium
small
0 20 40 60 80
# ●は頻度の平均値# 縦線は左から 第一四分位点、中央値、第三四分位点# ダッシュは実際のデータの頻度
Algal A1
Riv
er S
ize
large
medium
small
0 20 40 60 80
頻度も確認できるので便利
# ●は頻度の平均値# 縦線は左から 第一四分位点、中央値、第三四分位点# ダッシュは実際のデータの頻度
a3
autumn
spring
summer
winter
0 10 20 30 40
minO2 minO2
autumn
spring
summer
winter
minO2
0 10 20 30 40
minO2
# number:データを何個に分けるか# overlap:分けた時にデータをどのくらい重複させるか
# striplotは latticeパッケージ
a3
autumn
spring
summer
winter
0 10 20 30 40
minO2 minO2
autumn
spring
summer
winter
minO2
0 10 20 30 40
minO2
# number:データを何個に分けるか# overlap:分けた時にデータをどのくらい重複させるか
# striplotは latticeパッケージ
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には用意されている
-10 0 10 30
020
4060
80Linear Model
Predictions
True
Val
ues
10 20 30 400
2040
6080
Regression Tree
Predictions
True
Val
ues
正直、微妙
ホールドアウト、モンテカルロシミュレーション、ブートストラップなどを使って予測モデルを直してくれる
experimentalComparison関数というものがDMwRには用意されている
すみませんこれより先よくわかりませんでした
おそらくスコアをつけて予測モデルを修正していくらしい
この本は「モデル選択の段階でとても興味深い得点を得ることができた」
と終わらせています
言い訳をすると
まとめデータを可視化してどうなってるのか見ましょう
欠損値(NA)をうまく処理しましょう
モデル予測の当てはめは面倒
今回の方法も「こんな風にやっていけばデータマイニングできるんじゃない?」という提唱にすぎません
ありがとうございました