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

23
1 Nagoya.R #3 (2010/06/19) R言語による判別分析入門 小林雄一郎 (大阪大学/日本学術振興会)

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

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

1

Nagoya.R #3 (2010/06/19)

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

小林雄一郎

(大阪大学/日本学術振興会)

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

2

1. 判別分析とは

�何らかの数学的な基準に基づいて、大量のデータを

複数のグループに分類する手法

�目的変数(どんなグループに分類するか)と、

説明変数(何を手がかりに分類するか)を明確に

�判別関数02211 axaxaxay pp ++…++=

目的変数 説明変数 説明変数 説明変数 定数項

02211 axaxaxay pp ++…++=

目的変数 説明変数 説明変数 説明変数 定数項

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

3

�判別関数のイメージ

►散布図に散らばった複数のテクストを「できるだけ正確

に」それぞれのグループに分類するための分割線を求め

る式

●●

●●

▲▲

x1

x2

A群

B群

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

4

�Rでできる主な判別分析の種類と関数名

►線形判別分析(1次) lda()

►線形判別分析(2次) qda()

►正準判別分析 lda()

►マハラノビス距離による判別分析 mahalanobis()

►多数決による判別分析 knn()

►ベイズ判別分析 NaiveBayes()

(注意)lda関数は、3群以上のデータに適用すると、勝手に

正準判別分析を実行

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

5

2. 線形判別分析(2群の場合)

� (例)母語話者の文章と非母語話者の文章の判別

►複数の変数に基づく新たな合成変数を作成して、その視

点からデータを分析

NNS

NS

NNS

NNS

NNS

NNS

NS

NS

NS

NS視点A

視点B

NNS グループNS グループNNS

NS

NNS

NNS

NNS

NNS

NS

NS

NS

NS視点A

視点B

NNS グループNS グループ

最も2群が分離して見

える「視点」(線形判別線形判別線形判別線形判別

関数関数関数関数)を探す

線形判別関数

に代入された値

(e.g. 頻度)を

判別得点判別得点判別得点判別得点という。

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

6

� 2グループがなるべく離れて見える「視点」をいかに

して求めるか

►最も良い判別=(グループ間の分散/全分散)の最大化

= 相関比

グループ A グループ B

A の分散 B の分散

データ全体の分散

データ全体の中心

B の中心A の中心

グループ A グループ B

A の分散 B の分散

データ全体の分散

データ全体の中心

B の中心A の中心

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

7

�これはどういうことかというと。。。

►全分散(判別得点の全ケースの分散)が一定であるとす

ると、グループ間分散とグループ内分散の加重平均

(ケース数の重みをつけた平均の和)の和は全分散に等

しいことから、グループ間分散が大きくなれば、グループ

内分散は小さくなる

►グループ間分散とグループ内分散は2乗和の値がベース

となっているため、相関比は必ず0以上1以下の値となる

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

8

3. 2群の判別例

�データ

►「朝日新聞の社説」(10編)と「ブログ記事」(10編)

►全て、2008年7月15~19日に書かれたもの

�変数

►ChaSenで付与した品詞の標準化頻度(100語あたり)データ 名詞 動詞 形容詞 副詞 接続詞 接頭詞 助動詞 助詞 連体詞 記号1 新聞 36.66 10.88 0.60 1.64 0.45 0.89 9.99 26.83 0.75 11.332 新聞 36.09 11.72 1.25 1.41 0.00 0.63 9.84 25.63 1.09 12.343 新聞 39.00 12.44 0.61 0.46 0.30 0.46 5.46 28.68 0.15 12.444 新聞 33.79 13.87 1.79 0.96 0.14 0.27 9.75 26.65 0.96 11.815 新聞 37.16 11.90 1.89 1.31 0.29 0.44 6.53 28.88 1.02 10.606 新聞 33.48 12.89 3.26 1.19 0.30 0.00 6.96 26.37 0.74 14.817 新聞 38.27 11.94 0.58 1.15 0.29 0.58 4.75 28.35 0.86 13.248 新聞 35.82 11.11 0.88 1.75 0.44 1.32 7.75 28.80 1.17 10.969 新聞 36.97 11.49 2.06 1.33 0.44 0.29 6.77 27.84 1.33 11.4910 新聞 40.03 12.11 0.89 0.44 0.15 1.33 4.87 27.92 1.18 11.0811 ブログ 33.10 11.72 6.90 0.69 0.69 0.34 8.97 26.55 0.34 10.6912 ブログ 29.33 12.53 3.15 2.43 1.50 0.09 8.46 29.42 1.62 11.4813 ブログ 26.16 13.36 4.27 1.52 0.66 0.38 11.75 24.93 0.57 16.4014 ブログ 28.88 10.83 8.66 1.08 0.72 0.00 10.83 22.74 0.72 15.5215 ブログ 33.57 14.69 3.50 1.75 0.70 2.80 5.24 20.28 0.70 16.7816 ブログ 20.58 11.65 3.30 2.72 1.36 0.00 12.04 19.61 0.58 28.1617 ブログ 29.11 12.28 5.07 4.01 1.87 1.74 9.75 23.36 1.07 11.7518 ブログ 20.17 10.00 4.83 2.76 1.03 1.72 8.62 20.52 0.34 30.0019 ブログ 29.61 13.09 3.25 1.76 1.09 0.26 7.54 24.79 0.70 17.9220 ブログ 27.97 11.54 2.10 1.40 1.05 1.40 10.14 28.67 0.35 15.38

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

9

