当前位置: 首页 > news >正文

非常好!讲逻辑回归的,讲得很透彻

参考这篇文章:http://blog.csdn.net/dongtingzhizi/article/details/15962797

这篇文章写的真好,把我之前那篇文章的困惑都解释了 http://www.cnblogs.com/charlesblc/p/6208688.html

对《机器学习实战》上面关于梯度上升和下降之间的区别也说清楚了,真好。

已经下载了pdf版,在 /Users/baidu/Documents/Data/Interview/机器学习-数据挖掘/Logistic回归总结.pdf 

 

 

(1)找一个合适的预测函数(Andrew Ng的公开课中称为hypothesis),一般表示为h函数

(2)构造一个Cost函数(损失函数),该函数表示预测的输出(h)与训练数据类别(y)之间的偏差。将Cost求和或者求平均,记为J(θ)函数,表示所有训练数据预测值与实际类别的偏差。

(3)显然,J(θ)函数的值越小表示预测函数越准确(即h函数越准确),所以这一步需要做的是找到J(θ)函数的最小值。找函数的最小值有不同的方法,Logistic Regression实现时有的是梯度下降法(Gradient Descent)。

 

Logistic函数(或称为Sigmoid函数),函数形式为:

 

构造预测函数为:

hθ(x)函数的值有特殊的含义,它表示结果取1的概率。(非常适合用来做CTR预估,等等)

 

3.2  构造Cost函数

Andrew Ng在课程中直接给出了Cost函数及J(θ)函数如式(5)和(6),但是并没有给出具体的解释,只是说明了这个函数来衡量h函数预测的好坏是合理的。

实际上这里的Cost函数和J(θ)函数是基于最大似然估计推导得到的。最大似然的介绍可以见:

http://www.cnblogs.com/charlesblc/p/6257848.html

 

在Andrew Ng的课程中将J(θ)取为(6)式,

因为乘了一个负的系数-1/m,所以J(θ)取最小值时的θ为要求的最佳参数。(本来极大似然是要求最大值的)

 

 

3.3  梯度下降法求J(θ)的最小值

J(θ)的最小值可以使用梯度下降法,根据梯度下降法可得θ的更新过程:

式中为α学习步长,下面来求偏导:

 

 

因此,(11)式的更新过程可以写成:

 

因为式中α本来为一常量,所以1/m一般将省略,所以最终的θ更新过程为

 

 

3.4  梯度下降过程向量化

关于θ更新过程的vectorization,Andrew Ng的课程中只是一带而过,没有具体的讲解。

 

下面说明一下我理解《机器学习实战》中代码实现的vectorization过程。

 

 

g(A)的参数A为一列向量,所以实现g函数时要支持列向量作为参数,并返回列向量。由上式可知hθ(x)-y可以由g(A)-y一次计算求得。 

 

综上所述,vectorization后θ更新的步骤如下:

(1)求A=x.θ

(2)求E=g(A)-y

(3)求θ:=θ-α.x'.E,  x'表示矩阵x的转置。

 

也可以综合起来写成:

 

前面已经提到过:1/m是可以省略的。 

 

4. 代码分析

图4中是《机器学习实战》中给出的部分实现代码。

 

 一句话,牛逼!

 

其他的看原文!都很重要!

相关文章:

  • Redis 分布式锁的正确实现方式
  • 协议适配器错误的问题
  • 2017-2018-1 20155229 《信息安全系统设计基础》第十一周学习总结
  • ORACLE常用数值函数、转换函数、字符串函数
  • MYSQL分表与分区
  • spring security oauth2 authorization code模式
  • 刷新页面清空 input text的值
  • 服务器数据库不用开通远程连接通过工具在本地连接操作的方法
  • 温故·我的笔记
  • 【转】NGUI版虚拟摇杆
  • 探索 DWARF 调试格式信息
  • java静态代码块,静态方法和非静态方法的加载顺序和执行顺序
  • 使用NVelocity0.5实现服务器端页面自动生成
  • 回顾2016
  • secureCRT linux shell显示中文乱码 解决方法
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • es的写入过程
  • iOS小技巧之UIImagePickerController实现头像选择
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Kibana配置logstash,报表一体化
  • MySQL QA
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Spark学习笔记之相关记录
  • 程序员该如何有效的找工作?
  • 初识 webpack
  • 大主子表关联的性能优化方法
  • 计算机常识 - 收藏集 - 掘金
  • 深入浅出webpack学习(1)--核心概念
  • 树莓派 - 使用须知
  • # Apache SeaTunnel 究竟是什么?
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #考研#计算机文化知识1(局域网及网络互联)
  • (003)SlickEdit Unity的补全
  • (Matlab)使用竞争神经网络实现数据聚类
  • (poj1.2.1)1970(筛选法模拟)
  • (八十八)VFL语言初步 - 实现布局
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (二十三)Flask之高频面试点
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (四)汇编语言——简单程序
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .net经典笔试题
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • @Builder用法
  • [ C++ ] STL---string类的模拟实现
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [2018-01-08] Python强化周的第一天
  • [C#][DevPress]事件委托的使用