Logisic regression
Logistic迴歸是基於一個或多個預測變量(x)預測個體的類別(或類別),用於建模一個二元結果,即一個變量,它只能有兩個可能的值:0或1、是或否、患病或不患病。
Logistic迴歸屬於GLM族,它不直接返回觀測的類別。它允許我們估計類成員的概率(p)。概率範圍在0到1之間。我們需要確定類別從一個類別到另一個類別的閾值概率。默認情況下,這個值設置爲p = 0.5,但實際上應該根據分析目的來確定。
如果你對GLM很熟悉,那 LR 僅僅是 GLM 指數家族中 Binominal 的例子而已,是非常清晰簡單的。
GLM 中 Binominal 響應變量有兩種寫法,一種是 直接寫 [0,1] 之間的概率,一種是 使用cbind 寫出兩種響應的比例。
這裏不會細些其數學形式,在GLM中可以看到。
一個使用的例子
描述思路:
注意這裏僅僅是單變量,不過多變量場景也相似,很容易就可以加進去。
使用“glm()”函數在trainSet上建立模型,然後對testSet進行預測。使用默認的cutoff = 0.5將點分組(即如果一個點屬於Group1的後驗概率大於cutoff,則將該點分配給Group1,否則分配給Group0),然後使用該預測來計算混淆矩陣 confusion matrix 。
然後我們可以繪製ROC並嘗試使用“Youden Index”方法,即選擇到左上角距離最短的點來獲得一個新的cutoff / threshold 。然後將測試集點重新分配到組中,並計算新的混淆矩陣來查看哪個截止點更好。
> model3 <- glm(Group~.,family=binomial,data=trainSet)
> a=predict(model3,newdata=testSet,type="response")
> b=ifelse(a>0.5,1,0)
> confusionMatrix(as.factor(b),as.factor(testSet$Group))
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 16 15
1 43 126
Accuracy : 0.71
95% CI : (0.6418, 0.7718)
No Information Rate : 0.705
P-Value [Acc > NIR] : 0.4733208
Kappa : 0.1912
Mcnemar's Test P-Value : 0.0003922
Sensitivity : 0.2712
Specificity : 0.8936
Pos Pred Value : 0.5161
Neg Pred Value : 0.7456
Prevalence : 0.2950
Detection Rate : 0.0800
Detection Prevalence : 0.1550
Balanced Accuracy : 0.5824
'Positive' Class : 0
> roc.plot(testSet$Group, a)
> roc_obj <- roc(testSet$Group, a)
> cutoff <- coords(roc_obj,x="best",input="threshold", best.method = "youden")
> cutoff
threshold specificity sensitivity
0.7226559 0.6271186 0.6737589
> b=ifelse(a > 0.72,1,0)
> confusionMatrix(as.factor(b),as.factor(testSet$Group))