给定一个矩阵A∈Rm×n,以及一个向量x∈Rn,他们乘积为一个向量y = Ax∈Rm。也即如下的表示:

如果A为行表示的矩阵(即表示为

),则y的表示为:

相对的,如果A为列表示的矩阵,则y的表示为:

即:y看成A的列的线性组合,每一列都乘以一个系数并相加,系数由x得到。

同理,

yT=xT*A表示为:

yT是A的行的线性组合,每一行都乘以一个系数并相加,系数由x得到。

同样有两种表示方式:

第一种:A表示为行,B表示为列

第二种,A表示为列,B表示为行:

本质上是一样的,只是表示方式不同罢了。

定义函数f,是从m x n矩阵到实数的一个映射,那么对于f在A上的梯度的定义如下:

这里我的理解是,f(A)=关于A中的元素的表达式,是一个实数,然后所谓的对于A的梯度即是和A同样规模的矩阵,矩阵中的每一个元素就是f(A)针对原来的元素的求导。

因为篇幅原因,所以不在这里继续赘述,其他需要的概念还有单位矩阵、对角线矩阵、矩阵转置、对称矩阵(AT=A)、反对称矩阵(A=-AT)、矩阵的迹、向量的模、线性无关、矩阵的秩、满秩矩阵、矩阵的逆(当且仅当矩阵满秩时可逆)、正交矩阵、矩阵的列空间(值域)、行列式、特征向量与特征值……

在课程中用到了许多公式,罗列一下。嗯,部分公式的证明很简单,部分难的证明我也不会,也懒得去细想了,毕竟感觉上数学对于我来说更像是工具吧。

转置相关:

•(AT)T = A•(AB)T = BT AT•(A + B)T = AT + BT

迹相关:

•For A∈Rn×n, trA = trAT .•For A, B∈Rn×n, tr(A + B) =trA + trB.•For A∈Rn×n, t∈R, tr(tA) = t trA.•For A, B such that AB issquare, trAB = trBA.•For A, B, C such that ABC issquare, trABC = trBCA = trCAB。 当乘法变多时也一样,就是每次从末尾取一个矩阵放到前面去,这样的矩阵乘法所得矩阵的迹是一致的。

秩相关

•For A∈Rm×n,rank(A)≤min(m, n). If rank(A) = min(m, n),则A称为满秩•For A∈Rm×n,rank(A) = rank(AT).•For A∈Rm×n, B∈Rn×p,rank(AB)≤min(rank(A), rank(B)).•For A, B∈Rm×n,rank(A + B)≤rank(A) +rank(B).

逆相关:

•(A−1)−1 = A•If Ax = b,左右都乘以A−1得到x = A−1b.•(AB)−1 = B−1A−1•(A−1)T = (AT)−1. F通常表示为A−T.

行列式相关:

•For A∈Rn×n, |A| = |AT |.•For A, B∈Rn×n, |AB| = |A||B|.•For A∈Rn×n, |A| = 0,表示矩阵A是奇异矩阵,不可逆矩阵•For A∈Rn×n and A可逆, |A|−1 = 1/|A|.

梯度相关:

• ∇x(f(x) + g(x)) =∇xf(x) +∇xg(x).•For t∈R,∇x(t f(x)) = t∇xf(x).

• ∇xbT x = b• ∇xxT Ax = 2Ax (if A对称)• ∇2xxT Ax = 2A (if A对称)

• ∇A|A| =(adj(A))T = |A|A−T . adj=adjoint

例子用的是上节课的房价的例子,有一组数据,有房子面积和房子价格,输入格式举例:

老师定义的变量如下:

m:训练样本的数目

x:输入的变量(输入的特征,在这个例子中为房子面积,后来又加了一个房子的卧室数目)

y :输出变量(目标变量,这个例子中就是房价)

(x,y):表示的是一个样本

:表示的第i个样本,表示为

所谓的监督学习即为告诉算法每个样本的正确答案,学习后的算法对新的输入也能输入正确的答案。监督指的是在训练样本答案的监督下,h即为监督学习函数。

此例中我们假设输出目标变量是输入变量的线性组合,也就是说,我们的假设是存下如下的h(x):

Theta表示是特征前面的参数(也称作特征权重)。也就是经过h(x)之后得到的就是预测的结果了。

如果假设x0=1,那么原来的h(x)就可以简单的表示为如下形式:

,其中n为特征数目,我们为了表达简便,把theta和x都写成向量的形式。下面就是如何求出θ(向量)使得h(x)尽可能接近实际结果的,至少在训练集内接近训练集中的正确答案。

我们定义一个花费函数(costfunction),针对每一组θ,计算出h(x)与实际值的差值。定义如下:

这也是用的最小二乘法的思想,但是之所以乘以1/2是为了简化后面的计算。针对训练集中的每一组数据。剩下的问题就是求得minJ(θ)时的θ取值,因为J(θ)是随着θ变化而变化,所以我们要求得minJ(θ)时的θ就是我们想要的θ(这个min也叫做最小花费函数),怎么样求出这组theta呢?采用的方法就是梯度下降算法和正规方程组。我们首先来看梯度下降算法。

梯度下降算法是一种搜索算法,基本思想可以这样理解:我们从山上的某一点出发,找一个最陡的坡走一步(也就是找梯度方向),到达一个点之后,再找最陡的坡,再走一步,直到我们不断的这么走,走到最“低”点(最小花费函数收敛点)。

如上图所示,x,y表示的是theta0和theta1,z方向表示的是花费函数,很明显出发点不同,最后到达的收敛点可能不一样。当然如果是碗状的,那么收敛点就应该是一样的。

算法的theta更新表示如下:

