目录

一、逻辑推导

二、手写推算逻辑回归运算步骤

1、梯度下降法

2、最大似然估计法

三、用梯度下降法求损失函数最小值

四、代码部分


一、逻辑推导

因部分内容与作者之前所发布的文章有所重复,故只对新的知识或重复部分中较为重点的内容进行讲解。

逻辑回归通常用于解决分类问题,比如:客户是否该买某个商品,借款人是否会违约等。实际上,“分类”是逻辑回归的目的和结果,中间过程依旧是“回归”,因为通过逻辑回归模型,我们得到的是0-1之间的连续数字,即概率,类似借款人违约的可能性。然后给这个可能性加上一个阈值,就变成了分类。

如何将一个线性函数(如下)的结果控制在(0,1)之间呢?

我们引入sigmoid函数,通过该函数。可以将线性值转化为(0,1)。

把线性回归函数的结果y,放到sigmod函数中去,就构造了逻辑回归函数,得到的这个结果类似一个概率值。

sigmoid函数告诉我们,当得到拟合曲线的函数值时,如何计算最终的类标号。但是核心问题仍然是这个曲线如何拟合。既然是回归函数,我们就模仿线性回归,用误差的平方和当做代价函数。代价函数如公式(2)所示:

其中,,yi为Xi真实的类标号。按说此时可以对代价函数求解最小值了,但是如果你将带入公式(2)的话,那么当前代价函数的图像是一个非凸函数,非凸函数有不止一个极值点,导致不容易做最优化计算。也就是说,公式的这个代价函数不能用。

那自然要想办法设计新的代价函数。我们在上面说了,ϕ(z)ϕ(z)的取值可以看做是测试元组属于类1的后验概率,所以可以得到下面的结论:

更进一步,上式也可以这样表达:

公式(3)表达的含义是在参数W下,元组类标号为y的后验概率。假设现在已经得到了一个抽样样本,那么联合概率的大小就可以反映模型的代价:联合概率越大,说明模型的学习结果与真实情况越接近;联合概率越小,说明模型的学习结果与真实情况越背离。而对于这个联合概率,我们可以通过计算参数的最大似然估计的那一套方法来确定使得联合概率最大的参数W,此时的W就是我们要选的最佳参数,它使得联合概率最大(即代价函数最小)。下面看具体的运算步骤。


二、手写推算逻辑回归运算步骤

通过Logistic函数归一化到(0,1)间,y的取值有特殊的含义,它表示结果取准确的概率,如果分类为1,h(x)==1表示预测100%准确,分类为0,h(x)==0表示预测100%准确。

我们有了逻辑回归函数我们需要想办法的到这个函数取最大值时的参数。我们有两种方法去求得。

1、梯度下降法

手写推导如下:

2、最大似然估计法

需要进行对数化处理。


三、用梯度下降法求损失函数最小值

此处在作者之前的博客有详细的讲解,故不再过多赘述。

如果能求出代价函数的最小值,也就是最大似然函数的最大值。那么得到的权重向量WW就是逻辑回归的最终解。但是通过上面的图像,你也能发现,J(W)是一种非线性的S型函数,不能直接利用偏导数为0求解。于是我们采用梯度下降法。


四、代码部分


##估价函数
def sigmoid(z):return(1 / (1.0 + math.exp(-z)))def hypothesis(x, theta, feature_number):h = 0.0for i in range(feature_number+1):h += x[i] * theta[i]return(sigmoid(h))##计算偏导数
def compute_gradient(x, y, theta, feature_number, feature_pos, sample_number):sum = 0.0for i in range(sample_number):h = hypothesis(x[i], theta, feature_number)sum += (h - y[i]) * x[i][feature_pos]return(sum / sample_number)##代价
def compute_cost(x, y, theta, feature_number, sample_number):sum = 0.0for i in range(sample_number):h = hypothesis(x[i], theta, feature_number)sum += -y[i] * math.log(h) - (1 - y[i]) * math.log(1 - h)return(sum / sample_number)##梯度下降
def gradient_descent(x, y, theta, feature_number, sample_number, alpha, count):for i in range(count):tmp = []for j in range(MAX_FEATURE_DIMENSION):tmp.append(0)for j in range(feature_number + 1):tmp[j] = theta[j] - alpha * compute_gradient(x, y ,theta, feature_number, j, sample_number)for j in range(feature_number + 1):theta[j] = tmp[j]print(compute_cost(x, y, theta, feature_number, sample_number))

