Andrew Ng 机器学习公开课 - 线性回归
我的机器学习系列从现在开始将会结合Andrew Ng老师与sklearn的api是实际应用相结合来写了。
吴恩达(1976-,英文名:Andrew Ng),华裔美国人,是斯坦福大学计算机科学系和电子工程系副教授,人工智能实验室主任。吴恩达是人工智能和机器学习领域国际上最权威的学者之一。吴恩达也是在线教育平台Coursera的联合创始人(with Daphne Koller)。
2014年5月16日,吴恩达加入百度,担任百度公司首席科学家,负责百度研究院的领导工作,尤其是Baidu Brain计划。
Scikit-learn项目最早由数据科学家David Cournapeau 在2007 年发起,需要NumPy和SciPy等其他包的支持,是Python语言中专门针对机器学习应用而发展起来的一款开源框架。
它的维护也主要依靠开源社区。
-------------------------------------------正文-------------------------------------------------
在做数学分析之前我们需要掌握以下知识
1.矩阵求导
2.方阵的迹
1.矩阵求导:
设现在有一方程
可知y的值是受x1,x2... ... xn 的值变化,我们可以这么类比,在三维空间中存在一个平面,这个平面弯弯曲曲,在平面上的一点他的梯度由向x和y方向的下降的趋势组成,回到方程也就是说y的 y的导 由 沿着 x1 ......xn方向上的“斜率”叠加而成,那就显而易见了,我们就是要求出y的全微分
,现在回到矩阵分析矩阵的。我们定义一个矩阵使得第一列的值为x1第二列的为x2一直到xn

这张图片表示这三个y方程的数据,为了方便我只列了三个特征(也就是x)因为矩阵的每一行代表着一个y ,y对矩阵求导就有

当然为这是为了让大家看清楚并且更能理解,更好的表示求偏导这一特性。
所以得出结论函数ff是从m∗nm∗n的矩阵到实数域的映射,对其求梯度可以表示为如下形式:

当然f(A)是矩阵等情况读者你就可以自己了解一下。
2.方阵的迹
定义:在线性代数中,一个n×n矩阵A的主对角线(从左上方至右下方的对角线)上各个元素的总和被称为矩阵A的迹(或迹数),一般记作tr(A)。于是就有

我们需要用到方阵的迹的几大性质


我对第一(1)进行了证明

好到此为止我们需要整理的线性代数的知识就到此为止了。
问题提出
现在有这么一组数据每一行为一个样本。我们把样本中房子的价格称作features,把卧室数目和房子大小称作target。也就是说在这组数据中每一个样本有两个target和一个features,这个features就是我们要预测出的答案,也就好比方程y=ax1+bx2+C

我们先定义一些符号
m = training examples
x = "input" variables features
y = "output"variable target
(x,y) - training example

有时我们需要让假设h对
的依赖表示出来并且我们假设x0 = 1。

为了让式子更加简洁

此时我们使用最小二乘法来表示算出来的结果与正实数据的关系

注:1/2 是为了更好的计算后面就知道了。
现在我们的任务为找到一组
使得
最小最好越接近于0越好,越接近0代表数据越线性。
接下来我们来了解一个关于梯度的知识
梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。
所以当我们在沿着梯度的方向下降的时候是下降的最快的,当我们的梯度下降到最低为什么是梯度为零时结束 呢?
当迭代点是最优时,其对应的梯度为零称之为无约束问题解得一阶必要条件
证明的核心思想是利用最优点处利用泰勒展开,因为已经是最优点,所以在其附近的点函数值近似相等,便可以得到梯度为零的结论
所以我们可以写出迭代方程

是步长,也就是你朝着梯度的方向下山一步迈远。
过小会导致迭代时间太长。过大可以越过最低点,导致来回震荡,这里的
是需要我们手动输入的
1.第一种解法(迭代少)
对式子的每一行为更新一次
求出结果为

则此时迭代方程为

此时我们是根据第一个样本修改后在来修改第二个参数每一行为一个样本进行迭代。我们画一个等高线,此时的下降趋势为

可以看到随意每次的方向有弯路但是大体方向还是走到了最低处。
2.正规方程
正规方程每次迭代更新需要整个矩阵的数据来求出。
现在我们每一个样本的数据都设置为列矩阵通过下面这种方式来将我们的target examples来表示出来自然 y用来表示features examples。


此时
为


因为

根据我们上面对矩阵的迹和求导就可得


得出最优解

