翻译/编辑/原创Vivian Ouyang

这个介绍主要是方便刚入行的数据科学家。通过这个指导,使你直接解决机器学习的问题以及从中获得经验。而且我会尽量用简单易懂的方式来介绍每一个算法,不会涉及很多数学,而是帮助你从原理上理解每个算法,每一个算法都附上R和Python的程序来帮助你直接去应用程序解决问题。一般经常使用的机器学习算法有以下11种

1.线性回归Linear Regression

2.逻辑回归Logistic Regression

3. 决策树Decision Tree

4.随机森林Random Forest

5.支持向量机SVM

6.朴素贝叶斯Naive Bayes

7.最近邻居法KNN

8.K平均算法K-Means

9.神经网络Neural Networks

10.降维算法Dimensionality Reduction    Algorithms

11.梯度提升Gradient Boost & Adaboost

第二期我们介绍逻辑回归(2)。逻辑回归和线性回归其实都属于广义线性模型的一种,而在决策制定等领域,逻辑回归的应用更加广泛。所以在第一期学习了线性回归之后很自然的就是学习逻辑回归了。

什么是逻辑回归?

逻辑回归是一种分类的算法,它用给定的输入变量(X)来预测二元的结果(Y)(1/0,是/不是,真/假)。我们一般用虚拟变量来表示二元/类别结果。你可以把逻辑回归看成一种特殊的线性回归,只是因为最后的结果是类别变量,所以我们需要用胜算比取对数来作为因变量(Dependent Variable)。简单来说,逻辑回归是利用logit 函数拟合数据来预测某一个事件发生的概率的。

逻辑回归的起源

逻辑回归其实是属于广义线性模型(Generalized Linear Model)的一部分。1972年 Nelder和Wedderburn发明了这种方法来处理那些用线性回归没法处理的问题。因为如果你用线性回归去处理逻辑回归的二元或类别输出变量时候,最后的结果就是你会得到极低的校正R平方。当然广义线性模型是一个统计上用的非常广的模型,它包含了不止线性回归,逻辑回归,还有泊松回归,ANOVA等等,感兴趣的可以继续进行这方面的阅读。

广义线性回归的基本公式是

g(E(y)) = α + βx1 + γx2

这里,g()是联系函数(link function),E(y) 是目标输出变量Y的期望值,而α + βx1 + γx2 是输入变量的线性组合(α,β,γ 都是需要用数据估计的参数)。联系函数的作用是将输出变量Y的期望值和输入变量X的线性组合可以连接起来,起到一个桥的作用。

主要备注:

I.广义线性模型(简称GLM)因为有联系函数的存在,所以不需要输出变量和输入变量一定有线性关系。但是它假设输出变量Y的期望值算出来的联系函数的值必须和输入变量有线性关系。

II. GLM并不使用回归分析中经常使用的最小二乘法来估计模型参数的值,而是使用最大似然法则来估计参数的值(Maximum Likelihood Estimation,简称MLE)。MLE是统计学中只要涉及到参数模型一定都要搞清楚的重要基础概念。大部分的参数模型都会假设随机变量的分布,有了分布之后能写出模型的似然函数,而模型中的参数就可以用最大似然函数来估计。

III.因为有联系函数的存在,所以输出变量Y也不需要一定是正态分布的。

IV.模型中的误差项必须要是独立分布的但是也不需要假设正态分布。而在线性回归中,误差项是要假设独立分布加正态分布的。

逻辑回归的定义与表示

为了便于没有太多统计背景的朋友们理解,下面会用一个简单的例子来说明。我们提供一个1000个顾客的样本。我们需要预测是否一个顾客会买杂志,这个是我们的类别结果(买/不买)。对于这个问题,我们会使用逻辑回归如下

g(y) = βo + β(Age)        ---- (a)

这里的输入变量是年龄(Age)。g()是联系函数。这个函数包含两个东西,买杂志的概率(p)和不买杂志的概率(1-p)。概率p需要满足下列标准:

1.概率p大于0

2.概率p小于等于1

有了概率的这两个条件,下面我们来写出概率p的函数。首先因为概率是总是大于0的,逻辑回归里面使用一个指数函数的形式表示概率p,因为对于任何输入变量,它的指数函数形式永远不会是负值。这个就满足了条件1

p = 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))就是所谓的联系函数(link function),对于输出变量取对数的变换有利于我们对于非线性的关联性用线性模型去拟合。所以我们新的输出变量是Y而不是原来的p。Y可以写成

上面这个式子就是逻辑回归使用的方程式。这里(p/1-p)是所谓的比值比,或者叫机会比(odds ratio),当比值比取对数之后是正值的话,那么意味着(p/1-p)>1,那么事件发生的概率p是大于50%的。我用一个用的很多逻辑回归的概率图来说明逻辑回归的函数永远是在0和1 之间(因为是为了拟合概率)

怎么评估逻辑回归模型的的表现

在你建立好逻辑回归模型之后,很自然的我们需要去评估这个模型的表现好不好,不管你用的是什么软件(SAS,R,Python),你总是需要看

