Rで線形判別分析を実装する方法は?



この記事では、線形判別分析とは何かを説明し、Rプログラミング言語を使用した詳細なデモンストレーションも提供します。

線形判別分析は、分類の問題を解決するために使用される非常に人気のある機械学習手法です。この記事では、このテクニックの背後にある直感と数学を理解しようとします。でのLDAの実装例 R も提供されます。

それでは始めましょう





線形判別分析の仮定

線形判別分析は、次の仮定に基づいています。

  • 従属変数 Y 離散的です。この記事では、従属変数がバイナリであり、クラス値をとると仮定します {+ 1、-1} 。クラスに属するサンプルの確率 +1 、つまり P(Y = +1)= p 。したがって、サンプルがクラスに属する確率 -1 です 1-p



  • 独立変数 バツ ガウス分布から来ています。ガウス分布の平均は、クラスラベルによって異なります Y 。つまり、 Y = +1 、次にの平均 バツ です &#120583 +1 、そうでなければそれは &#120583 -1 。分散 &#120590 2 両方のクラスで同じです。数学的に言えば、 X |(Y = +1)〜N(&#120583 +1 、&​​#120590 2 そして X |(Y = -1)〜N(&#120583 -1 、&​​#120590 2 、 どこ N は正規分布を示します。

この情報を使用して、同時分布を構築することが可能です P(X、Y) 独立変数と従属変数の場合。したがって、LDAはのクラスに属します 生成分類モデル 。密接に関連する生成分類器は、二次判別分析(QDA)です。これは、クラスの分散が異なることを除いて、LDAのすべて同じ仮定に基づいています。

線形判別分析の記事を続けて見てみましょう



直感

のクラス条件付きガウス分布を検討してください バツ クラスを与えられた Y 。次の図は、分布の密度関数を示しています。この図では、 Y = +1 、次にの平均 バツ は10で、 Y = -1 、平均は2です。どちらの場合も分散は2です。

直感-線形判別分析-Edureka

ここで、の新しい値を想定します。 バツ 私たちに与えられます。とだけ言いましょう バツ 。タスクは、このための最も可能性の高いクラスラベルを決定することです バツ 、つまり Y 。簡単にするために、確率を仮定します p クラスに属するサンプルの +1 クラスに所属しているのと同じです -1 、つまり p = 0.5

直感的には、 バツ に近い &#120583 +1 それよりも &#120583 -1 、それからそれはより可能性が高いです Y = +1 。より正式には、 Y = +1 場合:

| x -&#120583 +1 |<|x -&#120583 -1 |

標準偏差で両側を正規化する:

| x -&#120583 +1 | /&#120590<|x -&#120583 -1 | /&#120590

両側を二乗する:

