【好文翻译】
品言译、陆勤审
每个机器学习在给定设置的条件下可以最高效的运行。确保你的算法符合这个假设/要求,确保它的优越性,所以不是任何情况都能用任何算法的。比如,你是否曾经尝试在一个分类独立变量中使用线性回归分析?没有尝试过!因为你不会重视R平方和F统计里得到的极小值。
与此不同的是,在这种情况下,你应该尝试使用诸如逻辑回归、决策树、SVM、随机森林等的算法。我会推荐你去看 Essentials of Machine Learning Algorithms.。
在这篇文章中,我会给你一些关于R的逻辑回归分析的有用的信息。一旦你掌握了逻辑回归分析,接下来将会随着你旅途中接下来的步骤而来。
我已经尝试以最简单的方法来解释这些概念。那我们开始吧。
什么是逻辑回归分析?
逻辑回归是一个分类算法。这用于预测一个给定的独立变量集的二进制结果(1/0,是/不是,真/假)。为了显示二进制/分类结果,我们会使用虚拟变量。你也可以想一下逻辑回归分析是在结果变量已经分类的线性回归分析中一个特例,尤其是当我们使用一些奇怪的日志作为独立变量的时候。简单来说,它预测了在合适的数据和使用回归函数情况下时间发生的概率。
逻辑回归方程的推导
逻辑回归是一个叫广义线性模型(glm)类的算法的一部分。1972年,Nelder和Weddeburn大力提议这个模型应当提供一个使用线性回归分析来解决那些不能直接用线性回归分析来解决的问题。实际上,他们提议一个包含不同模型(线性回归、ANOVA、泊松回归等)的类,这类包含了逻辑回归这一特例。
广义线性模型的一般方程如下:
g(E(y)) = α + βx1 + γx2
这里,g()是一个连接函数,E(y)是目标变量的期望,而且α + βx1+ γx2 是线性回归预测值( 预测α,β,γ)。连接函数的作用是把y的期望连接到预测值中。
重要的几点
-
GLM不是用来假设从属变量和独立变量之间的线性关系。然而,它假设连接函数和逻辑回归的独立变量之间的线性关系。
-
独立变量不需要被普通分布。
-
它并不对参数估计使用OLS(普通最小二乘法)。而它使用最大似然估计(MLE)。
-
误差需要被独立列出来而不是放在普通分布中。
让我们通过列举一些例子来更好的了解这些点
这里提供了一个1000个顾客的例子,这个例子需要我们预测出顾客是否买一本特别的杂志的概率。就像你之前看到的那样,我们有了一个分类变量的结果,因此我们使用逻辑回归。
为了开始使用逻辑回归,我们需要以连接函数里写上独立变量的格式列出简单的线性回归方程:
g(y) = βo + β(Age) ---- (a)
谨记:方便理解,我们这里以年龄作为独立变量。
在逻辑回归分析中,我们只会考虑独立变量的概率的结果(即成功或失败)。正如上面所描述的那样,g()是一个连接函数。这个函数的建立用于两方面:成功的概率p和失败的概率(1-p),同时还要遵循以下准则:
它的结果总是正的(p>0)。
它总是小于等于1(因为p<=1)。
现在,我们简单的满足这两个条件,然后会涉及到逻辑回归的核心。为了建立连接函数,我们起初会把g()写上g(p),最终会对这个函数进行分解。
因为概率必须保证为正,我们会把线性方程写成e的幂次方的形式。对于每个斜率的值和独立变量,这个方程e的幂次方永远都不会为负。
p = exp(βo + β(Age)) = e^(βo + β(Age)) ------- (b)
为了使概率的值小于1,我们必须要用大于p的数对p进行分解。这里有一个简单的例子:
p = exp(βo + β(Age)) / exp(βo + β(Age)) + 1 = e^(βo + β(Age)) / e^(βo + β(Age)) + 1 ----- (c)
借用(a),(b)和(c),我们重新定义这个概率:
p = e^y/ 1 + e^y --- (d)
假设p是成功的概率。这个(d)是逻辑回归方程。
如果p是成功的概率,那么失败的概率1-p则写成一下形式:
q = 1 - p = 1 - (e^y/ 1 + e^y) --- (e)
这里用q表示失败的概率
(d)和(e)相除,我们可以得到:
两边同时取对数得:
Log(p/1-p)是复合函数。对结果变量进行对数转化允许我们以线性的方式建立一个非线性模型。
通过对y的替换以后得:
这是一个逻辑回归方程。这里的(p/1-p)是让步比。只要当让步比的对数值是正数,它成功的概率必然大于50%。下面展示了一个典型的逻辑模型。你可以从图中看到它的概率用于在0之上,1之下。
逻辑回归模型的性能
为了估计逻辑回归模型的性能,我们必须考虑这样的几个准则。这些准则是无论在使用什么工具(SAS,R,Phyton)下都需要遵守的:
-
AIC(赤池信息准则)—种类似于逻辑回归的类似调整R的称之为AIC。AIC是一个为系数模型而建立的惩罚模型的措施。因此,我们更喜欢从模型中得到其最小值。
-
空值异常和残值异常—空值异常表明了模型并没有给出预测结果,但却给出了相关截距。其值越小,模型就越适用。残值异常表明了一个增加自变量的模型所给出的预测结果。其值越小,模型就越适用。
-
含混矩阵—这里没有别的了,就是一个以表格形式表示的实际值VS预测值。这可以帮助我们找到模型的精度,同时避免过度拟合。它看起来是这样的:
你可以根据以下方法计算模型的精度:
在含混矩阵中,特异性和灵敏度可以由以下方法表示:
特异度和灵敏度对于一个曲线图来说是至关重要的。
曲线图—接收器工作特性(ROC)以权衡真阳性率(灵敏度)和阴性率(1-特异度)来概括模型的性能。为了画出ROC图,我们建议设p>0.5,原因在于我们更关心持续的变化率。ROC概括了所有在p>0.5这个条件下的所有的正值得预测能力。曲线下的区域(AUC),被称之为精度索引或一致性索引,是ROC曲线的完美的性能表现。曲线的区域越高,模型的预测能力也就越强。下面是一个曲线图的例子。ROC的完美预测模型是TP=1,FP=0。这条曲线会无限触及图像的左上角。
注意:对于一个模型的性能你也可以考虑一个类似的函数。也就是说,因为它是选择对解释被观察的数据的相似性进行最大化的系数值。这表明了它的吻合度约等于1,而吻合度不好可能几乎为0。
R的逻辑回归分析模型
考虑它的可行性,我真对一个实际问题建立了一个模型—Dressify数据集。你可以在这里进行下载。倘若没有深入到特征工程,下面有和简单逻辑回归模型相关的脚本:
setwd('C:/Users/manish/Desktop/dressdata')
#load data
train<- read.csv('Train_Old.csv')
#create training and validation data from given data
install.packages('caTools')
library(caTools)
set.seed(88)
split<- sample.split(train$Recommended, SplitRatio = 0.75)
#get training and test data
dresstrain<- subset(train, split == TRUE)
dresstest<- subset(train, split == FALSE)
#logistic regression model
model<- glm (Recommended ~ .-ID, data = dresstrain, family = binomial)
summary(model)
predict<- predict(model, type = 'response')
#confusion matrix
table(dresstrain$Recommended, predict > 0.5)
#ROCR Curve
library(ROCR)
ROCRpred<- prediction(predict, dresstrain$Recommended)
ROCRperf<- performance(ROCRpred, 'tpr','fpr')
plot(ROCRperf, colorize = TRUE, text.adj = c(-0.2,1.7))
#plot glm
library(ggplot2)
ggplot(dresstrain, aes(x=Rating, y=Recommended)) + geom_point() +
stat_smooth(method="glm", family="binomial", se=FALSE)
这个数据需要很多的清洗和特征工程。由于篇幅的限制,我无法深入的和大家探讨一个专门建立一个逻辑回归模型的例子。我已经很多次的看到了人们都知道这个算法实际上是没有其核心概念的知识的。我曾经尝试用最简单的方式对这部分进行相关的解释。之前的例子只是展示了使用R的逻辑回归分析的架构。在真正的走上使用逻辑回归的舞台之前,你必须要投入相当的时间来学习特征工程。
而且,为也建议你做一做这方面的相关习题,你会从中发现一些你之前从未听说过的东西。
我是否还有别的重要的内容忘了说?你是否觉得这篇文章对你来说帮助很大?您可以在留言板那里分享你的看法或者你的观点。
如果你只是想要阅读这篇文章,或者需要继续你的分析学习,可以给我们发邮件,或者关注我们的推特或面书。
原文链接:
http://www.analyticsvidhya.com/blog/2015/11/beginners-guide-on-logistic-regression-in-r/
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!