前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【斯坦福CS229】一文横扫机器学习要点:监督学习、无监督学习、深度学习

【斯坦福CS229】一文横扫机器学习要点:监督学习、无监督学习、深度学习

作者头像
新智元
发布于 2018-09-25 07:32:09
发布于 2018-09-25 07:32:09
78603
代码可运行
举报
文章被收录于专栏:新智元新智元
运行总次数:3
代码可运行

新智元·开发者专栏

来源:stanford.edu

编译:三石

【新智元导读】提及机器学习,很多人会推荐斯坦福CSS 229。本文便对该课程做了系统的整理。包括监督学习、非监督学习以及深度学习。可谓是是学习ML的“掌上备忘录”。

斯坦福CS229—机器学习

  • 监督学习
  • 非监督学习
  • 深度学习

机器学习备忘录——监督学习

监督学习简介

给定一组与输出{y(1),...,y(m)}相关联的数据点{x(1),...,x(m)},我们希望构建一个能够根据x值预测y值的分类器。

预测类型—下表归纳了不同类型的预测模型

模型类型—下表归纳了不同的模型

符号和概念

假设—记一个假设为 hθ,且是我们选择的一个模型。给定一组输入数据x(i),则模型预测输出为hθ(x(i))。

损失函数—一个损失函数可表示为L:(z,y)∈R×Y⟼L(z,y)∈R,它将与实际数据值y对应的预测值z作为输入,并输出它们之间的差异。常见的损失函数归纳如下:

成本函数—成本函数J通常用于评估模型的性能。用损失函数L定义如下:

梯度下降—若学习率表示为 α∈R,则用学习率和成本函数J来定义梯度下降的更新规则,可表示为如下公式:

随机梯度下降法(SGD)是根据每个训练样本对参数进行更新,批量梯度下降法是对一批训练样本进行更新

似然—一个模型的似然(给定参数 L(θ)),是通过将其最大化来寻找最优参数θ。在实际过程中,我们一般采用对数似然 ℓ(θ)=log(L(θ)),因其优化操作较为容易。可表示如下:

牛顿迭代法—是一种数值方法,用于找到一个θ,使 ℓ′(θ)=0成立。其更新规则如下:

线性模型

线性回归

我们假设 y|x;θ∼N(μ,σ2)。

正规方程(Normal Equation)—记X为矩阵,能使成本函数最小化的θ的值是一个封闭的解:

最小均方算法(LMS)—记 α为学习率,对一个包含m个数据点的训练集的LMS算法的更新规则(也叫Widrow-Hoff学习规则),如下所示:

局部加权回归(LWR)—是线性回归的一种变体,它将每个训练样本的成本函数加权为w(i)(x),用参数 τ∈R可定义为:

分类和逻辑回归

Sigmoid函数—即S型函数,可定义为:

逻辑回归—一般用于处理二分类问题。假设y|x;θ∼Bernoulli(ϕ),可有如下形式:

Softmax回归—是逻辑回归的推广,一般用于处理多分类问题,可表示为:

广义线性模型

指数族(Exponential family )—若一类分布可以用一个自然参数来表示,那么这类分布可以叫做指数族,也称作正则参数或连结函数,如下所示:

下表是常见的一些指数分布:

广义线性模型的假设—广义线性模型旨在预测一个随机变量y,作为x∈Rn+1的函数,并且以来于以下3个假设:

支持向量机

通俗来讲,支持向量机就是要找到一个超平面,对样本进行分割。

最优边缘分类器—以h表示,可定义为:

其中,(w,b)∈Rn×R是如下最优问题的解:

Hinge损失—用于SVM的设置,定义如下:

