对 数 运 算 法 则

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

对数几率回归(Logistic Regression)分析与实践

1 对数几率回归原理分析

1.2?损失函数

1.3 ?求最优解

2 对数几率回归实践

Logistic回归的一般过程

Logistic回归的优缺点

Logistic回归算法描述(改进的随机梯度下降)

《机器学习实战》第五章代码解析

5-1 Logistic回归梯度上升优化方法

5-2 画出数据集和Logistic回归最佳拟合直线的函数

5-3 随机梯度上升算法

5-4 改进的随机梯度上升算法

5-5 ?示例:从疝气病症预测病马的死亡率

1 对数几率回归原理分析

Logistic Regression,对数几率回归,又称逻辑斯谛回归。该模型最初是用来解决0-1二分类问题,明明是分类问题,为何叫回归?科普一下,线性回归是找到一条直线或超平面尽可能地接近所有的训练数据点(就是用线性方程来拟合数据),而对数几率回归是找到一条直线或超平面尽可能地分开两种不同类别的数据点(就是在公式中的线性部分来做了回归)。首先,我们要解决的问题是:在线性模型

上做二分类(这里不讨论多分类)。

把问题转化为,让模型输出为0或者1,而且在分界处变化很陡。

直接想法是套一个函数来实现一个单位阶跃函数,如下: 也就是把?线性模型?看作为一个两种类别的分界线。

由于分段函数性质太差,不符合优化问题的目标函数要连续可微的特点。所以我们找一个形似的函数(由下图可见),Sigmoid 函数(S型函数)中的杰出代表——对数几率函数(一个任意阶可导的凸函数,有良好的数学性质,很适合优化问题)。

将线性模型代入就得到总的模型

其实,对数几率回归模型就是在拟合?线性模型,使得这条直线尽可能地将原始数据中的两个类别正确的划分开(引用张磊的知乎)。

1.2?损失函数

解决机器学习问题就要明确损失函数,回归问题一般用均方误差(平均损失)或者其平均数——平均误差平方损失来作为损失函数(这就是最小二乘法,用来找到一条直线使所有样本到直线的欧式距离之和最小)。

平均误差平方损失公式如下:

Logistic回归模型,要用到的是对数损失来作为损失函数

先来看它的效果,再来说怎么得来的

效果:真实值?是有 0-1 两种情况,而推测值由于借助对数几率函数,其输出是介于0~1之间连续概率值。这个损失函数其实在每次

计算时永远都只有一项在发挥作用,转换为分段函数如下:所以该损失函数可以达到这样的效果:当真实值?y为1时,输出值?y越接近1,则?L越小,当真实值?y为 0 时,输出值?y尖越接近于0,则?L越小。

由来:这与周志华《机器学习》的3.3节的对数几率回归模型最大化“对数似然”的似然项(详细过程看书P59)

有着异曲同工之妙,可能存在某种联系吧。

1.3 ?求最优解

对数几率函数作为高阶可导连续凸函数,根据凸优化理论,典型的数值优化算法如梯度下降算法,牛顿法等

牛顿法的求法看周志华《机器学习》的P59~60。

下面我们用的是梯度下降算法(梯度上升同理,符号变为加号)来得到核心参数的更新方式:

w看做是一个向量的话,迭代同样要加减一个向量,α是每次迭代的步长(大小),α后面的偏导表示的是迭代的方向,这种通过多次迭代能够使得函数收敛到局部最小值。

具体怎么得来的看张磊知乎梯度下降算法,写得很棒。

通过链式求导法则,(具体推导见张磊知乎梯度下降算法)

最终迭代方式为(矩阵形式,也是接下来实践用到的公式,其实是通过一系列推导得来的):

(归入了矩阵中)

2 对数几率回归实践

Logistic回归的一般过程

(1)收集数据:采用任意方法收集数据。

(2)准备数据:由于需要进行距离计算,因此要求数据类型为数值型。(有限)另外,结构化数据格式则最佳。

(3)分析数据:采用任意方法对数据进行分析。

(4)训练算法:大部分时间将用于训练,训练的目的是为了找到最佳的分类回归系数

(5)测试算法:一旦训练完成,分类将会很快。

(6)使用算法:首先,我们需要输入一些数据,并将起转化成对应的结构化数值。接着,基于训练好的回归系数既可以对这些数值进行简单的回归计算,在这之后,我们就可以在输出的类别上做一些其他分析工作。

Logistic回归的优缺点

优点:计算代价不高,易于理解和实现。

缺点:容易欠拟合,分类精度可能不高。

Logistic回归算法描述(改进的随机梯度下降)

输入:训练集?,是维样本向量,即?,是对应的分类标签学习率过程:

由对数似然得到代价函数

##下面采用梯度下降对代价函数进行迭代,迭代次(选择一个较大值,如500),得到最终的参数向量

初始化为全1矩阵

for all?do(这里采用随机选取样本来更新回归系数)

动态调整

从数据集中删除该样本(避免重复)

util: 迭代了次(要到达达到局部最小的效果)

输出:的最优解

《机器学习实战》第五章代码解析

5-1 Logistic回归梯度上升优化方法

算法伪代码:

每个回归系数初始化为1

重复R次:

计算整个数据集的梯度

使用 alpha*gradient 更新回归系数的向量

返回回归系数

数据集特点:

testSet.txt每行如下:?

-0.017612 14.053064 0

每个样本点包括两个特征值x,y坐标,和对应的分类标签(0或1)

from numpy import *

def loadDataSet(): # 加载数据集

dataMat = [] # 创建数据列表

labelMat = [] # 创建标签列表

相关文档
最新文档