参考文献:
1、斯坦福大学公开课 机器学习
讲师:吴恩达 (Andrew Ng)
原视频:http://open.163.com/special/opencourse/machinelearning.html
2、Scikit-Learn简介
作者:yoyofu007
来源:CSDN
原文:https://blog.csdn.net/yoyofu007/article/details/80924166
Andrew Ng 机器学习公开课 - 线性回归的更多相关文章
- Andrew Ng机器学习公开课笔记 -- 线性回归和梯度下降
网易公开课,监督学习应用.梯度下降 notes,http://cs229.stanford.edu/notes/cs229-notes1.pdf 线性回归(Linear Regression) 先看个 ...
- Andrew Ng机器学习公开课笔记 -- 支持向量机
网易公开课,第6,7,8课 notes,http://cs229.stanford.edu/notes/cs229-notes3.pdf SVM-支持向量机算法概述, 这篇讲的挺好,可以参考 先继 ...
- Andrew Ng机器学习公开课笔记–Principal Components Analysis (PCA)
网易公开课,第14, 15课 notes,10 之前谈到的factor analysis,用EM算法找到潜在的因子变量,以达到降维的目的 这里介绍的是另外一种降维的方法,Principal Compo ...
- Andrew Ng机器学习公开课笔记 -- 学习理论
网易公开课,第9,10课 notes,http://cs229.stanford.edu/notes/cs229-notes4.pdf 这章要讨论的问题是,如何去评价和选择学习算法 Bias/va ...
- Andrew Ng机器学习公开课笔记 -- Regularization and Model Selection
网易公开课,第10,11课 notes,http://cs229.stanford.edu/notes/cs229-notes5.pdf Model Selection 首先需要解决的问题是,模型 ...
- Andrew Ng机器学习公开课笔记–Reinforcement Learning and Control
网易公开课,第16课 notes,12 前面的supervised learning,对于一个指定的x可以明确告诉你,正确的y是什么 但某些sequential decision making问题,比 ...
- Andrew Ng机器学习公开课笔记 -- Generative Learning algorithms
网易公开课,第5课 notes,http://cs229.stanford.edu/notes/cs229-notes2.pdf 学习算法有两种,一种是前面一直看到的,直接对p(y|x; θ)进行建模 ...
- Andrew Ng机器学习公开课笔记 -- Generalized Linear Models
网易公开课,第4课 notes,http://cs229.stanford.edu/notes/cs229-notes1.pdf 前面介绍一个线性回归问题,符合高斯分布 一个分类问题,logstic回 ...
- Andrew Ng机器学习公开课笔记 -- Logistic Regression
网易公开课,第3,4课 notes,http://cs229.stanford.edu/notes/cs229-notes1.pdf 前面讨论了线性回归问题, 符合高斯分布,使用最小二乘来作为损失函数 ...
随机推荐
- 如何把base64格式的图片上传到到阿里云oss c#版
今天碰到需要把canvas上的的图片转存到阿里云oss,于是百度了半天,一个能打的答案都没有.怒了,自己搞起. 代码超级简单,需要先引入nuget 中啊里云的oss api 1 byte[] arr ...
- pytest框架: fixture之conftest.py
原文地址:https://blog.csdn.net/BearStarX/article/details/101000516 一.fixture优势1.fixture相对于setup和teardown ...
- 【数位DP】SCOI2014 方伯伯的商场之旅
题目内容 方伯伯有一天去参加一个商场举办的游戏.商场派了一些工作人员排成一行.每个人面前有几堆石子. 说来也巧,位置在 \(i\) 的人面前的第 \(j\) 堆的石子的数量,刚好是 \(i\) 写成 ...
- 超简单的CDH6部署和体验(单机版)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Python之包的相关
包的产生: 由于模块不断更新,越写越大,仅用单个py文件会使模块逻辑不够清晰,所以需要将模块的不同功能放入不同的py文件,然后将所有py文件放在一个目录内,这个目录就是包 包就是一个包含用__init ...
- C++ Win 32 使用原始套接字获取所有ip数据包并分析(包括ping包)
/*页面编码:GBK 开发环境 VS2019 */ #define _WINSOCK_DEPRECATED_NO_WARNINGS#include <iostream>#include&l ...
- python中实现格式化输入(史上最简单、最高效的实现方法,不借助任何模块)
今天我在写python作业时突然想到格式化输入一段文字,譬如只需读取输入的前几个字符就行,而不幸的是,python中的输入并没有c中的read().getchar()函数,于是我网上搜了一下,网上的解 ...
- .net core2.2 HealthChecks记录
abp core2.2版时使用 healthChecks使用:安装nuget包:Microsoft.AspNetCore.Diagnostics.HealthChecks startup.cs 中的 ...
- [阿里DIN] 深度兴趣网络源码分析 之 整体代码结构
[阿里DIN] 深度兴趣网络源码分析 之 整体代码结构 目录 [阿里DIN] 深度兴趣网络源码分析 之 整体代码结构 0x00 摘要 0x01 文件简介 0x02 总体架构 0x03 总体代码 0x0 ...
- 当浏览器窗口大小发生变化时,重新绘制JsPlumb中的线条、端点
1 window.addEventListener('resize', () => { 2 this.plumbInstance.repaintEverything() 3 }) 参考文章:ht ...