核(Kernel—给定一个特征映射ϕ,核可以表示为:

在实际问题当中,高斯核是较为常用的。

我们一般不需要知道XX的显式映射,只需要知道K(x,z)的值即可

拉格朗日—我们定义拉格朗日L(w,b)为:

生成学习

生成模型首先尝试通过估计P(x|y)来了解数据是如何生成的,而后我们可以用贝叶斯规则来估计P(y|x)。

高斯判别分析

Setting—高斯判别分析假设存在y、x|y=0和x|y=1,满足:

估计—下表总结了最大化似然时的估计:

朴素贝叶斯

假设—朴素贝叶斯模型假设每个数据点的特征都是独立的:

解决方案—当 k∈{0,1},l∈[[1,L]]时,最大化对数似然给出了如下解决方案:

基于树方法和集成方法

即可用于回归,又可用于分类的方法。

决策树—分类和回归树(CART),非常具有可解释性特征。

Boosting—其思想就是结合多个弱学习器,形成一个较强的学习器。

随机森林—在样本和所使用的特征上采用Bootstrap,与决策树不同的是,其可解释性较弱。

其它非参数方法

KNN—即k近邻,数据点的响应由其k个“邻居”的性质决定。

学习理论(Learning Theory)

Union Bound—令A1,...,Ak为k个事件,则有:

Hoeffding inequality —刻画的是某个事件的真实概率与m各不同的Bernoulli试验中观察到的频率之间的差异。

训练误差—给定一个分类器h,我们将训练误差定义为error ˆϵ(h),也被称作经验风险或经验误差,如下所示:

Probably Approximately Correct—即PAC,是一个框架,在此框架下,许多关于学习理论的结果都得到了证明,并且有以下一组假设:

  • 训练和测试集遵循相同的分布
  • 训练样本是独立绘制的

除上述学习理论之外,还有Shattering、上限定理、VC维、Theorem (Vapnik)等概念,读者若感兴趣,可由文末链接进入原文做进一步了解。

机器学习备忘录——非监督学习

非监督学习简介

无监督学习旨在无标记数据中发现规律。

詹森不等式—令f为凸函数、X为一个随机变量。将会有如下不等式:

聚类

最大期望算法(EM)

隐变量—是指使估计问题难以解决的隐藏/未观察到的变量,通常表示为z。下表是涉及到隐变量的常用设置:

算法—EM算法通过重复构建似然下界(E-step)并优化该下界(M-step)来给出通过MLE估计参数θ的有效方法,如下:

k-means聚类

令c(i)表示为数据点i的类,μj为类j的中心。

算法—在随机初始化聚类质心μ1,μ2,...,μk∈Rn之后,k均值算法重复以下步骤直到收敛:

失真函数(distortion function)—为了查看算法是否收敛,定义如下的失真函数:

分层聚类

算法—它是一种聚类算法,采用聚合分层方法,以连续方式构建嵌套的聚类。

类型—为了优化不同的目标函数,有不同种类的层次聚类算法,如下表所示:

聚类评估指标

在无监督的学习环境中,通常很难评估模型的性能,因为没有像监督学习环境中那样的ground-truth标签。

轮廓系数—记a为一个样本和同一个类中其它点距离的平均,b为一个样本与它最近的类中所有点的距离的平均。一个样本的轮廓系数可定义为:

Calinski-Harabaz指数—记k为类的数量,XX和XX是类间、类内矩阵的dispersion矩阵分别表示为:

Calinski-Harabaz指数s(k)表明了聚类模型对聚类的定义的好坏,得分越高,聚类就越密集,分离得也越好。定义如下:

降维

主成分分析

主成分分析是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。

特征值、特征向量—给定一个矩阵A∈Rn×n,如果存在一个向量z∈Rn∖{0},那么λ就叫做A的特征值,而z称为特征向量:

普定理(Spectral theorem)—令A∈Rn×n。若A是对称的,那么A可以通过实际正交矩阵U∈Rn×n对角化。记Λ=diag(λ1,...,λn),我们有:

算法—主成分分析(PCA)过程是一种降维技术,通过使数据的方差最大化,在k维上投影数据,方法如下:

  • 第一步:将数据标准化,使其均值为0,标准差为1。
  • 第二步:计算

,它与实特征值对称。

  • 第三步:计算Σ的k个正交主特征向量,即k个最大特征值的正交特征向量。
  • 第四步:在spanR(u1,...,uk)上投射数据。

这个过程使所有k维空间的方差最大化。

独立分量分析

这是一种寻找潜在生成源的技术。

假设—我们假设数据x是通过混合和非奇异矩阵A,由n维源向量 s=(s1,...,sn)生成的(其中,si是独立的随机变量),那么:

目标是找到混合矩阵W=A−1

Bell和Sejnowski的ICA算法—该算法通过以下步骤找到解混矩阵W:

  • 将x=As=W−1sx=As=W−1s的概率表示为:
  • 记g为sigmoid函数,给定我们的训练数据{x(i),i∈[[1,m]]},则对数似然可表示为:

因此,随机梯度上升学习规则是对于每个训练样本x(i),我们更新W如下:

机器学习备忘录——深度学习

神经网络

神经网络是一类用层构建的模型。常用的神经网络类型包括卷积神经网络和递归神经网络。

结构—关于神经网络架构的描述如下图所示:

记i为网络中的第i层,j为一个层中第j个隐含单元,这有:

激活函数—在隐含单元的末端使用激活函数向模型引入非线性复杂性。以下是最常见的几种:

交叉熵损失-在神经网络中,交叉熵损失L(z,y)是常用的,定义如下:

学习率—通常被记作α或η,可表明在哪一步权重得到了更新。这可以被修正或自适应的改变。目前最流行的方法是Adam,这是一种适应学习率的方法。

反向传播—是一种通过考虑实际输出和期望输出来更新神经网络权重的方法。关于权重w的导数是用链式法则计算的,它的形式如下:

因此,权重更新如下:

更新权重—在神经网络中,权重的更新方式如下:

  • 第一步:对训练数据取一个batch;
  • 第二步:进行正向传播以获得相应的损失;
  • 第三步:反向传播损失,得到梯度;
  • 第四步:使用梯度更新网络的权重。

Dropout—是一种通过在神经网络中删除单元来防止过度拟合训练数据的技术。

卷积神经网络

超参数—在卷积神经网络中,修正了以下超参数:

层的类型—在卷积神经网络中,我们可能遇到以下类型的层:

卷积层要求—记W为输入量大小,F为卷积层神经元大小,P是zero padding的数量,那么在给定体积(volumn)内的神经元数量N是这样的:

Batch归一化—记γ,β为我们想要更正的batch的均值和方差,则:

它通常是在完全连接/卷积层和非线性层之前完成的,目的是提高学习率并减少对初始化的强烈依赖。

递归神经网络

gate的类型—以下是在典型递归神经网络中存在的不同类型的gate:

LSTM—该网络是一种RNN模型,它通过添加“forget” gates来避免梯度消失问题。

强化学习与控制

强化学习的目标是让智能体学会如何在环境中进化。

马尔科夫决策过程—即MDP,是一个五元组 (S,A,{Psa},γ,R),其中:

  • S是一组状态;
  • A是一组行为;
  • {Psa}是s∈S和 a∈A的状态转换率;
  • γ∈[0,1]是discount系数;
  • R:S×A⟶R或R:S⟶R是算法要最大化的奖励函数

加粗:策略—是一个函数 π:S⟶A,是将状态映射到行为中。

加粗:Value Function—给定一个策略π和状态s,可定义value functionVπ

为:

贝尔曼方程—最优贝尔曼方程刻画了最优策略π的value function

Value迭代算法—主要分为两个步骤:

  • 初始化value:
  • 基于之前的value进行迭代:

最大似然估计—状态转移概率的最大似然估计如下:

Q-Learning—是Q一种无模型估计,公式如下:

参考链接:

https://stanford.edu/~shervine/teaching/cs-229/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 新智元 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
3 条评论
热度
最新
学到了学到了
学到了学到了
回复回复点赞举报
太6了
太6了
回复回复点赞举报
学习了
学习了
回复回复点赞举报
推荐阅读
【无痛学Python】Matplotlib数据可视化,看这一篇就够了!
我们都知道数形结合的概念,图形往往可以帮助我们更好地分析数据之间的差异以及它们的趋势,同时数据的可视化基本就是通过图形来实现的。
Skrrapper
2025/06/11
3810
【无痛学Python】Matplotlib数据可视化,看这一篇就够了!
数据可视化之matplotlib绘制正余弦曲线图
在python里面,数据可视化是python的一个亮点。在python里面,数据可视可以达到什么样的效果,这当然与我们使用的库有关。python常常需要导入库,并不断调用方法,就很像一条流数据可视化的库,有很多,很多都可以后续开发,然后我们调用。了解过pyecharts美观的可视化界面 ,将pyecharts和matplotlib相对比一下。
兰舟千帆
2022/07/16
1.9K0
数据可视化之matplotlib绘制正余弦曲线图
深度学习基础之matplotlib,一文搞定各个示例
Matplotlib 是 Python 的绘图库。它可与 NumPy 一起使用 ,Matplotlib也是深度学习的常用绘图库,主要是将训练的成果进行图形化,因为这样更直观,更方便发现训练中的问题,今天来学习下,走起!!
香菜聊游戏
2021/10/19
1.6K0
深度学习基础之matplotlib,一文搞定各个示例
python matplotlib各种绘图类型完整总结
plot([x], y, [fmt], [x2], y2, [fmt2], …, **kwargs)
Twcat_tree
2022/12/05
6.1K0
python matplotlib各种绘图类型完整总结
Matplotlib 绘2D图
Matplotlib 是一个非常简单而又完善的开源绘图库。那么它到底有多简单呢? 基本知识 首先官方文档奉上 下面,我们通过 3 行代码绘制一张简单的折线图。 from matplotlib imp
听城
2018/04/27
2.5K0
Matplotlib 绘2D图
掌握进阶:高级功能、图表定制与地理数据绘制
Matplotlib是一个功能强大的数据可视化库,为数据科学家提供了丰富的工具和功能,可以以直观的方式呈现数据。
一键难忘
2023/12/19
1K0
基于Matplotlib的高级数据可视化技术与实践探索
文章链接:https://cloud.tencent.com/developer/article/2466769
一键难忘
2024/11/21
3970
Python中局部放大图案例
参考链接:Python中 Matplotlib局部放大图的画法_wulishinian的博客-CSDN博客_python 局部放大
汀丶人工智能
2022/12/21
1.1K0
Python中局部放大图案例
带你十分钟快速入门画图神器 Matplotlib
在开始正式介绍 Matplotlib 用法之前,先来简单了解下 Matplotlib。
abs_zero
2018/09/25
1.2K0
带你十分钟快速入门画图神器 Matplotlib
玩转Matplotlib的10个高级技巧
Matplotlib是Python中流行的数据可视化库,仅使用简单的几行代码就可以生成图表。但是默认的方法是生成的图表很简单,如果想增强数据演示的影响和清晰度,可以试试本文总结的10个高级技巧,这些技巧可以将可视化提升到一个新的水平:
deephub
2023/08/30
3350
玩转Matplotlib的10个高级技巧
Python基础(十二) | 还不会python绘图?两万字博文教你Matplotlib库(超详细总结)
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html#matplotlib.pyplot.plot
timerring
2022/10/08
2.6K0
Python基础(十二) | 还不会python绘图?两万字博文教你Matplotlib库(超详细总结)
Python可视化 | xarray 绘图时序图
xarray 通过对plt.plot()的包装实现对线图的绘制。如前面所述,axes可以用变量进行标记,从而可以传递给底层matlibplot调用。
郭好奇同学
2021/07/30
3.6K0
Python可视化 | xarray 绘图时序图
(七)Python绘图基础:Matplotlib绘图
        除了使用scatter函数之外,还可以使用plot函数后加参数'o'来实现,代码如下所示:
小点点
2022/12/12
2.3K0
(七)Python绘图基础:Matplotlib绘图
Python3快速入门(十六)——Mat
Matplotlib是 Python 2D-绘图领域使用最广泛的套件,可以简易地将数据图形化,并且提供多样化的输出格式。 matplotlib有两个接口,一个是状态机层的接口,通过pyplot模块来进行管理;一个是面向对象的接口,通过pylab模块将所有的功能函数全部导入其单独的命名空间内。
py3study
2020/01/03
1.4K0
【matplotlib】1-使用函数绘制图表
在一个图形输出窗口中,底层是一个Figure实例,通常称之为画布,包含一些可见和不可见的元素。在画布上的就是图形,图形是一些Axes实例,里面几乎包含了matplotlib的组成元素,例如坐标轴、刻度、标签、线和标记等。
程序员小涛
2022/12/05
1.4K0
【matplotlib】1-使用函数绘制图表
python可视化图表(python 显示图片)
它是用来创建 总画布/figure“窗口”的,有figure就可以在上边(或其中一个子网格/subplot上)作图了,(fig:是figure的缩写)。
全栈程序员站长
2022/08/01
9980
python可视化图表(python 显示图片)
python matplotlib函数备忘
matplotlib是python中一个非常好用的画图库,倾向于使用数据画图,设计思路与matlab中的plot相同。
羽翰尘
2019/11/19
1.1K0
Python数据分析Matplotlib
1.2 使用matplotlib.pyplot中的annotate()函数标注文字
荣仔_最靓的仔
2021/02/02
3.7K0
Python数据分析Matplotlib
10分钟入门Matplotlib: 数据可视化介绍&使用教程
“一张图胜过千言万语”,对于数据来说同样地,“一张可视化的图片胜过一张复杂的数据表格或报告”。
deephub
2020/05/09
1.9K0
10分钟入门Matplotlib: 数据可视化介绍&使用教程
一行代码让matplotlib图表变高大上
matplotlib作为Python生态中最流行的数据可视化框架,虽然功能非常强大,但默认样式比较简陋,想要制作具有简洁商务风格的图表往往需要编写众多的代码来调整各种参数。
Feffery
2021/07/27
1K0
相关推荐
【无痛学Python】Matplotlib数据可视化,看这一篇就够了!
更多 >
LV.3
腾讯云高级工程师
目录
  • 【新智元导读】提及机器学习,很多人会推荐斯坦福CSS 229。本文便对该课程做了系统的整理。包括监督学习、非监督学习以及深度学习。可谓是是学习ML的“掌上备忘录”。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验