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 前面讨论了线性回归问题, 符合高斯分布,使用最小二乘来作为损失函数 ...
随机推荐
- day09 Pyhton学习
一.昨日内容回顾 文件操作 open(文件路径,mode="模式",encoding="编码") 文件路径: 1.绝对路径 从磁盘根目录寻找 2.相对路径 相对 ...
- sync.WaitGroup的使用以及坑
all goroutines are asleep - deadlock 简单使用: package main import ( "sync" ) type httpPkg str ...
- go 结构体与方法
go 结构体与方法 go 结构体相当于 python 中类的概念,结构体用来定义复杂的数据结构,存储很多相同的字段属性 结构体的定义 1.结构体的定义以及简单实用 package main imp ...
- 单元测试之道Java版——读书笔记
单元测试知道Java版读书笔记 首先我们必须要知道我们所写的代码,它的功能是什么,如果我们不了解代码的行为,那么也就无从测试. 我们测试的目的,是为了我们整个程序架构的稳定,代码其实就是欧文要实现功能 ...
- Django采坑日志(django2.0)
使用Mariadb时出现的问题 "Unknown system variable 'transaction_isolation'" 解决办法:修改django/db/backend ...
- jumpserver部署使用
一.简介 前面我们聊到了openvpn的部署和使用,它能够实现从互联网通过openvpn连接到公司内网服务器,从而进行远程管理:但openvpn有一个缺点它不能记录哪些用户在内网服务器上操作了什么,拥 ...
- 使用Vue简单的写组件的UI库
初始化项目vue create nature-ui 在根目录下面创建一个文件目录放置组件(我这里的创建packages) packages 目录下面创建个个组件的名称并创建index.js(用于输出所 ...
- 在Linux系统中安装Chrome浏览器
前言:作为一个Web开发人员,经常与我们相伴的必然少不了浏览器,而Google旗下的chrome浏览器更是凭借着出色的性能.简洁的界面被广大开发者所喜爱,今天分享下如何在linux系统下安装chrom ...
- 数据结构(C++)——链栈
结点结构 typedef char ElemType; typedef struct LkStackNode{ ElemType data; LkStackNode *next; }*Stack,SN ...
- 如何安装一个高可用K3s集群?
作者介绍 Janakiram MSV是Janakiram & Associates的首席分析师,也是国际信息技术学院的兼职教师.他也是Google Qualified Developer.亚马 ...