#データの読み込み

dat<-read.delim("Asahi-Blog_matrix.txt")

#判別分析

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)

Rスクリプトの

読み方と書き方は

あとでやります

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

10

�結果(クロスバリデーションなし)

►学習データと実験データが同じ場合(クローズド・テスト)

には、最も分類がうまくいくようなパラメータが設定されて

いるというバイアスが生じる可能性が否定できない

►そのデータに適合するようにルールを作ったのだから、同

じデータをうまく説明できるのは当然

新聞 ブログ 精度

新聞 10 0 100%

ブログ 0 10 100%

正判別率正判別率正判別率正判別率=正しく判定されたデータ数/全データ数

100%だが、

過学習の

恐れあり

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

11

� クロスバリデーション(交差妥当化、交差検証法)

► ①ランダムなk個のグループを作成する(グループの大

きさは同じ大きさとする)

► ② k-1個のグループのデータを使って、モデルの推定を

行ない、残りの一つのデータでモデルの精度を評価する。

► ③ k個のモデルの精度の評価値から、全体としての評

価値を決定する (山口ほか 2004, p. 231)

► このように1個のデータだけを残す方法をleave-one-outク

ロスバリデーションと言う

► 具体的には、ジャックナイフ法やブートストラップ法など

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

12

�結果(クロスバリデーションあり)

►一般的には、クロスバリデーションを行なった場合、クロ

スバリデーションを行なわなかった場合よりも、しばしば

精度が落ちる

►しかし、クロスバリデーションをしてもなお、100%という精度が達成されたことから、新聞の文章とブログの文章が

それだけ明確に異なった言語特徴を持っていることが分

かる

新聞 ブログ 精度

新聞 10 0 100%

ブログ 0 10 100%

精度は

落ちない

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

13

� 言語分析(らしきもの)

► ICCICCICCICCの主任検察官主任検察官主任検察官主任検察官が大統領大統領大統領大統領の逮捕状逮捕状逮捕状逮捕状を請求請求請求請求し、3333人人人人の

予審判事予審判事予審判事予審判事が証拠証拠証拠証拠を調べている。(新聞データ。名詞を強

調)

► 玄米コーヒーは、香香香香ばしくばしくばしくばしくて良良良良いいいい香りでおいしくおいしくおいしくおいしくて、幸せ

な気分になりました(ブログデータ。形容詞を強調)。

名詞 動詞 形容詞 副詞 接続詞 接頭詞 助動詞 助詞 連体詞 記号

新聞 36.7336.7336.7336.73 12.04 1.381.381.381.38 1.16 0.28 0.62 7.27 27.59 0.92 12.01

ブログ 36.3736.3736.3736.37 12.12 2.012.012.012.01 1.07 0.30 0.57 7.17 27.57 0.88 11.95

差 0.360.360.360.36 -0.08 -0.63-0.63-0.63-0.63 0.09 -0.02 0.05 0.10 0.03 0.04 0.06

事実重視

感想重視

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

14

4. 正準判別分析

�正準判別分析とは

►分析対象データをいずれかの群に判別するというよりも、

群間の相違を正準変量と呼ばれる少数個の変量を用い

てできるだけ明確に表現することに重点を置く

►ある意味では、主成分分析に似ている

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

15

5. 多群の判別例(習熟度判定)

�データ

►日本人英語学習者の話し言葉 (NICT-JLE Corpus)

►初級(Lv.2)、中級(Lv.5)、上級(Lv.8)からそれぞれ30人

►英語習熟度レベル(SST level)が付与

�変数

►総語数(tokens)、異語数(types)、平均発話長(MLU)

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

16

NICT-JLE Corpus

90人

初級

20人中級

20人上級

20人

初級

10人中級

10人上級

10人

分類ルール分割

抽出

評価

学習データ(60人)

実験データ(30人)

NICT-JLE Corpus

90人

初級

20人中級

20人上級

20人

初級

10人中級

10人上級

10人

分類ルール分割

抽出

評価

学習データ(60人)

実験データ(30人)

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

17

#パッケージの読み込み

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)

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

18

�結果

►全体で、93.33%

►勿論、実際の習熟度判別を行なうには、個々の発話デー

タに品詞・文法・構文・誤用といった様々な情報を付与し

て、多角的な評価をしなければならない

►しかし、総語数・異語数・平均発話長のような生データか

ら簡単に抽出できる情報を使うだけでも、一定の容認可

能な精度で判別をすることができるのは興味深い

初級 中級 上級 精度

初級 9 1 0 90%

中級 0 9 1 90%

上級 0 0 10 100%

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

19

6. 判別分析のテキストマイニング例いろいろ

�母語話者 vs. 非母語話者

�書き言葉 vs. 話し言葉

�イギリス英語 vs. アメリカ英語

�作家A vs. 作家B

�ジャンルC vs. ジャンルD

�スパムメール vs. 普通のメール

�高級紙 vs. 大衆紙

�手書き vs. ワープロ書き

etc.

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

20

7. 判別分析を行なう際の注意点

�等分散性

►ボックスのM検定

�マルチコ(多重共線性)

►事前スクリーニング法

►変数選択法(ステップワイズ法)

►直交スコアリング法

etc.

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

21

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)

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

22

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

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

23

�御清聴ありがとうございました。

�主な参考文献

►青木繁伸 (2009) 『Rによる統計解析』 東京: オーム社.

►金明哲 (2007) 『Rによるデータサイエンス―データ解析の

基礎から最新手法まで』 東京: 森北出版.