对每一个theta(j),都先求J(θ)对theta(j)的偏导(梯度方向),然后减少α,然后将现在的theta(j)带入,求得新的theta(j)进行更新。其中α为步长,你可以理解为我们下山时走的步子的大小。步子太小了,收敛速度慢,步子太大了,可能会在收敛点附近来回摆动导致无法到达最低点。P.S.这个符号根据老师所说理解为程序中的赋值符号(=号),如果是=号,则理解为值是相等的(编程里面的==号)。

下面我们先理解下,假设现在训练集只有一组数据求关于theta(j)的偏导:

带入

python sklearn 梯度下降法_Python- sklearn之梯度下降算法原理相关推荐

  1. python梯度下降法实现线性回归_梯度下降法的python代码实现(多元线性回归)

    梯度下降法的python代码实现(多元线性回归最小化损失函数) 1.梯度下降法主要用来最小化损失函数,是一种比较常用的最优化方法,其具体包含了以下两种不同的方式:批量梯度下降法(沿着梯度变化最快的方向 ...

  2. 机器学习小组知识点45:批量梯度下降法(BGD)和随机梯度下降法(SGD)的代码实现Matlab版1

    原 机器学习小组知识点4&5:批量梯度下降法(BGD)和随机梯度下降法(SGD)的代码实现Matlab版 2016年10月19日 10:17:28 Eric2016_Lv 阅读数:3379 这 ...

  3. 【机器学习】机器学习(一、二):批梯度下降法、随机/增量梯度下降法、最小二乘法

    前言: STANFORD机器学习公开课第1.2课(Andrew Ng主讲),本文记录学习过程,整理学习笔记,并将MATLAB代码共享,以便回顾. 简介: 本节介绍机器学习中常用的线性回归模型,鉴于是第 ...

  4. Python机器学习:梯度下降法002模拟实现梯度下降法

    模拟实现梯度下降法 import numpy as np import matplotlib.pyplot as plt 生成数据 plot_x = np.linspace(-1,6,141) pri ...

  5. 1. 批量梯度下降法BGD 2. 随机梯度下降法SGD 3. 小批量梯度下降法MBGD

    排版也是醉了见原文:http://www.cnblogs.com/maybe2030/p/5089753.html 在应用机器学习算法时,我们通常采用梯度下降法来对采用的算法进行训练.其实,常用的梯度 ...

  6. tensorflow计算网络占用内存_详细图解神经网络梯度下降法(tensorflow计算梯度)...

    1.什么是梯度 各个方向的偏微分组成的向量 ​ 举例说明,z对x的偏微分和对y的偏微分如下,则梯度是(-2x,2y)的这样一个向量 ​ 在光滑连续函数的每个点上,都可以计算一个梯度,也就是一个向量,用 ...

  7. python kfold交叉验证_Python sklearn KFold 生成交叉验证数据集的方法

    源起: 1.我要做交叉验证,需要每个训练集和测试集都保持相同的样本分布比例,直接用sklearn提供的KFold并不能满足这个需求. 2.将生成的交叉验证数据集保存成CSV文件,而不是直接用sklea ...

  8. Python机器学习:梯度下降法008如何确定梯度计算的准确性,调试梯度下降法

    #调试梯度 import numpy as np import matplotlib.pyplot as pltnp.random.seed(666) X = np.random.random(siz ...

  9. python画猪头_python - sklearn.preprocessing.Imputer

    在数据集中可能会出现为空的数据,我们不能删除有空数据的列,这样会对我们机器学习的结果造成影响,在data science中我们可以用NaN代替空值,但是在ML中必须要求数据为numeric.所以我们可 ...

  10. python kfold交叉验证_Python sklearn KFold 生成交叉验证数据集

    源起: 1.我要做交叉验证,需要每个训练集和测试集都保持相同的样本分布比例,直接用sklearn提供的KFold并不能满足这个需求. 2.将生成的交叉验证数据集保存成CSV文件,而不是直接用sklea ...

最新文章

  1. 可逼近信道容量编码技术之霍夫曼编码的实现
  2. 让你android手机变平板,手机瞬间变平板 两种形态随意换_手机Android频道-中关村在线...
  3. yum 仓库 本地和在线
  4. Docker的镜像使用
  5. C语言实现-双链表练习
  6. 大学生成绩管理系统(C语言)
  7. 常量池在堆还是方法区_第九章_方法区
  8. Python基础知识3: if判断语句
  9. 玩转springboot2.x之快速搭建(start.spring.io)
  10. 只有音频没指纹,能抓对人吗?CMU音频分析AI说没问题
  11. 卷积神经网络训练准确率突然下降_从MobileNet看轻量级神经网络的发展
  12. html 随机 小游戏代码,html小游戏代码#(精选.)(3页)-原创力文档
  13. python opencv实现 12色相环、24色相环(基于RGB空间和基于HSV空间实现)
  14. H3C-NE实验主要命令
  15. josn 格式 解析
  16. SIMD——MMX指令的溢出处理
  17. 读者写者模型---读优先与写优先
  18. 问道海岛地区服务器维护,问道7月9日全区更新维护公告
  19. 如何用MindManager制作一个sop流程
  20. kafka consumer 停止消费topic

热门文章

  1. Rational Rose 逆向工程(java) 常见问题二则
  2. 多种问题袭来:崩溃在边缘的“直播赚钱路”
  3. Go语言极速入门手册
  4. 重读《JavaScript DOM编程艺术》(第一版)
  5. Debian GNU/kFreeBSD是什么
  6. 浏览器了解(一)浏览器大概流程
  7. Prettier 是 javascript 代码灵活美化工具
  8. Web开发的未来:React、Falcor和ES6
  9. 比较好的JavaScript库-日常备用
  10. 3389服务器信息是什么意思,服务器3389端口监控问题