簡單邏輯迴歸模型可以先參考這篇文章學習下
https://blog.csdn.net/weixin_41744624/article/details/105506951
數據預覽
我們使用的是R自帶包mtcars中的數據來舉例,其中響應變量(y)是數據集中的"am"
異常值檢驗
首先來檢查一下數據集的異常值(缺失、離羣、重複),需要根據數據的具體情況確認是否去除,本例中不考慮重複值
離羣值
可以選擇箱線圖,mvoutlier包中的sing2等函數
在此我們選擇箱線圖演示,繪製數據集中預測變量(x)與am的關係,查看有無離羣值:
boxplot(mtcars$mpg~am,mtcars)
缺失值
rowSums(is.na(raw_data))
缺失值處理可以採取如下分割數據集策略,本例中沒有缺失值:
>d_n <- raw_data[which(rowSums(is.na(raw_data)) > 0),]
>d_nn <- raw_data[-which(rowSums(is.na(raw_data)) > 0),]
提取數據,分割訓練集,測試集
d <- raw_data
# 保證實驗可重複性
set.seed(110)
train <- createDataPartition(y=d$am,p=0.8,list=FALSE)
d_train <- d[train,]
d_test <- d[-train,]
迴歸模型建立
創建邏輯迴歸模型,首先考慮所有的相應變量與預測變量(am)的模型初步建立是否成功:
glm <- glm(am~.,family = binomial(link ='logit'),data = d_train)
發現警告:擬合概率算出來是數值零或一
擬合出來的值全都是0或者1,說明出現了過擬合的狀態,過擬合的原因是噪音或者數據集太少,我們在前面判斷的時候已經排除了離羣值,所以可能原因應該是數據集太少造成的。
出現錯誤的解釋可以參照這篇文章:
https://www.cnblogs.com/runner-ljt/p/4574275.html
回想一下,R包數據集中的變量有十幾個,但是數據集卻很少,難免會造成過擬合狀態,所以我們選擇使用逐步迴歸分析刪除部分不重要的變量,逐步迴歸分析是以AIC信息統計量爲準則(可以搜索赤池準則),通過選擇最小的AIC信息統計量,來達到刪除或增加變量的目的。
關於逐步迴歸分析可以參考我的這篇文章:
https://blog.csdn.net/weixin_41744624/article/details/105725381
逐步迴歸分析
logit.step <- step(glm, direction = "both")
drop1(logit.step)
我們觀察到其中"gear的AIC也較爲高,我們選擇去除"
新模型建立及預測結果
# 使用去除變量後的數據進行模型訓練
glm <- glm(am ~ qsec+carb,family = binomial(link ='logit'),data = d_train)
#預測模型
pre_test=predict(glm,newdata=d_test,type="response")
#返回預測模型和原數據的混淆矩陣,查看預測結果
confusionMatrix(as.factor(num_test),as.factor(d_test$am))
可以看出模型的準確率在83%左右