アクチュアリーはデータサイエンスの夢を見るか?

Rで保険数理と機械学習をやっています

線形判別分析について(スイス銀行紙幣①)

はじめまして。

当ブログでは小生の独学した内容(主に機械学習)などについて備忘録をかねてまとめていきたいと考えています。多分に誤りが含まれることが予想されますので、お含みおきください。また、先人の皆様にとっては稚拙な内容にはなりますが、至らぬ点についてはご指導頂ければ幸いです。

 

今回は線形判別分析をとりあげます。使用するデータとしては、次の論文で取りあげられているものを以下のサイトから孫引きします。

Flury, B. and Riedwyl, H. (1988). Multivariate Statistics, A Practical Approach, Cambridge University Press

http://mo161.soci.ous.ac.jp/@d/DoDStat/MethodsList/MultivariateAnalysis_allj.html

上記リンク先の「スイス銀行紙幣データ」を使用します。データの内容としては、下表のとおりの7変数となっています。

No 変数名 変数ラベル 説 明
1 length 横幅長 紙幣の横の長さ numerical
2 left 左縦幅長 紙幣の縦の長さ(左側) numerical
3 right 右縦幅長 紙幣の縦の長さ(右側) numerical
4 bottom 下枠内長

紙幣の下端から内側の枠までの長さ(下部マージン)

numerical
5 top 上枠内長

紙幣の上端から内側の枠までの長さ(上部マージン)

numerical
6 diagonal 対角長 対角線の長さ numerical
7 class 真偽 札の真偽(0: 真札, 1:偽札) categorical

 

データの散布図は次の通りです。

f:id:r_std:20160503082222p:plain

赤色が真札、緑色が偽札を示しています。さて、このデータを基にスイス銀行紙幣の真偽を定量的に判別するにはどうしたらよいでしょうか?

今回取り上げる線形判別分析は、各群団からの中心の距離(マハラノビス距離)によって判別を行う手法です。今回はスイス銀行紙幣のデータを真札群と偽札群の2群で判別するので、真札の平均からの距離と偽札の平均からの距離を比較して、距離が小さい方に判別を行います。

次の図は下部マージン(bottom)と対角線の長さ(diagonal)の2変数に絞った場合の線形判別を図示した例になります。

f:id:r_std:20160503154158p:plain

線形判別は各群団間の分散が等しいという前提に基づいた手法であることに注意が必要になります。中心からの距離だけに注目しているため、群団ごとの分布の裾の厚薄には対応できていないことが弱点です。一般的には偽札の方が製造精度が低いことが考えられるため、線形判別はフィットしづらいのではないかという予想のもと実行してみます。

200件のデータを100件ずつ学習用、テスト用に分けて実行したところ、テスト結果は次の通りとなりました。

> table(test_lda$class,test_y)
test_y

  真札 偽札
真札 49 0
偽札 1 50

等分散の前提に基づく線形判別分析でも、予想に反して判別率99%という良い結果が出ました。 1件だけ真札のデータを偽札であると誤識別してしまっているようです。

 

今回使用したソースコードは次の通りです。 

 

LDA

 

続編として以下の記事を作成しました。二次判別分析や異常値検出の方法を取り上げています。

r-std.hatenablog.com

r-std.hatenablog.com