R語言----邏輯迴歸實例(R包mtcars數據集舉例)

簡單邏輯迴歸模型可以先參考這篇文章學習下
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%左右
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章