1.AIC (Akaike Information Criteria) AIC准则

AIC其实是和校准R平方很类似的一个测量量,校正R平方可以理解为,给进入模型的输入变量一个惩罚机制,你加入的输入变量X越多,我的惩罚越大。因此校正R平方可以理解为计算真正和Y有关的输入变量X可以解释的Y的百分比。AIC同样会给出这样的一个惩罚机制,你加入的输入变量个数越多,惩罚越大。AIC可以简单表示为

其中k是你模型的参数的个数(可以简单理解为你的输入变量X1,X2,。。。Xk的个数),而L是你的似然函数(likelihood),一般似然函数越大说明模型拟合的越好。 AIC越小,说明你的模型越好。

2.只有常数项的模型的偏差值(Null Deviance)/所拟合的模型的偏差值(Residual Deviance)

只有常数项的模型偏差值是指我们只用常数项去拟合输出变量Y的值与实际输出变量Y的偏差,这个偏差越小,模型拟合的越小。而所拟合的模型的偏差值是指用含有输入变量X的模型拟合的输出变量Y与实际输出变量Y的偏差,这个值也是越小,模型越好。

3.混淆矩阵 (confusion matrix)

混淆矩阵实际上就是帮助我们判别预测值和实际值相比到底预测对了多少。一个完美的分类模型就是,如果一个样本实际上(Actual)属于good,也预测成(Predicted)good,处于类别bad,也就预测成bad。但在实际的应用中,一些实际上是good的,根据我们的模型,却预测他为bad,对一些原本是bad的,却预测他为good。我们需要知道,这个模型到底预测对了多少,预测错了多少,混淆矩阵就是把所有这些信息都归到一个表里如下

从上表我们可以得出几个常用的判别量:

准确(分类)率(accuracy)=正确预测的正反例数/总数

=(a+d)/(a+b+c+d)

误分类率(Error rate)=错误预测的正反例数/总数

=(b+c)/(a+b+c+d)

覆盖率或者灵敏度(Recall, True Positive Rate or Sensitivity)=正确预测到的正例数/实际正例总数

=d/(c+d)

命中率(precision or Positive Predicted Value or PV+)=正确预测到的正例数/预测正例总数

=d/(b+d)

负例的覆盖率或特异度(Specificity or True Negative Rate)=正确预测到的负例个数/实际负例总数

=a/(a+b)

负例的命中率(Negative predicted value or PV-)=正确预测到的负例个数/预测负例总数

=a/(a+c)

4. ROC 曲线

接收者操作特征曲線(receiver operating characteristic curve or ROC)是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制的曲线。如下是一个ROC曲线

ROC曲线以下的面积大小(Area under curve 或者 AUC)可以表示模型的是否表现好,面积越大说明模型的预测表现越好。最完美的预测模型是覆盖率或者灵敏度或者真阳性率为1而假的阳性率(1-特异度)为0.那么ROC曲线就会是一条垂直上去的线。当然一般的模型是没法到达这样的表现的。

备注:虽然ROC是很好的衡量模型表现的方法,但是它也有自己局限性,尤其是在阳率很稀少的样本中,如果你画ROC也可能得到很高的AUC,但是不代表你的模型预测的好。

下面我就介绍怎么用python和R来玩转线性回归。

python 程序

#加载需要的包

from sklearn.linear_model import LogisticRegression

#假设在训练样本中你有输入变量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)

R code

#训练样本

x

# 用训练样本来生成你的模型与相应的参数

logistic

# 显示逻辑回归的结果

summary(logistic)

#用训练的模型来预测模型中的输出变量Y#

predicted=predict(logistic,x_test)

下面我将使用Kaggle上的很有名的泰坦尼克号数据来演示一个多元逻辑回归的学习案例。每一行代表一个乘客,我们需要用提供的这些变量来预测最终游客的生还率。这个数据集我会附在文章的最后,可以下载。一些变量的解释如下

survival:生存  0 = 死, 1 = 生

pclass: 几等仓的票,有1,2,3等仓  class1 = 1st, 2 = 2nd, 3 = 3rd

sex:性别

Age:年龄

sibsp:有多少兄弟姐妹/配偶在船上

parch:有多少父母/孩子在船上

ticket: 船票号码

fare:乘客票价

cabin:船号码

embarked: 启航港口 C = Cherbourg, Q = Queenstown, S = Southampton

下面是运行的R程序

#加载需要的包

library(glmulti)

#载入需要的数据集,test是预测数据集,而train是训练数据集

train

test

#查看训练数据集

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)]

test$Fare[is.na(test$Fare)]

test$Embarked[test$Embarked==""]="S"

#逻辑回归

model

#在预测数据集中预测乘客的生还,概率大于0.5,生还,概率小于0.5,不生还

test$Survived 0.5,1,0)

前几行的结果如下

泰坦尼克的数据可以在本文下载,衔接如下

链接: https://pan.baidu.com/s/1hsKex3u 密码: kewn

