[英]Simple binary logistic regression using MATLAB
我正在使用MATLAB進行邏輯回歸,以解決一個簡單的分類問題。 我的協變量是一個介於0和1之間的連續變量,而我的分類響應是0(不正確)或1(正確)的二進制變量。
我正在尋找邏輯回歸來建立預測器,該預測器將輸出某些輸入觀察的概率(例如,如上所述的連續變量)是正確的或不正確的。 雖然這是一個相當簡單的場景,但我在MATLAB中運行它時遇到了一些麻煩。
我的方法如下:我有一個列向量X
,它包含連續變量的值,另一個大小相等的列向量Y
包含每個X
值的已知分類(例如0或1)。 我正在使用以下代碼:
[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'-')
重疊原始數據和模型的figure, plot(X,Y,'o',X_fit,Y_fit'-')
模型的結果圖基本上看起來像''的1/4。具有邏輯回歸圖的典型S形圖。
我的問題如下:
1)為什么我使用glmfit
產生奇怪的結果?
2)我應該如何解決我的初始問題:給定一些輸入值,它的分類是正確的概率是多少?
3)如何獲得模型參數的置信區間? glmval
應該能夠輸入glmfit
的stats
輸出,但是我使用glmfit
並沒有給出正確的結果。
任何評論和意見都非常有用,謝謝!
我發現mnrval
似乎給出了合理的結果。 我可以用[b_fit,dev,stats] = mnrfit(X,Y+1);
其中Y+1
簡單地將我的二元分類器變為名義分類器。
我可以遍歷[pihat,lower,upper] = mnrval(b_fit,loopVal(ii),stats);
獲得各種pihat
概率值,其中loopVal = linspace(0,1)
或一些適當的輸入范圍和`ii = 1:length(loopVal)'。
該stats
參數有很大的相關系數(0.9973),但對於P值b_fit
是0.0847和0.0845,這我不太知道如何解釋。 有什么想法嗎? 另外,為什么會mrnfit
在工作glmfit
在我的例子嗎? 我應該注意到,當使用GeneralizedLinearModel.fit
時,系數的p值都是p<<0.001
,系數估計也是非常不同的。
最后,如何解釋mnrfit
函數的dev
輸出? MATLAB文件指出它是“解決方案向量的擬合偏差。偏差是殘差平方和的推廣。” 這是一個獨立的值,還是僅與其他模型的dev
值進行比較?
聽起來您的數據可能是線性可分的。 簡而言之,這意味着由於您的輸入數據是一維的,因此存在x
某個值,使得x < xDiv
所有值x < xDiv
屬於一個類(例如y = 0
),並且x > xDiv
所有值x > xDiv
屬於另一個類( y = 1
)。
如果您的數據是二維的,這意味着您可以在二維空間X
繪制一條線,使得特定類的所有實例都位於該線的一側。
這對於邏輯回歸(LR)來說是個壞消息,因為LR並不是真正意味着處理數據可線性分離的問題。
Logistic回歸試圖擬合以下形式的函數:
當分母中指數內的表達式為負無窮大或無窮大時,這將僅返回y = 0
或y = 1
值。
現在,因為您的數據是線性可分的,並且Matlab的LR函數試圖找到適合數據的最大似然值,您將獲得極端權重值。
這不一定是一個解決方案,但嘗試只在您的一個數據點上翻轉標簽(因此對於某些索引t
,其中y(t) == 0
設置y(t) = 1
)。 這將導致您的數據不再是線性可分的,並且學習的權重值將被顯着拖得更接近於零。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.