这个监督学习工具本质上用于转化线性回归的输出,以便它能拟合到二元响应之中。逻辑回归针对响应归属于特定归类的概率进行建模,而不是直接对相应变量进行建模,用于解决分类问题。
- 数据中要利用二元响应创建新的一列数据,布尔值。
- 广义线性模型是包含逻辑回归的一类模型。
family:每一种响应分布(指数分布族)允许各种关联函数将均值和线性预测器关联起来。
常用的family:
binomal(link=’logit’) —-响应变量服从二项分布,连接函数为logit,即logistic回归
binomal(link=’probit’) —-响应变量服从二项分布,连接函数为probit
poisson(link=’identity’) —-响应变量服从泊松分布,即泊松回归
control:控制算法误差和最大迭代次数
glm.control(epsilon = 1e-8, maxit = 25, trace = FALSE)
logistic函数算法步骤
逻辑回归问题其实是将回归的思想用于分类问题
Step 1: 通过自变量利用回归分析的思想得到因变量预测值y
Step 2: 通过logistic函数(也称Sigmoid函数,是一种对数线性模型)将因变量的预测值y映射到(0,1)区间内,设为w, w其实是分类为正类的概率。(通过logistic函数,我们可以将预测值y从(−∞,∞)一一映射到(0,1)内。)
Step 3: 设立一个阈值,当w大于阈值时,将其分为正类;否则将其分为负类.
- 将数据64分为训练集和测试集
data("iris")
n<-nrow(iris)
ntrain<-round(n*0.6)
set.seed(333)
tindex<-sample(n,ntrain)
train_iris<-iris[tindex,]
text_iris<-iris[-tindex,]
newcol<-data.frame(isVersicolor=(train_iris$Species=="vericolor"))
train_iris<-cbind(train_iris,newcol)
- 一元预测因子
glm1<-glm(isVersicolor~Sepal.Width,data=train_iris,family=binomial)
summary(glm1)
plot(train_iris$Sepal.Width, train_iris$isVersicolor)
curve(predict(glm1,
data.frame(Sepal.Width=x),type="response"),add=TRUE) #曲线为训练集中Sepal.Width对应的概率;
- 多元预测因子
formula<-isVersicolor~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width
glm2<-glm(formula,data=train_iris,family="binomial")
summary(glm2)
prob<-predict(glm2,newdata=test_iris,type="response") #表示R输出预测因子对应的响应概率。
round(prob,3)
ROC曲线
library(pROC)
newcol.test<-data.frame(isVersicolor=(test_iris$Species=="versicolor"))
test_iris<-cbind(test_iris,newcol.test)
pre_iris<- as.numeric(predict(glm2,newdata=test_iris,type="response")>0.5)
#绘制ROC曲线
logistic_roc <- roc(as.numeric(test_iris$isVersicolor),pre_iris)
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曲线')
ROC
参考:https://blog.csdn.net/weixin_43216017/article/details/86768509等
网友评论