判別分析

サマリー

アヤメのデータまたは「フィッシャーのアヤメ」データセットは多変量データで、サー・ロナルド・エイルマー・フィッシャーによって1936年に紹介されました。このデータセットは多くの分類システムでその仕組みを分かりやすく説明するためによく使われています。このデータセットは3種のアヤメ(Iris setosa, Iris virginica, Iris versicolor)からそれぞれ50サンプルずつ集めたものです。各サンプルは、花弁とがくの長さと幅の計4つの特徴を計測され、センチメートルで記録されています。判別分析を使ってこの4つの特徴をもとに種の判別を行いたいと思います。

ランダムに120行のアヤメのデータを選んで判別分析のモデルを作成します。そして残りの30行を使用してこのモデルの正確度を確認します。

必要なOriginのバージョン: Origin 8.6 SR0以降

判別分析

  1. 新しいプロジェクトまたは新しいワークブックを開きます。\Samples\Statistics\Fisher's Iris Data.datファイルをインポートします。
  2. 列Aから列Dを選択し、メニューから統計:多変量解析:判別分析と操作して判別分析discrimダイアログを表示し、入力データ タブを開きます。列Aから列Dトレーニングデータの欄に自動的に追加されます。
  3. トレーニングデータのグループの隣にある三角形ボタンButton Select Data Right Triangle.pngをクリックしてコンテキストメニューからE(Y):Speciesを選びます。
    Discrim dialog 1.png
  4. のブランチを開いてから判別関数係数のチェックボックスにチェックを付けます。正準判別分析のブランチ内にある正準判別関数の係数にチェックを付けます。他の設定はデフォルトのままにして、 OKをクリックします。
    Discrim dialog 1A.png

結果の解釈

Discriminant Analysis Report のタブをクリックします。

正準判別分析

正準判別分析のブランチは、判別分析のためのモデルの関数を作成します。

  1. 標準化されていない正準係数の表から正準判別関数を作成することができます。
    UCC.png
    D1 = -2.10511 - 0.82938*SL - 1.53447*SW + 2.20121*PL + 2.81046*PW
    D2 = -6.66147 + 0.0241*SL + 2.16452*SW -0.93192*PL + 2.83919*PW
    where SL = Sepal Length, SW = Sepal Width, PL = Petal Length, PW = Petal Width
  2. 固有値の表から、上記の正準判別関数の重要性が分かります。1番目の関数は99.12%の分散を説明でき、残りの0.88%は2番目の関数で説明できます。
    Eigenvalues da.png
  3. Wilk's Lambda検定の表では判別関数が有意にグループメンバーシップの説明をしていることを確認できます。表の中で列Sig.を確認すると、どちらも0.05より小さくなっています。よって、どちらの値も判別分析に追加されるべきである、と分かります。
    Wilks Lambda.png

分類

  1. 観測データを分類するに当たり、観測データのスコアは線形判別関数の係数から計算され、そのスコアが評価されます。トレーニングデータの分類概要によると、setosaのグループ分類は100%の正答率となっています。versicolorでは、2つの観測値が誤ってvirginicaとして分類され、virginicaではたった1つが別の分類になっていました。エラー率はたったの2.00%です。このモデルはよく出来ているといえるでしょう。
    Classification Summary Training Data.png
  2. どの観測値が誤って分類されているかを確認するために、Training Result1のシートに移ることが出来ます。シートでは判別モデルから計算された、元の確率とどのグループが観測に割り当てられているかを確認出来ます。
    Discrim training results.png
    • 84番目の観測値をでは、元の確立(Virginica)0.85661が最大値であることが分かります。また、84番目の観測値がvirginica(85.7 %の確率で)のグループに割り当てられていることが分かります。
    • しかし、ソースデータでは、84 番目の観測値はversicolorに属しています。ゆえに、そのモデルによるこの観測は誤って分類されています。

モデルの検証

モデル検証は、判別分析分類子の安定性を保証するために使用できます。

モデル検証を行うには2つの方法があります。

  • 交差確認
    クロス検証では各トレーニングデータはテストデータとして扱われ、トレーニングデータから外されてどのグループに属するか算出され、その分類が正しいか否かを確認します。
  • サブセット検証
    観測データのセットをさらに小さく分け、初めの1つを判別モデルの判断に使い(トレーニングセット)、もう1つのセットをその結果の信頼性の確認のために使います(テストセット)。

データを分析にかける準備をする

