3つのクラスに分類するためのロジスティック回帰の理解(および実装)に問題があります


7

(参考までに、私はケビンPマーフィーの本「機械学習:確率論的展望」を使用しており、MATLANを使用して実装しています-ツールボックスなし)

私は392サンプル(行)のデータセットを持っています。各サンプルには8つの特徴(列)があり、そのうちの1つがクラスを定義します(つまり、特徴の列1は3つのクラスを定義する3つの等しいビンに分割されます-低、中、高)。

サンプルをこれら3つのクラスのいずれかに分類するためのロジスティック回帰モデルを作成する方法を理解するのに本当に苦労しています。

重みベクトルの通常の最小二乗(閉じた形)ソリューションと勾配降下(開いた形)ソリューションの両方について学習した線形回帰モデルの学習と作成を終えたところです。しかし、私のデータは重みベクトルのOLSソリューションで完全にうまくフィットしたため、勾配降下法を実装したことはありません。

ロジスティック回帰の重みベクトルの作成方法が非常に混乱しています。閉じた形のソリューションがないため、勾配降下法を使用する必要があることを理解しています。重みを計算するためのニュートン法についても読みましたが、まったく理解できません。

そして、これらのメソッドを使用して重みを計算した後、サンプルデータに重みをどのように適用しますか?線形回帰では、単純に重みに機能(および高次線形回帰の高次機能)を掛けただけでしたが、ロジスティック回帰でも同じですか?

さらに、これまでの私の理解は、このモデルはバイナリ分類でのみ機能するということです。したがって、3つのクラスでどのようにそれを行うのですか?

基本的に私の質問はこれに要約されます:

(勾配降下法またはニュートン法のいずれか簡単な方を使用して)ロジスティック回帰の重みベクトルをどのように正確に見つけ、サンプルに重みベクトルを適用して、3つのクラス(2つだけではない)から分類を取得する方法。


機械学習に関するCourseraコースがあり、ここで行うよりもはるかに優れたこの資料をカバーしています。
カイルジョーンズ

回答:


7

3つのクラス(2つだけではない)の分類を取得するために、サンプルに重みベクトルをどのように適用しますか?

可能なクラスがある場合は、トレーニングデータでロジスティック分類子をトレーニングする必要があります。各分類子は、特定のサンプルが、分類子が認識するようにトレーニングされているクラスのメンバーである確率を出力として生成します。トレーニングが完了したら、新しいサンプルを分類するために、トレーニングされたすべての分類子にサンプルを認識させ、最も高い確率値を生成する分類子の判断を受け入れます。これは、one-vs-allまたはone-vs-rest分類と呼ばれ、バイナリ分類子を使用してマルチクラス分類を行う標準的な方法です。nn

重みは、分類子をトレーニングするときと同じ方法で新しいデータを分類するときに適用されます。サンプルの特徴ベクトルと組み合わせると仮説値を生成する係数を含む重みベクトルがあります。線形回帰の場合、(展開: ...)は、仮説値を生成します。ロジスティック回帰の場合、がロジスティック関数の指数として使用され、仮説値が生成されます。θxθTxθ0+θ1x1+θ2x2+θTx

hθ(x)=11+eθTx
eは通常の自然対数定数です。2.71828

hθ(x)は、サンプルが分類器が認識するクラスのメンバーである確率です。各分類子のを計算し、最大の確率値を生成する分類子の判定を受け入れます。xhθ(x)

どのように正確にロジスティック回帰の重みベクトルを見つけますか(勾配降下法またはニュートン法のいずれか簡単な方を使用)。

勾配降下法は、線形回帰の場合と同じようにロジスティック回帰でも機能します。コスト関数の偏微分を使用して、重みを繰り返しより良い値にナッジすることにより、コスト関数を最小化しようとしています。仮説関数はロジスティック回帰では異なりますが、勾配降下法での使用方法は同じです。線形回帰の勾配降下を行うコードを作成したら、別の仮説関数をプラグインして、ロジスティック回帰で機能させることができます。

勾配降下法の1回の反復の疑似コード:

newtheta := theta;
learning_rate := 0.01;                                                        
for k := 1 to n
   sum := 0
   for i := 1 to m
      sum := sum + (hypothesis(x[i], theta) - y[i]) * x[i][k];              
   end
   nudge := sum * learning_rate;                                            
   newtheta[k] := newtheta[k] - nudge;                                      
end
theta := newtheta;                                                          

xはトレーニングデータを含む行列で、行ごとに1つのサンプルがあります。

yは、各サンプルの正しい分類予測を含むベクトルです。サンプルがクラス内にある場合は1、それ以外の場合は0です。

mはサンプル数です。

nは特徴の数です。

アイデアは、トレーニングセット全体で最小かつ許容可能なコスト(エラー)に達するまで、このプロセスを繰り返すことです。


ロジスティック回帰を多項ロジスティック回帰に拡張しても、勾配降下の凸性を維持できます。ただし、バイナリの勾配降下が困難な場合は、OPの理解を少し超える可能性があります。
Nicholas Mancuso 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.