Logistic回归---机器学习算法之四
发布日期:2022-01-31 02:37:26 浏览次数:39 分类:技术文章

本文共 1893 字,大约阅读时间需要 6 分钟。

Logistic回归

本博客介绍Logistic回归算法,代码实现基于python:

  • 简单概念介绍
  • sigmoid函数
  • 数学模型的建立
  • *
  • 最大似然函数
  • pynum函数说明
  • 代码实现
  • 总结

简单概念介绍

  • 假设现在有一些数据点,我们用一条直线对这些点进行拟合(该线称为最佳拟合直线),这个拟合过程就称为回归。训练分类器就是为了寻找最佳拟合参数,使用的是最优化算法。该直线也就是所谓分类超平面(二维坐标下是一条直线,三维坐标下是一个平面,n维坐标下是(n-1)维平面)
  • Logistic回归针对是二分类问题

sigmoid函数

我们想要的函数应该能够预测输入数据的所属类别,比如函数输出0或者1.要满足这个条件,很自然的想到了单位阶跃函数,但是该函数是从0瞬间跳跃到1,这个跳跃的变化点难以把握。

单位阶跃函数图像
所以我们一般用sigmoid函数来代替
这里写图片描述
从图像可以看出,x=0的时候,函数值为0.5,随着x的增大,无限接近1,x减小,无限接近0,所以分类标准如下:

  • 函数值大于0.5,属于类别1
  • 函数值小于0.5,属于类别0
    这里写图片描述
    因为分类的样本有多个属性或者特征,所以x=这里写图片描述, 通常我们会给每一个特征乘上一个权重系数这里写图片描述
    所以上述公式变为这里写图片描述
    其中这里写图片描述 。我们重写方程如下:
    这里写图片描述

数学模型的建立

有了上述决策函数,决策面就是Z=0, 也就是θTx=0,那么接下来的问题就是如何确定回归系数,也就是上述函数中的θ的值。

这里介绍几个小概念,详细内容可以查阅相关文件:

  • 梯度的方向:函数值变大的方向
  • 梯度上升算法:求取极大值
  • 梯度下降算法:求取极小值
  • 一般函数如果非凸,那么很难求取全局的极值,有可能是局部的极值,因为非凸函数有多次起伏
  • 简单判断函数凹凸形:f(x)的二阶导数>0,则f(x)是凹函数

    凸函数的定义

    假设f(x)在[a,b]上连续,若对于任意的x1,x2∈[a,b],恒有
    f[(x1+x2)/2]≥[f(x1)+f(x2)]/2,则称f(x)在[a,b]上是凸函数
    凹函数的定义
    假设f(x)在[a,b]上连续,若对于任意的x1,x2∈[a,b],恒有
    f[(x1+x2)/2]≤[f(x1)+f(x2)]/2,则称f(x)在[a,b]上是凹函数

接下来的问题就是寻找代价函数。从上述sigmoid的图像可以知道,h(x)的值越接近0或者1分类效果越好,所以代价函数就是:

这里写图片描述(观察值和估计值的差值平方)
我们的目的是最小化这个值,但是因为h(x)是非凸的,所以还应该重新选择代价函数
注意到这样一个问题,此处我们已经知道样本的类别,也就是事件已经发生,这时候我们需要估计出一组θ值,使得这事件发生的概率最大,这就是最大似然估计(详细内容可以查看相关资料)
根据求解最大似然估计的步骤,我们需要写出似然函数。

我们知道hθ(x)≥0.5<后面简用h>,此时y=1, 小于0.5,y=0. 那么我们就用h作为y=1发生的概率(可以这个理解,在x取某一组固定值的情况下,属于类别1的概率,因为此时h的值大于0.5,也符合概率较大,比如为0.9),那么当y=0时,h<0.5,此时不能用h作为y=0的概率,<因为最大似然的思想使已有的数据发生的概率最大化,小于0.5太小了>,我们可以用1-h作为y=0的概率,这样就可以作为y=0的概率了,,然后只需要最大化联合概率密度函数就可以了。

这里写图片描述
转换成对数似然函数:
这里写图片描述
因为这个方程无法求得确切的解,所以只能采用迭代优化算法,似然函数是求最大值,所以采用梯度上升算法,求导过程:
这里写图片描述
上述方程少了一个求和符号,所以完整的迭代方式为:
这里写图片描述
如果是随机的迭代算法,就不需要求和(也就是整体样本迭代),每次选择一个样本进行迭代:
这里写图片描述
其中α是一个极小的正值,表示迭代步长。

pynum函数

这里简单说明一下代码中用到的pynum的函数

  • mat:将数组转化成矩阵(永远是2维的。注意转换后的乘法等运算规则覆盖了数组的,遵循数学上的矩阵运算法则。mat是ndarray的子类)
  • tranpose:对数组或者矩阵重新排列,如果transpose()没有指明第二个参数的值,那么就是交换两个轴,如果指明了参数,比如三个轴的情况下,指明参数为(1,0,2),该参数的意思是按照这个顺序交换某一元素的索引,举例来说,比如8这个元素的索引为(0,1,0),执行tranpose后,索引变为(1,0,0),即交换了前两个轴的索引。
  • pynum轴的概念(axes): 最外层的是轴0,轴0里面包含的是第二层轴,也就是轴1,
  • getA():将matrix转换成数组

    代码实现

声明

本博客的公式部分引用了这篇博文,特此声明

转载地址:https://blog.csdn.net/LJH0600301217/article/details/48177047 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:openCV中IplImage的使用(转载)
下一篇:学习openCV第四章答案

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月21日 23时10分50秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

使用python开发的软件协议_WEB开发——Python WSGI协议详解 2019-04-21
冰点下载器手机版apk_冰点文库下载器 2019-04-21
python信号采集代码_13行代码实现:Python实时视频采集(附源码) 2019-04-21
h5引入json_纯js直接引入json文件 2019-04-21
python格式化字符串总结_Python字符串处理方法总结 2019-04-21
python中true什么意思_python中的bool是什么意思 2019-04-21
jacobian 矩阵意义_Jacobian矩阵和Hessian矩阵的作用是什么? 2019-04-21
c++ jna 数据类型_JNA 使用总结 2019-04-21
python中如何遍历列表并将列表值赋予_python中如何实现遍历整个列表? 2019-04-21
apache php mysql架构图_Apache+PHP+MYSQL+Tomcat+JK架构设计技巧与应用实战 2019-04-21
xlnt库如何编译_最新mysql数据库源码编译安装。 2019-04-21
mysql 2003错误 10055_MYSQL无法连接---提示10055错误 2019-04-21
mysql redis缓存层_redis实现缓存的两种方式 2019-04-21
git 改local branch名字_用Git管理Latex写论文的工作流程 2019-04-21
mysql索引篇_MySQL索引篇 2019-04-21
有至少一个用MySQL_Mysql有用的面试题 2019-04-21
mysql select同时update_MySQLSELECT同时UPDATE同一张表 2019-04-21
mysql删除后数据库没变化_mysql之delete删除记录后数据库大小不变 2019-04-21
net mysql start3534_MySQL 5.7.14 net start mysql 服务无法启动-“NET HELPMSG 3534” 的奇怪问题... 2019-04-21
pta两个有序链表的合并_7-1 两个有序链表序列的合并 (20分) --- 内存问题再叙 2019-04-21