首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

逻辑回归原理与代码实现

往期回顾:

前面我们学习了朴素贝叶斯分类和线性回归算法,总结了机器学习中算法的一些基本分类,对整个机器学习领域的算法有了一个整体上的认知。那么本期,我们将学习一个非常重要的算法 - 逻辑回归,之所以说他重要,是因为即便是深度学习如此盛行的今天,逻辑回归算法仍然被广泛应用于各个领域中。那么是什么特征让逻辑回归算法如此长盛不衰呢?带着问题,我们一起进行今天的探讨。

实际问题

我们想对两种鸢尾花进行分类,现在我们可以观察到鸢尾花的两个特征:花瓣个数和直径大小。那么我们该如何构建一个自动分类器,让算法可以根据这两个特征识别出当前的鸢尾花属于哪个类别呢?不妨先把已经获得的数据画出来看一下,假设如下如所示:

显然,我们直观的感觉就是在这两个类别的中间画出一条线,如下图:

所以我们的目标就是如何才能设计一个算法,让其找出这样的一条分割线(更准确的说法是决策边界),实际上,机器学习中的各种分类算法本质都是如何找到这样一条决策边界的问题。

从线性回归开始

我们知道线性回归是可以拟合出一条最符合当前数据集的直线,那么可不可以改造一下线性回归,让线性回归拟合的直线就是上图中的分割线呢?对,这就是逻辑斯蒂回归的核心思想:根据现有的数据集对分类的边界建立回归公式,以此进行分类。再进一步考虑:在二维平面上看,我们可以知道每个点在边界的什么地方,但是维度一旦上升,如何才能让程序马上通过决策边界知道当前的样本应该属于那个类别呢?对了,概率!我们可以定义一个映射函数,将任意的实数域的x映射到0和1之间。逻辑回归用到的映射函数为sigmoid函数,函数图像和公式如下图所示:

现在思考两个问题:

我们最后想得到什么 ?

样本属于每个类别的概率

我们现在知道什么?

直线的公式:

映射函数sigmoid

思考过后,我们开始正式介绍逻辑回归的数学定义。

逻辑回归

其中g(*) 为sigmoid函数

那么上面这个函数的物理意义是什么呢?

当大于0的时候,sigmoid是大于0.5的值(判定为正样本);

当小于0的时候,sigmoid是小于0.5的值(判定为负样本)。

也就是说我们现在的目标变成了:

如何找到参数一组θ,使直线可以最大尽量的将训练集中的数据切分开。

损失函数

很自然的想法就是,我们判断一下训练集中每个样本的预测类别和真实类别的差别(最小二乘),如下:

很遗憾这样的损失函数是一个非凸函数,也就是我们无法使用梯度下降算法找到全局最优解,那么如何改变一下损失函数,让其变成一个凸函数呢?如下:

可以看出,当y分别取1和-1的时候,函数如下图所示,这样就很巧妙的转化成了凸函数的优化问题。

将上面的分段函数整合到一起,我们就可以得到逻辑回归的最终损失函数,也就是我们需要使用梯度下降算法进行优化的函数:

即相当于求解J(θ)的最小值,这里我们采用梯度下降算法,迭代的更新并获取J(θ)的最小值。梯度下降算法的思想如下:

Repeat直到收敛{

下一轮的θ = 当前θ - 学习率α * J(θ)对θ的偏导数

}

(自己手撸的推导,如有不清晰之处,欢迎随时沟通交流)

另外,关于凸优化的问题,我们暂不在这里讨论,以后会单独讨论这一大类的工具问题,现在只需记住,如果损失函数是凸函数,那么我们就可以很方便的使用各种封装好的工具包进行优化的求解

代码实现

上面论述的内容即为逻辑回归的思想。下面,我们给出代码实现,其中使用了sklearn自带的鸢尾花数据集进行测试,该数据集一共有四种类别的鸢尾花和收集到的四个特征。

代码链接如下:

链接:https://pan.baidu.com/s/1ht1HGTQ

密码:xxp6

鸢尾花与郁金香

机器学习与量化交易领域的知识分享

(每周一更新)

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180303G0FJY000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券