(バツ -&#120583 +1 2 /&#120590 2 <(x -&#120583 -1 2 /&#120590 2

バツ 2 /&#120590 2 +&#120583 +1 2 /&#120590 2 --2 x &#120583 +1 /&#120590 2 2 /&#120590 2 +&#120583 -1 2 /&#120590 2 --2 x &#120583 -1 /&#120590 2

2 x (&#120583 -1 -&#120583 +1 )/&#120590 2 -(&#120583 -1 2 /&#120590 2 -&#120583 +1 2 /&#120590 2 )<0

-2 x (&#120583 -1 -&#120583 +1 )/&#120590 2 +(&#120583 -1 2 /&#120590 2 -&#120583 +1 2 /&#120590 2 )> 0

上記の式は次の形式です bx + c> 0 どこ b = -2(&#120583 -1 -&#120583 +1 )/&#120590 2 そして c =(&#120583 -1 2 /&#120590 2 -&#120583 +1 2 /&#120590 2

方程式の形式が次のようになっていることは明らかです。 線形 、したがって、名前線形判別分析。

線形判別分析の記事を続けて、以下を見てみましょう。

Javaリモートメソッド呼び出しの例

LDAの数学的記述

LDAの式の数学的導出は、次のような概念に基づいています。 ベイズの定理 そして ベイズの定理分類器 。興味のある読者は、これらの概念についてもっと読むことをお勧めします。式を導出する1つの方法を見つけることができます ここに

特定の場合に直接式を提供します Y 2つのクラスを取ります {+ 1、-1} 。また、前のセクションで示した直感を、次のような一般的なケースに拡張します。 バツ 多次元にすることができます。あるとしましょう 独立変数。この場合、クラスは &#120583 -1 そして &#120583 +1 次元のベクトルになります k * 1 および分散共分散行列 &#120622 次元のマトリックスになります k * k

分類関数は次のように与えられます。

Y = h(X)=符号(b T X + c)

どこ、

b = -2&#120622 -1 (&#120583 -1 -&#120583 +1

c =&#120583 -1 T &#120622 -1 &#120583 -1 -&#120583 -1 T &#120622 -1 &#120583 -1 {-2 ln(1-p)/ p}

符号関数は +1 式の場合 b T x + c> 0 、それ以外の場合は戻ります -1 。の自然対数項 c クラスの確率が両方のクラスで等しい必要がないという事実を調整するために存在します。 p 0.5だけでなく、(0、1)の間の任意の値にすることができます。

モデルパラメータの学習

与えられたデータセット N データポイント (バツ 1 、Y 1 )、 (バツ 2 、Y 2 )、… (バツ n 、Y n 、見積もりが必要です p、&#120583 -1 、&​​#120583 +1 そして &#120622 。と呼ばれる統計的推定手法 最尤推定 これらのパラメータを推定するために使用されます。上記のパラメータの式を以下に示します。

&#120583 +1 =(1 / N +1 )* &#120506 i:yi = + 1 バツ

Javaプラットフォームのコンポーネントは何ですか?

&#120583 -1 =(1 / N -1 )* &#120506 i:yi = -1 バツ

p = N +1 / N

&#120622 =(1 / N)* &#120506 = 1:N (バツ -&#120583 ) (バツ -&#120583 T

どこ N +1 =サンプル数ここでy = +1 そして N -1 =サンプル数ここでy = -1

上記の式で、LDAモデルが完成します。上記の式を使用してモデルパラメータを推定し、それらを分類関数で使用して、独立変数の新しい入力値のクラスラベルを取得できます。 バツ

線形判別分析の記事を続けて見てみましょう

Rの例

次のコードは、2つの独立変数を持つダミーデータセットを生成します X1 そして X2 および従属変数 Y 。ために X1 そして X2 、平均を使用して2つの多変量ガウス分布からサンプルを生成します &#120583 -1 =(2、2) そして &#120583 +1 =(6、6) 。サンプルの40%はクラスに属しています +1 そして60%はクラスに属しています -1 したがって、 p = 0.4

library(ggplot2)library(MASS)library(mvtnorm)#ランダム2変量ガウスサンプルの分散共分散行列var_covar = matrix(data = c(1.5、0.3、0.3、1.5)、nrow = 2)#クラス+のランダム2変量ガウスサンプル1 Xplus1<- rmvnorm(400, mean = c(6, 6), sigma = var_covar) # Random bivariate gaussian samples for class -1 Xminus1 <- rmvnorm(600, mean = c(2, 2), sigma = var_covar) #Samples for the dependent variable Y_samples <- c(rep(1, 400), rep(-1, 600)) #Combining the independent and dependent variables into a dataframe dataset <- as.data.frame(cbind(rbind(Xplus1, Xminus1), Y_samples)) colnames(dataset) <- c('X1', 'X2', 'Y') dataset$Y <- as.character(dataset$Y) #Plot the above samples and color by class labels ggplot(data = dataset)+ geom_point(aes(X1, X2, color = Y)) 

上の図では、青い点はクラスのサンプルを表しています +1 赤いものはクラスからのサンプルを表しています -1 。サンプル間にはいくつかの重複があります。つまり、クラスを単純な線で完全に分離することはできません。言い換えれば、彼らは完全ではありません 線形分離可能

上記のデータを使用してLDAモデルをトレーニングします。

#上記のデータセットlda_modelを使用してLDAモデルをトレーニングします<- lda(Y ~ X1 + X2, data = dataset) #Print the LDA model lda_model 

出力:

グループの事前確率:

-十一

0.6 0.4

グループの意味:

X1 X2

-1 1.928108 2.010226

1 5.961004 6.015438

線形判別式の係数:

LD1

X1 0.5646116

X2 0.5004175

ご覧のとおり、モデルによって学習されたクラス平均は、クラスに対して(1.928108、2.010226)です。 -1 および(5.961004、6.015438)クラスの場合 +1 。これらの平均は、これらのランダムサンプルを生成するために使用したクラス平均に非常に近いものです。グループの事前確率 +1 パラメータの推定値です p 。ザ・ b ベクトルは線形判別係数です。

上記のモデルを使用して、同じデータのクラスラベルを予測します。

#LDAモデルy_predを使用して、上記のデータセット内の各サンプルのクラスを予測する<- predict(lda_model, newdata = dataset)$class #Adding the predictions as another column in the dataframe dataset$Y_lda_prediction <- as.character(y_pred) #Plot the above samples and color by actual and predicted class labels dataset$Y_actual_pred <- paste(dataset$Y, dataset$Y_lda_prediction, sep=',') ggplot(data = dataset)+ geom_point(aes(X1, X2, color = Y_actual_pred))

上の図では、紫色のサンプルはクラスからのものです +1 LDAモデルによって正しく分類されたもの。同様に、赤いサンプルはクラスからのものです -1 正しく分類されました。青いものはクラスのものです +1 しかし、誤って分類された -1 。緑のものはクラスのものです -1 として誤分類された +1 。これらのサンプルが実際のクラス平均よりも他のクラス平均(中心)に近いため、誤分類が発生しています。

これでこの記事は終わりです。 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。 EdurekaのRトレーニングを使用したデータ分析は、Rプログラミング、データ操作、探索的データ分析、データ視覚化、データマイニング、回帰、感情分析、および小売、ソーシャルメディアの実際のケーススタディのためのRStudioの使用に関する専門知識を習得するのに役立ちます。

質問がありますか?この記事のコメントセクションにその旨を記載してください。できるだけ早くご連絡いたします。