• Like
  • Save
NagoyaR_3: R言語による判別分析入門
Upcoming SlideShare
Loading in...5
×
 

NagoyaR_3: R言語による判別分析入門

on

  • 9,166 views

 

Statistics

Views

Total Views
9,166
Views on SlideShare
9,156
Embed Views
10

Actions

Likes
4
Downloads
52
Comments
0

3 Embeds 10

https://twitter.com 8
https://si0.twimg.com 1
http://geechscamp.lovepop.jp 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    NagoyaR_3: R言語による判別分析入門 NagoyaR_3: R言語による判別分析入門 Presentation Transcript

    • Nagoya.R #3 (2010/06/19) R言語による判別分析入門 小林雄一郎 (大阪大学/日本学術振興会) 1
    • 1. 判別分析とは 何らかの数学的な基準に基づいて、大量のデータを 複数のグループに分類する手法 目的変数(どんなグループに分類するか)と、 説明変数(何を手がかりに分類するか)を明確に 判別関数 y = a1 x1 + a 2 x 2 + … + a p x p + a 0 目的変数 説明変数 説明変数 説明変数 定数項 2
    • 判別関数のイメージ ►散布図に散らばった複数のテクストを「できるだけ正確 に」それぞれのグループに分類するための分割線を求め る式 A群 (+ ) ● ● ● B群 ● (- ● ) ● ● ●▲ x2 ▲ ● ▲ ▲ ● ▲ ▲ ▲ ▲ ▲ ▲ x1 3
    • Rでできる主な判別分析の種類と関数名 ►線形判別分析(1次) lda() ►線形判別分析(2次) qda() ►正準判別分析 lda() ►マハラノビス距離による判別分析 mahalanobis() ►多数決による判別分析 knn() ►ベイズ判別分析 NaiveBayes() (注意)lda関数は、3群以上のデータに適用すると、勝手に 正準判別分析を実行 4
    • 2. 線形判別分析(2群の場合) (例)母語話者の文章と非母語話者の文章の判別 ►複数の変数に基づく新たな合成変数を作成して、その視 点からデータを分析 NNS NNS 最も2群が分離して見 NS える「視点」(線形判別 線形判別 NS NNS 点視 点視 A 関数)を探す 関数 NS NS NNS NNS NS 線形判別関数 に代入された値 NS プールグ プールグ NNS プールグ プールグ (e.g. 頻度)を 判別得点という。 判別得点 点視 点視 B 5
    • 2グループがなるべく離れて見える「視点」をいかに して求めるか ►最も良い判別=(グループ間の分散/全分散)の最大化 = 相関比 A の中心 B の中心 プールグ プールグ A プールグ プールグ B データ全体の中心 A の分散 B の分散 データ全体の分散 6
    • これはどういうことかというと。。。 ►全分散(判別得点の全ケースの分散)が一定であるとす ると、グループ間分散とグループ内分散の加重平均 (ケース数の重みをつけた平均の和)の和は全分散に等 しいことから、グループ間分散が大きくなれば、グループ 内分散は小さくなる ►グループ間分散とグループ内分散は2乗和の値がベース となっているため、相関比は必ず0以上1以下の値となる 7
    • 83.51 53.0 76.82 41.01 04.1 50.1 04.1 01.2 45.11 79.72 グロブ 02 29.71 07.0 97.42 45.7 62.0 90.1 67.1 52.3 90.31 16.92 グロブ 91 8 00.03 43.0 25.02 26.8 27.1 30.1 67.2 38.4 00.01 71.02 グロブ 81 57.11 70.1 63.32 57.9 47.1 78.1 10.4 70.5 82.21 11.92 グロブ 71 61.82 85.0 16.91 40.21 00.0 63.1 27.2 03.3 56.11 85.02 グロブ 61 87.61 07.0 82.02 42.5 08.2 07.0 57.1 05.3 96.41 75.33 グロブ 51 25.51 27.0 47.22 38.01 00.0 27.0 80.1 66.8 38.01 88.82 グロブ 41 04.61 75.0 39.42 57.11 83.0 66.0 25.1 72.4 63.31 61.62 グロブ 31 84.11 26.1 24.92 64.8 90.0 05.1 34.2 51.3 35.21 33.92 グロブ 21 96.01 43.0 55.62 79.8 43.0 96.0 96.0 09.6 27.11 01.33 グロブ 11 80.11 81.1 29.72 78.4 33.1 51.0 44.0 98.0 11.21 30.04 聞新 01 94.11 33.1 48.72 77.6 92.0 44.0 33.1 60.2 94.11 79.63 聞新 9 69.01 71.1 08.82 57.7 23.1 44.0 57.1 88.0 11.11 28.53 聞新 8 42.31 68.0 53.82 57.4 85.0 92.0 51.1 85.0 49.11 72.83 聞新 7 18.41 47.0 73.62 69.6 00.0 03.0 91.1 62.3 98.21 84.33 聞新 6 06.01 20.1 88.82 35.6 44.0 92.0 13.1 98.1 09.11 61.73 聞新 5 18.11 69.0 56.62 57.9 72.0 41.0 69.0 97.1 78.31 97.33 聞新 4 44.21 51.0 86.82 64.5 64.0 03.0 64.0 16.0 44.21 00.93 聞新 3 43.21 90.1 36.52 48.9 36.0 00.0 14.1 52.1 27.11 90.63 聞新 2 33.11 57.0 38.62 99.9 98.0 54.0 46.1 06.0 88.01 66.63 聞新 1 号記 詞体連 詞助 詞動助 詞頭接 詞続接 詞副 詞容形 詞動 詞名 ター デ ►ChaSenで付与した品詞の標準化頻度(100語あたり) 変数 ►全て、2008年7月15~19日に書かれたもの ►「朝日新聞の社説」(10編)と「ブログ記事」(10編) データ 3. 2群の判別例
    • #データの読み込み dat<-read.delim("Asahi-Blog_matrix.txt") #判別分析 Rスクリプトの library(MASS) (result<-lda(data ~ . , data=dat)) 読み方と書き方は #定数項 あとでやります apply(result$means%*%result$scaling,2,mean) #クロスバリデーション (result_cv<-lda(data ~ . , data=dat, CV=TRUE)) #分類結果 (result_tab<-table(dat[,2],result_cv$class)) #正判別率 sum(result_tab[row(result_tab)==col(result_tab)])/sum(result_tab) 9
    • 結果(クロスバリデーションなし) 100%だが、 新聞 ブログ 精度 過学習の 新聞 10 0 100% 恐れあり ブログ 0 10 100% 正判別率=正しく判定されたデータ数/全データ数 正判別率 ►学習データと実験データが同じ場合(クローズド・テスト) には、最も分類がうまくいくようなパラメータが設定されて いるというバイアスが生じる可能性が否定できない ►そのデータに適合するようにルールを作ったのだから、同 じデータをうまく説明できるのは当然 10
    • クロスバリデーション(交差妥当化、交差検証法) ► ① ランダムなk個のグループを作成する(グループの大 きさは同じ大きさとする) ► ② k-1個のグループのデータを使って、モデルの推定を 行ない、残りの一つのデータでモデルの精度を評価する。 ► ③ k個のモデルの精度の評価値から、全体としての評 価値を決定する (山口ほか 2004, p. 231) ► このように1個のデータだけを残す方法をleave-one-outク ロスバリデーションと 言う ► 具体的には、ジャックナイフ法やブートストラップ法など 11
    • 結果(クロスバリデーションあり) 精度は 落ちない 新聞 ブログ 精度 新聞 10 0 100% ブログ 0 10 100% ►一般的には、クロスバリデーションを行なった場合、クロ スバリデーションを行なわなかった場合よりも、しばしば 精度が落ちる ►しかし、クロスバリデーションをしてもなお、100%という精 度が達成されたことから、新聞の文章とブログの文章が それだけ明確に異なった言語特徴を持っていることが分 かる 12
    • 言語分析(らしきもの) 名詞 動詞 形容詞 副詞 接続詞 接頭詞 助動詞 助詞 連体詞 記号 新聞 36.73 12.04 1.38 1.16 0.28 0.62 7.27 27.59 0.92 12.01 ブログ 36.37 12.12 2.01 1.07 0.30 0.57 7.17 27.57 0.88 11.95 差 0.36 -0.08 -0.63 0.09 -0.02 0.05 0.10 0.03 0.04 0.06 事実重視 ► ICC 主任検察官が大統領 逮捕状 請求 3人の ICCの主任検察官 大統領 逮捕状を請求 主任検察官 大統領の逮捕状 請求し、3 予審判事が証拠 証拠を調べている。(新聞データ。名詞を強 予審判事 証拠 調) 感想重視 ► 玄米コーヒーは、香ばしく 良い香りでおいしく 香ばしくて良 おいしくて、幸せ おいしく な気分になりました(ブログデータ。形容詞を強調)。 13
    • 4. 正準判別分析 正準判別分析とは ►分析対象データをいずれかの群に判別するというよりも、 群間の相違を正準変量と呼ばれる少数個の変量を用い てできるだけ明確に表現することに重点を置く ►ある意味では、主成分分析に似ている 14
    • 5. 多群の判別例(習熟度判定) データ ►日本人英語学習者の話し言葉 (NICT-JLE Corpus) ►初級(Lv.2)、中級(Lv.5)、上級(Lv.8)からそれぞれ30人 ►英語習熟度レベル(SST level)が付与 変数 ►総語数(tokens)、異語数(types)、平均発話長(MLU) 15
    • 学習データ(60人) 初級 中級 上級 20人 20人 20人 抽出 NICT-JLE Corpus 分割 分類ルール 90人 初級 中級 上級 10人 10人 10人 評価 実験データ(30人) 16
    • #パッケージの読み込み library(MASS) #訓練データの読み込み (dat1<-read.delim("nict_training.txt")) #分類モデルの構築 (result1 <- lda(Levels ~ . , data=dat1)) #定数項 apply(result1$means%*%result1$scaling,2,mean) #学習データの読み込み (dat2<-read.delim("nict_test.txt")) #分類モデルの適用 (result2<-predict(result1, dat2)$class) #分類結果 (result3<-table(dat2[,1],result2)) #正判別率 sum(result3[row(result3)==col(result3)])/sum(result3) 17
    • 結果 ►全体で、93.33% 初級 中級 上級 精度 初級 9 1 0 90% 中級 0 9 1 90% 上級 0 0 10 100% ►勿論、実際の習熟度判別を行なうには、個々の発話デー タに品詞・文法・構文・誤用といった様々な情報を付与し て、多角的な評価をしなければならない ►しかし、総語数・異語数・平均発話長のような生データか ら簡単に抽出できる情報を使うだけでも、一定の容認可 能な精度で判別をすることができるのは興味深い 18
    • 6. 判別分析のテキストマイニング例いろいろ 母語話者 vs. 非母語話者 書き言葉 vs. 話し言葉 イギリス英語 vs. アメリカ英語 作家A vs. 作家B ジャンルC vs. ジャンルD スパムメール vs. 普通のメール 高級紙 vs. 大衆紙 手書き vs. ワープロ書き etc. 19
    • 7. 判別分析を行なう際の注意点 等分散性 ►ボックスのM検定 マルチコ(多重共線性) ►事前スクリーニング法 ►変数選択法(ステップワイズ法) ►直交スコアリング法 etc. 20
    • 8. Rによる判別分析の実習(その1) #irisデータ iris #パッケージの読み込み library(MASS) #正準判別分析(+クロスバリデーション) result<-lda(Species ~ ., data=iris, CV=TRUE) result #分類結果 result_tab<-table(iris[,5], result$class) result_tab #正判別率 sum(result_tab[row(result_tab)==col(result_tab)])/sum(result_tab) 21
    • 9. Rによる判別分析の実習(その2) #学習データと実験データを用いる判別分析 #データの分割(注意:ランダムサンプリングなので、実行するたびに結果が変わります) tmp<-sample(1:150, 75) iris.train<-iris[tmp,] iris.test<-iris[-tmp,] iris.train iris.test #学習(分類モデルの構築) result2<-lda(Species ~ ., data=iris.train) result2 #定数項 apply(result2$means%*%result2$scaling, 2, mean) #実験(分類モデルの適用) result3<-predict(result2, iris.test)$class result3 #分類結果 result4<-table(iris.test[,5], result3) #正判別率 sum(result4[row(result4)==col(result4)])/sum(result4) result4 22
    • 御清聴ありがとうございました。 主な参考文献 ►青木繁伸 (2009) 『Rによる統計解析』 東京: オーム社. ►金明哲 (2007) 『Rによるデータサイエンス―データ解析の 基礎から最新手法まで』 東京: 森北出版. 23