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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.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
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