9

私は、単純な分類問題に対して MATLAB を使用してロジスティック回帰を行うことに取り組んでいます。私の共変量は 0 ~ 1 の範囲の 1 つの連続変数ですが、カテゴリ応答は 0 (不正解) または 1 (正解) の 2 値変数です。

ロジスティック回帰を実行して、入力観測値 (上記の連続変数など) が正しいか正しくないかの確率を出力する予測子を確立しようとしています。これはかなり単純なシナリオですが、MATLAB でこれを実行するのに問題があります。

私のアプローチは次のとおりです。X連続変数の値を含む1 つの列ベクトルと、各値(0 または 1 など)Yの既知の分類を含む別の同じサイズの列ベクトルがあります。X私は次のコードを使用しています:

[b,dev,stats] = glmfit(X,Y,'binomial','link','logit');

ただし、これによりp = 1.000、係数 ( b) が非常に高く (-650.5、1320.1)、関連する標準誤差値が 1e6 のオーダーである無意味な結果が得られます。

次に、追加のパラメーターを使用して、二項サンプルのサイズを指定しようとしました。

glm = GeneralizedLinearModel.fit(X,Y,'distr','binomial','BinomialSize',size(Y,1));

これにより、私が期待したものとより一致する結果が得られました。glmval推定値の作成に使用される係数を抽出し( Y_fit = glmval(b,[0:0.01:1],'logit');)、フィッティング用の配列を作成しました ( X_fit = linspace(0,1))。を使用して元のデータとモデルのプロットを重ね合わせたところfigure, plot(X,Y,'o',X_fit,Y_fit'-')、結果として得られたモデルのプロットは、ロジスティック回帰プロットで典型的な「S」字型プロットの 1/4 の下のように見えました。

私の質問は次のとおりです。

1) を使用するとglmfit奇妙な結果が得られたのはなぜですか?
2) 最初の質問にどのように対処すればよいですか: 入力値が与えられた場合、その分類が正しい確率はどれくらいですか?
3) モデル パラメータの信頼区間を取得するにはどうすればよいですか? からの出力glmvalを入力できるはずですが、私の使用では正しい結果が得られません。 statsglmfitglmfit

コメントや入力は非常に役立ちます。ありがとうございます。

更新 (2014 年 3 月 18 日)

mnrval妥当な結果が得られるように思われることがわかりました。[b_fit,dev,stats] = mnrfit(X,Y+1);whereを使用しY+1て、バイナリ分類子を名義分類子にするだけです。

適切な入力範囲と「ii = 1:length(loopVal)」 で、さまざまな確率値[pihat,lower,upper] = mnrval(b_fit,loopVal(ii),stats);を取得するためにループできます。pihatloopVal = linspace(0,1)

このstatsパラメーターには大きな相関係数 (0.9973) がありますが、p 値b_fitは 0.0847 と 0.0845 であり、解釈方法がよくわかりません。何かご意見は?また、なぜ私の例でmrnfitうまくいくのでしょうか? を使用した場合の係数の p 値は両方ともであり、係数の推定値もまったく異なっていた glmfitことに注意してください。GeneralizedLinearModel.fitp<<0.001

最後に、関数devからの出力をどのように解釈するのでしょうか? mnrfitMATLAB ドキュメントには、「解ベクトルでの適合の逸脱。逸脱は、残差二乗和の一般化である」と記載されています。これはスタンドアロンの値として有用ですか、それともdev他のモデルの値と比較するだけですか?

4

1 に答える 1

3

あなたのデータは線形に分離できるようです。つまり、入力データは 1 次元であるためx、 のすべての値がx < xDiv1 つのクラスに属し (たとえばy = 0)、 のすべての値がx > xDiv別のクラスに属する( などy = 1) という値があることを意味します。

Xデータが 2 次元の場合、これは、特定のクラスのすべてのインスタンスが線の片側にあるように、2 次元空間を通る線を引くことができることを意味します。

これは、ロジスティック回帰 (LR) にとって悪いニュースです。LR は、データが線形に分離できる問題を扱うことを実際には意図していないからです。

ロジスティック回帰は、次の形式の関数に適合しようとしています。

ロジスティック回帰

これは、分母の指数内の式が負の無限大または無限大にある場合にのみ、y = 0またはの値を返します。y = 1

ここで、データが線形分離可能であり、Matlab の LR 関数がデータに適合する最尤法を見つけようとするため、極端な重み値が得られます。

これは必ずしも解決策ではありませんが、データ ポイントの 1 つだけでラベルを反転してみてください (つまり、 setのインデックスのt場合)。これにより、データが線形分離できなくなり、学習した重み値が劇的にゼロに近づきます。y(t) == 0y(t) = 1

于 2014-03-23T17:46:55.437 に答える