データをランダムに並べ直し、始めの120行をトレーニングデータとします。そして、最後の30行をテストデータとします。

  1. Fisher's Iris Dataのワークシートに戻ります。
  2. 新しい列を追加し、この列に正規乱数を入力します(列ヘッダを右クリックし、列値の一律設定:正規乱数を選択)。
  3. 新しく追加した列を選択してください。右クリックして、ショートカットメニューからソート(ワークシート):昇順を選択します。


Notes: Originは正規乱数として毎回ランダムに数値を入力するので、毎回結果が変わります。

このチュートリアルと同じ結果を得るには、Samplesフォルダ内にあるTutorial Data.opjを開き、プロジェクトエクスプローラDiscriminant Analysis (Pro Only)サブフォルダを開きます。その中にあるFisher’s Iris Dataワークシートの列Fのデータを使用します。

判別分析を実行する

  1. 列Aから列Dを選択します。
  2. メニューから統計: 多変量解析: 判別分析を選んでdiscrimダイアログを開きます。
  3. 列Aから列Dまでの始めの120行のデータをトレーニングデータのグループとして設定するにはトレーニングデータの隣にある三角形ボタンButton Select Data Right Triangle.pngを押してコンテキストメニューで列の選択を選びます。
    Discrim dialog 1B.png
  4. 列ブラウザダイアログでは下のパネルにある ... ボタンをクリックします。データ範囲を1 から 120にします。OKをクリックします。
    Discrim dialog 1C.png
  5. 列Eの始めの120行をトレーニングデータのグループに設定するにはトレーニングデータのグループの隣にある三角形ボタンButton Select Data Right Triangle.pngを押して、コンテキストメニューからE(Y): Speciesを選びます。もう一度トレーニングデータのグループ三角形ボタンButton Select Data Right Triangle.pngをクリックし、列の選択をコンテキストメニューから選び、列ブラウザで範囲を1から120に設定します。OKをクリックします。
  6. テストデータの予測チェックボックスのチェックを付けます。テストデータのインタラクティブボタンButton Select Data Interactive.pngをクリックします。するとダイアログが縮小します。ワークシート内で列Aから列Dを選択します。小さくなったダイアログにあるボタンをクリックし、ダイアログを元に戻します。列ブラウザを開くために三角形ボタンButton Select Data Right Triangle.pngをクリックしてからコンテキストメニューで列の選択を選びます。下のパネル内で ... ボタンをクリックし、範囲を121から150に設定します。
    Discrim dialog 1D.png
  7. ラベルタブを開き、有効にするにチェックを付けます。OKをクリックします。
    Discrim dialog 1E.png

Cross-validation

Discriminant Analysis Report1ワークシートに移動します。トレーニングデータのクロス検証サマリー表は推定のエラー率を各データを分類しながらモデル計算からは外しておいたものです。この手法はサブセット検証よりも「楽観的」ではあります。
Cross Validation Summary.png

サブセット検証

  1. テストデータの分類サマリー表はテストデータの分類情報を示しています。
    Classification Summary Test Data.png
  2. Fisher's Iris Dataのワークシートで、列E/Speciesの最後の30行(121から150)をコピーします。
  3. TestResultのワークシートに、1列(E)を追加します。コピーした値を新しい列に貼り付けます。
  4. ワークシートに新しい列(列F)を追加し、右クリックして列値の設定をコンテキストメニューから選びます。開いたダイアログでCompare(col(A),col(E))と入力します。そしてOKをクリックします。
    Discrim Set Value.png
  5. 30個の値のうち、0になったものはありません。これはテストデータのエラー率が0である事を示しています。この判別モデルの性能は良いようです。

事前確率の修正

判別分析はグループメンバーシップの事前確率は同一であると仮定しています。もしグループ集団数が等しくない場合、事前確率は変わってくるかもしれません。この場合、事前確率オプションでグループサイズに比例を選択します。

  1. シートDiscrim2を開き、トレーニングデータの分類サマリーブランチのエラー率の表にある事前行を開きます。これは、このグループに属する事前確率を示しています。この事例は3つのグループ全てに当てはまる確率が等しくあるという前提で行われます。事前確率をグループの大きさに合わせて調節すると、全体の分類確率も良くなります。
    Discrim error rate.png
  2. Icon Recalculate Manual Green.png ボタンをクリックし、コンテキストメニューからパラメータの変更を選択します。事前確率のラジオボックスではグループサイズに比例を選びます。OK ボタンをクリックします。
    Discrim dialog 1F.png
  3. 分類エラー率は2.50%である事が分かり、事前確率のエラー率が等しい場合の2.63%よりも良い値です。
    Discrim error rate compare.png