说明
逻辑回归属于概率统计的分类算法模型的算法,是根据一个或者多个特征进行类别标号预测。在R语言中可以通过调用logit函数执行逻辑回归分类算法并预测输出概率。通过调用glm函数将family参数也就是响应分布指定为binominal(二项式),就是使用逻辑回归算法。
操作
同进述内容一样准备好训练数据集与测试数据集。
fit = glm(churn ~ .,data = trainset,family = binomial)
summary(fit)
Call:
glm(formula = churn ~ ., family = binomial, data = trainset)
Deviance Residuals:
Min Q Median Q Max
-
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) < ***
international_plan1 - - < ***
voice_mail_plan1 *
number_vmail_messages - -
total_day_minutes
total_day_calls - -
total_day_charge - -
total_eve_minutes
total_eve_calls - -
total_eve_charge - -
total_night_minutes
total_night_calls
total_night_charge - -
total_intl_minutes
total_intl_calls ***
total_intl_charge - -
number_customer_service_calls - - < ***
---
Signif. codes: ‘***’ ‘**’ ‘*’ ‘.’ ‘ ’
(Dispersion parameter for binomial family taken to be )
Null deviance: on degrees of freedom
Residual deviance: on degrees of freedom
AIC:
Number of Fisher Scoring iterations:
找到分类模型中包含的可能导致错误分类的非显著变量,仅使用显著的变量来训练分类模型。
fit = glm(churn ~ international_plan + voice_mail_plan + number_customer_service_calls,data = trainset,family = binomial)
summary(fit)
Call:
glm(formula = churn ~ international_plan + voice_mail_plan +
number_customer_service_calls, family = binomial, data = trainset)
Deviance Residuals:
Min Q Median Q Max
-
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) < ***
international_plan1 - - < ***
voice_mail_plan1 ***
number_customer_service_calls - - < ***
---
Signif. codes: ‘***’ ‘**’ ‘*’ ‘.’ ‘ ’
(Dispersion parameter for binomial family taken to be )
Null deviance: on degrees of freedom
Residual deviance: on degrees of freedom
AIC:
Number of Fisher Scoring iterations:
调用fit使用一个内置模型来预测testset数据集的输出,可以通过调整概率是否高于0.5来改变类别标记的输出结果。
#这是选择预测之后的输出结果,这个参数能用在binomial数据,也就是响应变量是二分型的时候,这个参数选成type=response,表示输出结果预测响应变量为1的概率。
pred = predict(fit,testset,type = "response")
#将ped中概率大于0.5的设置TRUE,代表为“no”,没有流失客户,1
#将ped中概率小于0.5的设置FALSE,代表为“yes”,有流失
客户,
Class = pred >
summary(Class)
Mode FALSE TRUE
logical
对测试数据集的分类和预测结果进行统计分析计数:
tb = table(testset$churn,Class)
> tb
Class
FALSE TRUE
yes
no
将上一步骤的统计结果用分类形式表输出,并生成混淆矩阵
churn.mod = ifelse(testset$churn == "yes",,)
> churn.mod
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
将Class转化成numeric
ABC与churn.mod 中0,1代表的意思相反,将ABC进行数值取反
计算混淆矩阵
confusionMatrix(churn.mod,BC)
Confusion Matrix and Statistics
Reference
Prediction
Accuracy :
% CI : (, )
No Information Rate :
P-Value [Acc > NIR] :
Kappa :
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.8727
Specificity : 0.5357
Pos Pred Value : 0.9852
Neg Pred Value : 0.1064
Prevalence : 0.9725
Detection Rate : 0.8487
Detection Prevalence : 0.8615
Balanced Accuracy : 0.7042
'Positive' Class : 0
逻辑回归算法和线性回归非常相似,两者区别是在于线性回归算法中的变量是连续变量,而逻辑回归响应变量是二分类的变量(名义变量),使用逻辑回归算法主要目的是利用logit模型去预测和测量变量相关的名义变量的概率。逻辑回归公式:ln(P/(1-P)),P为某事情发生的概率。
逻辑回归的算法的优势是在于算法易于理解,能够直接输出预测模型的逻辑概率逻辑值以及结果的置信区间,与决策树难以更新模型不同,逻辑回归算法能够迅速在逻辑回归算法中合并新的数据,更新分类模型,逻辑回归算法的不足是无法处理多重共线性问题,因此解决变量必须线性无关。glm提供了一个通用的线性回归模型,可以通过设置family参数得到,当为binomial回归时,可以实现二元分类。
调用fit函数预测测试数据集testset的类别响应变量,fit函数能够输出类标号的概率,如果概率值小于等于0.5,意味预测得出的类标号与测试数据集的实际类标号不相符,如果大于0.5则说明两者是一致的,进一步调用summsary函数来得到预测的模型。最后进行计数统计与混淆矩阵。