理論上,回歸分析是在目標變量為連續型數據的情況下建模的,它不能處理目標變量為分類型數據的情況。
而logic回歸分析的思路是把分類變量(“是否開通VIP”)轉化為連續變量(“開通VIP的概率”),進而使用回歸分析的方法間接地研究分類分析的問題。
一、原理
假設vip變量為分類變量,其取值只有0和1,這是分類型變量,無法通過回歸分析建模。
但是,vip取值為1的概率卻是一個連續型變量(prob.vip),可以使用回歸分析為prob.vip建模:
prob.vip=k1*x1+k2*x2+k3*x3+k4*x4+b
由於k1*x1+k2*x2+k3*x3+k4*x4+b 的取值范圍是(-∞,+∞),而prob.vip的范圍是[0,1],因此,使用y=1/(1+exp(-x))函數進行轉化:
prob.vip=1/(1+exp(-(k1*x1+k2*x2+k3*x3+k4*x4+b)))
當prob.vip>0.5,則可以預測vip.predict=1,否則為0。
注:回歸分析使用最小二乘法擬合模型參數;logic回歸則使用最大似然法來估算。
二、R語言實現
glm()是用R語言實現logic回歸分析的核心函數。
參數:
formula:設置線性擬合模型的形式
family:glm的算法族。logic回歸分析,family設置為binomial("logit")
data:樣本數據
代碼:
(1)建立logic回歸模型
data.glm<- glm(vip~.,data=vip.data,family=binomial("logit")) summary(data.glm) 可以使用step函數對模型進行修正: data.glm<- step(data.glm)
(2)模型glm的輸出項
模型參數:data.glm$coefficients
線性模型的預測數據:data.glm$linear.predictors
vip等於1的概率prob.vip: data.glm$fitted.values
線性擬合模型的殘差:data.glm$residuals
(3)模型預測
預測測試數據:
predict.vip <- ifelse(data.glm$fitted.values>= 0.5,1,0)
predict.vip <- as.factor(predict.vip)
預測新數據:
new.predict.vip<- predict(data.glm,newdata=test.vip.data) 線性擬合數據的預測值
new.predict.vip<- 1/(1+exp(-new.predict.vip)) 概率值
new.predict.vip<- as.factor(ifelse(new.predict.vip>= 0.5,1,0))預測最終值
(4)模型性能衡量
performance<- length(which((predict.vip==vip.data$vip)==TRUE))/nrow(vip.data) 正確率
其中,length(which((predict.vip==vip.data$vip)==TRUE))表示預測值與實際樣本值元素取值相等的數目。