您好,欢迎访问三七文档
当前位置:首页 > 医学/心理学 > 医学试题/课件 > 机器学习算法常用模型逻辑回归(附上r和python程序)
机器学习算法常用模型—逻辑回归(附上R和python程序)这个介绍主要是方便刚入行的数据科学家。通过这个指导,使你直接解决机器学习的问题以及从中获得经验。而且我会尽量用简单易懂的方式来介绍每一个算法,不会涉及很多数学,而是帮助你从原理上理解每个算法,每一个算法都附上R和Python的程序来帮助你直接去应用程序解决问题。一般经常使用的机器学习算法有以下11种1.线性回归LinearRegression(已完成)2.逻辑回归LogisticRegression(已完成)3.决策树DecisionTree4.随机森林RandomForest5.支持向量机SVM6.朴素贝叶斯NaiveBayes7.最近邻居法KNN8.K平均算法K-Means9.神经网络NeuralNetworks10.降维算法DimensionalityReductionAlgorithms11.梯度提升GradientBoost&Adaboost第二期我们介绍逻辑回归(2)。逻辑回归和线性回归其实都属于广义线性模型的一种,而在决策制定等领域,逻辑回归的应用更加广泛。所以在第一期学习了线性回归之后很自然的就是学习逻辑回归了。什么是逻辑回归?逻辑回归是一种分类的算法,它用给定的输入变量(X)来预测二元的结果(Y)(1/0,是/不是,真/假)。我们一般用虚拟变量来表示二元/类别结果。你可以把逻辑回归看成一种特殊的线性回归,只是因为最后的结果是类别变量,所以我们需要用胜算比取对数来作为因变量(DependentVariable)。简单来说,逻辑回归是利用logit函数拟合数据来预测某一个事件发生的概率的。逻辑回归的起源逻辑回归其实是属于广义线性模型(GeneralizedLinearModel)的一部分。1972年Nelder和Wedderburn发明了这种方法来处理那些用线性回归没法处理的问题。因为如果你用线性回归去处理逻辑回归的二元或类别输出变量时候,最后的结果就是你会得到极低的校正R平方。当然广义线性模型是一个统计上用的非常广的模型,它包含了不止线性回归,逻辑回归,还有泊松回归,ANOVA等等,感兴趣的可以继续进行这方面的阅读。广义线性回归的基本公式是g(E(y))=α+βx1+γx2这里,g()是联系函数(linkfunction),E(y)是目标输出变量Y的期望值,而α+βx1+γx2是输入变量的线性组合(α,β,γ都是需要用数据估计的参数)。联系函数的作用是将输出变量Y的期望值和输入变量X的线性组合可以连接起来,起到一个桥的作用。主要备注:I.广义线性模型(简称GLM)因为有联系函数的存在,所以不需要输出变量和输入变量一定有线性关系。但是它假设输出变量Y的期望值算出来的联系函数的值必须和输入变量有线性关系。II.GLM并不使用回归分析中经常使用的最小二乘法来估计模型参数的值,而是使用最大似然法则来估计参数的值(MaximumLikelihoodEstimation,简称MLE)。MLE是统计学中只要涉及到参数模型一定都要搞清楚的重要基础概念。大部分的参数模型都会假设随机变量的分布,有了分布之后能写出模型的似然函数,而模型中的参数就可以用最大似然函数来估计。III.因为有联系函数的存在,所以输出变量Y也不需要一定是正态分布的。IV.模型中的误差项必须要是独立分布的但是也不需要假设正态分布。而在线性回归中,误差项是要假设独立分布加正态分布的。逻辑回归的定义与表示为了便于没有太多统计背景的朋友们理解,下面会用一个简单的例子来说明。我们提供一个1000个顾客的样本。我们需要预测是否一个顾客会买杂志,这个是我们的类别结果(买/不买)。对于这个问题,我们会使用逻辑回归如下g(y)=βo+β(Age)----(a)这里的输入变量是年龄(Age)。g()是联系函数。这个函数包含两个东西,买杂志的概率(p)和不买杂志的概率(1-p)。概率p需要满足下列标准:1.概率p大于02.概率p小于等于1有了概率的这两个条件,下面我们来写出概率p的函数。首先因为概率是总是大于0的,逻辑回归里面使用一个指数函数的形式表示概率p,因为对于任何输入变量,它的指数函数形式永远不会是负值。这个就满足了条件1p=exp(βo+β(Age))=e^(βo+β(Age))-------(b)由条件2,概率p不能大于1,所以我们需要对p做下面的变换p=exp(βo+β(Age))/exp(βo+β(Age))+1=e^(βo+β(Age))/e^(βo+β(Age))+1-----(c)由(a),(b),(c)可以得到,概率p可以写成p=e^y/1+e^y---(d)而(d)就是我们常说的logit函数。然后我们继续做以下变换我们对这个等式两边同时去对数的话,可以得到log(p/(1-p))就是所谓的联系函数(linkfunction),对于输出变量取对数的变换有利于我们对于非线性的关联性用线性模型去拟合。所以我们新的输出变量是Y而不是原来的p。Y可以写成上面这个式子就是逻辑回归使用的方程式。这里(p/1-p)是所谓的比值比,或者叫机会比(oddsratio),当比值比取对数之后是正值的话,那么意味着(p/1-p)>1,那么事件发生的概率p是大于50%的。我用一个用的很多逻辑回归的概率图来说明逻辑回归的函数永远是在0和1之间(因为是为了拟合概率)怎么评估逻辑回归模型的的表现在你建立好逻辑回归模型之后,很自然的我们需要去评估这个模型的表现好不好,不管你用的是什么软件(SAS,R,Python),你总是需要看1.AIC(AkaikeInformationCriteria)AIC准则AIC其实是和校准R平方很类似的一个测量量,校正R平方可以理解为,给进入模型的输入变量一个惩罚机制,你加入的输入变量X越多,我的惩罚越大。因此校正R平方可以理解为计算真正和Y有关的输入变量X可以解释的Y的百分比。AIC同样会给出这样的一个惩罚机制,你加入的输入变量个数越多,惩罚越大。AIC可以简单表示为其中k是你模型的参数的个数(可以简单理解为你的输入变量X1,X2,。。。Xk的个数),而L是你的似然函数(likelihood),一般似然函数越大说明模型拟合的越好。AIC越小,说明你的模型越好。2.只有常数项的模型的偏差值(NullDeviance)/所拟合的模型的偏差值(ResidualDeviance)只有常数项的模型偏差值是指我们只用常数项去拟合输出变量Y的值与实际输出变量Y的偏差,这个偏差越小,模型拟合的越小。而所拟合的模型的偏差值是指用含有输入变量X的模型拟合的输出变量Y与实际输出变量Y的偏差,这个值也是越小,模型越好。3.混淆矩阵(confusionmatrix)混淆矩阵实际上就是帮助我们判别预测值和实际值相比到底预测对了多少。一个完美的分类模型就是,如果一个样本实际上(Actual)属于good,也预测成(Predicted)good,处于类别bad,也就预测成bad。但在实际的应用中,一些实际上是good的,根据我们的模型,却预测他为bad,对一些原本是bad的,却预测他为good。我们需要知道,这个模型到底预测对了多少,预测错了多少,混淆矩阵就是把所有这些信息都归到一个表里如下从上表我们可以得出几个常用的判别量:准确(分类)率(accuracy)=正确预测的正反例数/总数=(a+d)/(a+b+c+d)误分类率(Errorrate)=错误预测的正反例数/总数=(b+c)/(a+b+c+d)覆盖率或者灵敏度(Recall,TruePositiveRateorSensitivity)=正确预测到的正例数/实际正例总数=d/(c+d)命中率(precisionorPositivePredictedValueorPV+)=正确预测到的正例数/预测正例总数=d/(b+d)负例的覆盖率或特异度(SpecificityorTrueNegativeRate)=正确预测到的负例个数/实际负例总数=a/(a+b)负例的命中率(NegativepredictedvalueorPV-)=正确预测到的负例个数/预测负例总数=a/(a+c)4.ROC曲线接收者操作特征曲線(receiveroperatingcharacteristiccurveorROC)是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制的曲线。如下是一个ROC曲线ROC曲线以下的面积大小(Areaundercurve或者AUC)可以表示模型的是否表现好,面积越大说明模型的预测表现越好。最完美的预测模型是覆盖率或者灵敏度或者真阳性率为1而假的阳性率(1-特异度)为0.那么ROC曲线就会是一条垂直上去的线。当然一般的模型是没法到达这样的表现的。备注:虽然ROC是很好的衡量模型表现的方法,但是它也有自己局限性,尤其是在阳率很稀少的样本中,如果你画ROC也可能得到很高的AUC,但是不代表你的模型预测的好。下面我就介绍怎么用python和R来玩转线性回归。python程序#加载需要的包fromsklearn.linear_modelimportLogisticRegression#假设在训练样本中你有输入变量X还有输出变量Y,在检验样本中你有输入变量x_test#创建逻辑回归的目标模型model=LogisticRegression()#用训练样本来生成你的模型与相应的参数model.fit(X,y)model.score(X,y)#显示参数和截距print('Coefficient:\n',model.coef_)print('Intercept:\n',model.intercept_)##用训练的模型来预测模型中的输出变量Y#predicted=model.predict(x_test)Rcode#训练样本x<->#用训练样本来生成你的模型与相应的参数logistic<-glm(y_train~.,data=x,family='binomial'>#显示逻辑回归的结果summary(logistic)#用训练的模型来预测模型中的输出变量Y#predicted=predict(logistic,x_test)下面我将使用Kaggle上的很有名的泰坦尼克号数据来演示一个多元逻辑回归的学习案例。每一行代表一个乘客,我们需要用提供的这些变量来预测最终游客的生还率。这个数据集我会附在文章的最后,可以下载。一些变量的解释如下survival:生存0=死,1=生pclass:几等仓的票,有1,2,3等仓class1=1st,2=2nd,3=3rdsex:性别Age:年龄sibsp:有多少兄弟姐妹/配偶在船上parch:有多少父母/孩子在船上ticket:船票号码fare:乘客票价cabin:船号码embarked:启航港口C=Cherbourg,Q=Queenstown,S=Southampton下面是运行的R程序#加载需要的包library(glmulti)#载入需要的数据集,test是预测数据集,而train是训练数据集train<-read.csv('..>test<-read.csv('..>#查看训练数据集head(train)#对训练集和测试集的变量做变换train$Pclass<>train$Sex<>train$Embarked<>train$Survived<>test$Pclass<>test$Sex<>test$Embarked<>#把缺失的年龄变为-1##train$Age[is.na(train$Age)]<>#用中位数来补上船票价格的缺失值train$Fare[is.na(train$Fare)]<>train$Embarked[train$Embarked=='']='S'test$Age[is.na(test$Age
本文标题:机器学习算法常用模型逻辑回归(附上r和python程序)
链接地址:https://www.777doc.com/doc-4208138 .html