R语言:逻辑回归算法的实现——glm函数

在前文中,我们已经介绍过了逻辑回归算法的原理以及其python实现,具体请见逻辑回归算法及其python实现

本文将主要介绍逻辑回归算法的R语言实现。


数据简介

本文数据选择了红酒质量分类数据集,这是一个很经典的数据集,原数据集中“质量”这一变量取值有{3,4,5,6,7,8}。为了实现二分类问题,我们添加一个变量“等级”,并将“质量”为{3,4,5}的观测划分在等级0中,“质量”为{6,7,8}的观测划分在等级1中。

数据下载戳我

因变量:等级

自变量:非挥发性酸性、挥发性酸性、柠檬酸、剩余糖分、氯化物、游离二氧化硫、二氧化硫总量、浓度、pH、硫酸盐、酒精

library(openxlsx)
wine = read.xlsx("C:/Users/Mr.Reliable/Desktop/classification/winequality-red.xlsx") 
#将数据集分为训练集和测试集,比例为7:3
train_sub = sample(nrow(wine),7/10*nrow(wine))
train_data = wine[train_sub,]
test_data = wine[-train_sub,]

逻辑回归的实现

逻辑回归算法使用glm函数,family参数选择binomial即可,不需要额外下载R包。

实现逻辑回归

wine_logistic <- glm(等级 ~  非挥发性酸性+挥发性酸性+柠檬酸+剩余糖分
                                        +氯化物+游离二氧化硫+二氧化硫总量+浓度
                                        +pH+硫酸盐+酒精,
                                       data = train_data, family = "binomial")
#对逻辑回归结果进行汇总
summary(wine_logistic)                                   

我们要根据汇总的结果提出变量,将那些p值小于0.5的变量剔除,重新运行逻辑回归算法,直到模型中的变量都是显著的。

在本例中,模型剔除了“非挥发性酸性”、“剩余糖分”、“柠檬酸”、“浓度”和“pH”。
最终的代码为:

wine_logistic <- glm(等级 ~  挥发性酸性+氯化物+游离二氧化硫+二氧化硫总量
                  +硫酸盐+酒精, data = train_data, family = "binomial")
summary(wine_logistic)  

汇总结果如下:
R语言:逻辑回归算法的实现——glm函数

ROC曲线和AUC值

#对测试集进行预测
pre_logistic<-as.numeric(predict(wine_logistic,newdata=test_data,type="response")>0.5)
#将测试集计算所得概率与观测本身取值整合到一起
obs_p_logistic = data.frame(prob=pre_logistic,obs=test_data$等级)
#输出混淆矩阵
table(test_data$等级,pre_logistic,dnn=c("真实值","预测值"))   
#绘制ROC曲线
logistic_roc <- roc(test_data$等级,pre_logistic)
plot(logistic_roc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),grid.col=c("green", "red"), max.auc.polygon=TRUE,auc.polygon.col="skyblue", print.thres=TRUE,main='逻辑回归ROC曲线')

R语言:逻辑回归算法的实现——glm函数

上一篇:OpenGL学习笔记一之实战篇五 2D游戏(Breakout)之渲染精灵


下一篇:伽玛回归仅拦截