下一期内容是决策树和随机森林。Continued~

来源:

1.https://www.analyticsvidhya.com/

2.Wiki

3.Kaggle

python逻辑回归aic_机器学习算法介绍(附上R和python程序)-第二期相关推荐

  1. python逻辑回归aic_基于R和Python 如何使用多项式和有序逻辑回归

    原标题:基于R和Python 如何使用多项式和有序逻辑回归 基于R和Python 如何使用多项式和有序逻辑回归 我们中的大多数对于回归的知识是有限的.其中,线性和逻辑回归是我们最喜欢的一种.作为一个有 ...

  2. 【机器学习之逻辑回归】sklearn+python逻辑回归详解

    文章目录 一.逻辑回归 二.算法原理介绍 三.代码实现 3.1 sklearn-API介绍 3.2 sklearn-代码实现 3.3 python手写代码实现 四.总结 五.算法系列 一.逻辑回归 逻 ...

  3. 10 种机器学习算法的要点(附 Python 和 R 代码)(转载)

    10 种机器学习算法的要点(附 Python 和 R 代码)(转载) from:https://zhuanlan.zhihu.com/p/25273698 前言 谷歌董事长施密特曾说过:虽然谷歌的无人 ...

  4. python 逻辑回归 复杂抽样_逻辑回归(Logistic Regression) ----转载

    概要: 1. 介绍Logistic Regression的数学模型,推导并详细解释求解最优回归系数的过程: 2. Python实现Logistic Regression的基本版: 3. 介绍sklea ...

  5. python逻辑回归识别猫(持续更新中)

    逻辑回归 简单来说, 逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性.比如某用户购买某商品的可能性,某病人患有某种疾 ...

  6. 逻辑回归与线性回归算法梳理

    逻辑回归算法梳理 逻辑回归与线性回归算法 1线性回归 2 逻辑回归 2.1 逻辑回归原理 2.2 逻辑回归损失函数 2.3 简化后的逻辑回归损失函数 3 联系与区别 3.1 联系 3.2 区别 4 正 ...

  7. python逻辑回归

    逻辑回归的概念 逻辑回归是大数据技术的机器学习一种方法,它借助对某个事件的历史数据结果进行分析,从而预测某个事件未来发生的概率,是一种概率型非线性回归.其中概率取值只有"是"和&q ...

  8. 联邦学习算法介绍-FedAvg详细案例-Python代码获取

    联邦学习算法介绍-FedAvg详细案例-Python代码获取 一.联邦学习系统框架 二.联邦平均算法(FedAvg) 三.联邦随梯度下降算法 (FedSGD) 四.差分隐私随联邦梯度下降算法 (DP- ...

  9. python复杂网络点图可视化_数据分析:R与Python怎么选?

    作者介绍 知春里@伟仔 不知名数据科学家. 持续写<数据分析>和<数据产品>的系列文章,欢迎关注. 01 选R还是Python? "球鞋是买阿迪还是买耐克?" ...

  10. python逻辑回归的主要参数_python机器学习(六)回归算法-逻辑回归

    逻辑回归 同步更新在个人网站:http://www.wangpengcufe.com/machinelearning/pythonml-pythonml6/ 一.概述 1.1.概念 是一种名为&quo ...

最新文章

  1. 为什么edge AI是一个无需大脑的人
  2. opensuse download
  3. 跨域请求获取Solr json检索结果并高亮显示
  4. 01-JAVA语言基础
  5. LeetCode meituan-001. 小美的用户名
  6. C# WinForm开发系列 - 开篇
  7. python数据库查询系统_Python MySQL 查询数据(select from)
  8. 控制反转与依赖注入概述——Spring IOC/DI(一)
  9. Qt_QTableWidget用法 添加、删除、添加控件、获取控件在表格中位置
  10. 爬取豆瓣电影TOP100
  11. 计算机组成和体系结构-Flynn分类法
  12. iOS 图片编辑——涂鸦——在图片上添加文字
  13. 4ARM-PEG-OH 四臂PEG羟基
  14. python爬虫获取网站销售情况(内置源码)
  15. moses 编译_moses工具的配置详解
  16. Maven项目缺少Maven Dependencies新的解决方法
  17. 智慧屏新品尝鲜:精致机身旗舰声画
  18. DTO-VO-DO-Query理解
  19. 字符编码OneHotEncoder
  20. appium第一个脚本

热门文章

  1. vue优化技巧之mixins
  2. WPS 表格中单元格文字后插入公式
  3. 网页游戏服务器端开发心得
  4. 单片机中断程序详解(转)
  5. python九九乘法表代码中的i+1的意思_python---九九乘法表代码
  6. 有哪些免费的发布信息网站?
  7. 抖音如何充钱上热门 抖音怎么上热门方法
  8. 这些效果我很喜欢,但愿对你们也有帮助
  9. Java获取图片大小 及 尺寸 图片压缩 jpg压缩
  10. 大学英语综合教程四 Unit 2 课文内容英译中 中英翻译