逻辑回归原理详解(附手写推导)相关推荐

  1. springmvc原理详解(手写springmvc)

    最近在复习框架 在快看小说网搜了写资料 和原理 今天总结一下 希望能加深点映像  不足之处请大家指出 我就不画流程图了 直接通过代码来了解springmvc的运行机制和原理 回想用springmvc用 ...

  2. TF之LoR:基于tensorflow利用逻辑回归算LoR法实现手写数字图片识别提高准确率

    TF之LoR:基于tensorflow利用逻辑回归算LoR法实现手写数字图片识别提高准确率 目录 输出结果 设计代码 输出结果 设计代码 #TF之LoR:基于tensorflow实现手写数字图片识别准 ...

  3. 蓝牙:CRC原理详解(附crc16校验代码)

    CRC原理详解(附crc16校验代码) 参考链接: https://www.cnblogs.com/esestt/archive/2007/08/09/848856.html Cyclic Redun ...

  4. CRC原理详解(附crc16校验代码)

    CRC原理详解 算法原理 查表法 反向算法 附录1:crc16校验表及用法 算法原理 Cyclic Redundancy Check循环冗余检验,是基于数据计算一组效验码,用于核对数据传输过程中是否被 ...

  5. 逻辑回归模型详解(Logistic Regression)

    目录 广义线性模型 极大似然法 逻辑回归的假设函数 逻辑回归的损失函数 交叉熵损失函数 为什么LR模型损失函数使用交叉熵不用均方差 交叉熵损失函数的数学原理 交叉熵损失函数的直观理解 交叉熵简介 对数 ...

  6. 《设计模式详解》手写简单的 Spring 框架

    自定义 Spring 框架 自定义 Spring 框架 Spring 使用回顾 Spring 核心功能结构 bean 概述 Spring IOC 相关接口 BeanFactory 接口 BeanDef ...

  7. Apriori算法详解及手写案例

    大家好,我是W 在数据挖掘中有一种关联分析算法叫做Apriori算法,大家可能都听说过啤酒尿布的故事,购买尿布的爸爸很可能会再去购买一份啤酒来犒劳自己,在大数据的背景下已经无法使用人工的方法去发现海量 ...

  8. 算法梳理(二)逻辑回归原理及实现

    算法梳理(二)逻辑回归原理及实现 逻辑回归原理 一.从线性回归到逻辑回归 二.二分类的逻辑回归 (一)过程推理 (二)正则化 三.scikit-learn中逻辑回归参数详解 逻辑回归原理 logist ...

  9. 逻辑回归(logistic regression)原理详解

    机器学习解决的问题,大体上就是两种:数值预测和分类.前者一般采用的是回归模型,比如最常用的线性回归:后者的方法则五花八门,决策树,kNN,支持向量机,朴素贝叶斯等等模型都是用来解决分类问题的.其实,两 ...

最新文章

  1. pandas使用sort_values函数对dataframe的日期数据列进行排序(设置ascending参数进行正序或者倒序排序)
  2. RGB色转灰度色算法
  3. jq checked 设置问题
  4. 阿里云ECI如何6秒扩容3000容器实例?
  5. android 点击选择文件夹,Android----弹出框选择文件夹目录以及启用新Task打开文件_IT168文库.pdf...
  6. 【转】JAVA 调用Web Service的方法
  7. 标准JavaBean
  8. 横跨7个版本的OpenStack无感知热升级在360的落地与实践
  9. 【微信开发】-- 企业转账到用户
  10. python辗转相除法求最小公倍数_Python实现利用最大公约数求三个正整数的最小公倍数示例...
  11. IPhone开发从零开始之1-构思你的产品
  12. Xmodem/Ymodem/Zmodem协议详解
  13. 【OR】YALMIP 整数规划
  14. u深度重装系统详细教程_u深度启动u盘安装win7系统教程
  15. word目录缩进设置
  16. 微信摇一摇里没有周边
  17. JPA与Hibernate的区别
  18. RT-Thread Studio 字体放大 缩小快捷键
  19. eQTL | Expression quantitative trait loci | 表达数量性状基因座 | QTL | 数量性状位点
  20. RTFM:腾讯微信公众号H5页面使用微信支付爬坑记

热门文章

  1. 【netty学习】之零拷贝
  2. Python数据特征分析-对比分析
  3. 对不起,我的健康码不能给你
  4. 在Android里如何判断一个指定的经纬度点是否落在一个多边形区域内
  5. 树莓派装ros-base 和 djiosdk 并用M100测试
  6. Manjaro 入门使用教程
  7. unity 实现场景过度动画
  8. snmp自定义oid,获取服务器时间
  9. 暑期实践——6.27
  10. Copilot使用教程:让AI助手提升你的编程效率