斯坦福-EE104-机器学习笔记-全-
斯坦福 EE104 机器学习笔记(全)
001:课程信息


概述
在本节课中,我们将了解斯坦福大学2020年春季的机器学习入门课程的基本信息。
课程介绍
Hello and welcome to EE 104 or CME 107, this is the course. Introduction to machine learning at Stanford University Spring 2020. My name is Sanja Lau. I am the instructor of this class. This class was written by myself and Professor Stephen Boy at Stanford over the past three years.
课程安排
We are, as you know, in the middle of coronavirus outbreak and as a result, much of the university is closed and many of you are working at home. The course is therefore going to be entirely online. All of the lectures will be pre-recorded and we will not have any live lectures, unfortunately. We are aware that many of you are watching these lectures from a variety of different time zones and we will do our best to accommodate that. We will post new lectures every Tuesday and Thursday morning. And we will hold office hours via Zoom.
考试安排
Due to the current situation, there will be no exams in this class. All classes in the School of Engineering are going to be credit or no credit only, and this class is no exception, but there will be homework, it will be given out weekly. 😊.
作业内容
Now, the homework will be about half programming and the other half will be conceptual questions. Maybe a little bit of mathematics. 😊, The programming questions will be using Julia for those. Julia is a modern language which is developed primarily for numerical computing and machine learning, in particular, it's very fast. It's got a very nice syntax which makes it very simple to write sophisticated programs. You do not need to have a very sophisticated understanding of the Julia programming language. Most of the coding that we will do in this class is very short scripts. 😊, We will using the Flux machine learning package that is a package that sits on top of Julia.
课程先决条件
There are some prerequisites in this class, in particular linear algebra. We will be using a lot of the notation of linear algebra and we will need you to be familiar with things such as least squares and a basic understanding of eigenvalues and eigenvectors later in the class. 😊, We don't need anything more sophisticated than that. So any first class in the new algebra will cover enough. 😊, Similarly for programming, we do need you to be able to write code, but very simple code will suffice as I said. We're only going to be writing short scripts, but you do need to be familiar with how to bring data in, how to generate plots, how to understand what data types are. You don't need to have any understanding of complex data structures or object-oriented programming or anything like that. Probability is a corequisite, not a prerequisite. 😊. So, any basic class in probability will do, you can. If you haven't taken it up until now, you can take it concurrently with the class and that's fine. We won't be using probability for the first few weeks. But after that, we will stop to use both the language and some of the ideas and methods of probability as well.

总结
And that brings me to the end of the mechanics section of the class. Hope you enjoy. E1 at4.
002:斯坦福大学《机器学习|Stanford EE104 Introduction to Machine Learning 2020》deepseek翻译 p02 Lecture - 2 overview.zh_en -BV1utzNYqEkr_p2-


🧠 机器学习概述
在本节课中,我们将介绍机器学习的基本概念和方法。
1. 机器学习的基本思想
机器学习的主要目标是使计算机能够执行复杂的任务,例如医疗诊断。
公式:机器学习 = 数据 + 算法 + 模型
代码:model = algorithm(data)
2. 机器学习的方法
机器学习方法可以分为两大类:
- 基于知识的系统:通过编码逻辑来表示世界属性和含义。
- 机器学习:使用历史数据训练模型,使其能够进行预测。
3. 机器学习的过程
机器学习过程可以分为两个主要任务:
- 构建模型:从数据中构建模型,包括:
- 将数据转换为计算机可理解的格式。
- 选择模型形式(例如,线性回归、决策树、神经网络)。
- 选择模型参数。
- 测试模型:在未参与训练的数据上测试模型,以验证其性能。
4. 机器学习模型分类
- 监督学习:从标记数据中学习,用于预测。
- 分类:预测离散标签。
- 回归:预测连续值。
- 无监督学习:从未标记数据中学习,用于模式识别和聚类。
5. 机器学习应用示例
- 预测降雨量:使用过去10天的降雨数据预测明天的降雨量。
- 人脸识别:根据照片识别用户身份。
- 疾病诊断:根据患者数据和测试结果预测疾病。
- 客户细分:将客户分为具有相似购买习惯的组。
- 异常检测:识别可疑数据。
- 数据生成:生成类似于给定数据的新数据。
6. 机器学习性能评估
- 回归:均方误差(MSE)。
- 分类:错误率、精确度、召回率。
- 概率模型:似然函数。
7. 数据和软件
- 数据集:Caggle、ImageNet、Street View、自动驾驶汽车数据。
- 软件:PyTorch、Keras、TensorFlow、Flux、Spark MLlib。
8. 总结
本节课介绍了机器学习的基本概念、方法和应用。通过学习本节课,你将了解机器学习的基本原理,并能够将其应用于实际问题。
本节课中我们一起学习了:



- 机器学习的基本概念和方法
- 机器学习的过程
- 机器学习模型分类
- 机器学习应用示例
- 机器学习性能评估
- 数据和软件
003:斯坦福大学《机器学习|Stanford EE104 Introduction to Machine Learning 2020》deepseek翻译 p03 Lecture 3 - predictors.zh_en -BV1utzNYqEkr_p3-


🧠 斯坦福大学《机器学习》课程:第3节:预测器
概述
在本节课中,我们将学习机器学习中的预测器。预测器是一种模型,它接受特征向量X并预测相应的结果Y。
数据拟合
在机器学习中,数据拟合是一个主要任务。我们有一个变量Y和一个变量X,我们认为它们是相关的。通过某个函数,比如说y。
y等于f(x)。我们认为y大约等于F(x)。
在这里,我们认为x是自变量,y是结果。或者响应。
我们可能会称它为目标或标签或因变量。
通常,y在RM中,x在RD中,所以这两个都是向量。通常,M是1。
因此,结果是标量。我们说,嗯,目标是与自变量相关的。
大约通过Y是F(x)。
我们将被告知X,我们希望能够预测Y。并且。
我们不知道这个函数是什么。当然,可能没有这样的函数,因为y和X可能只是一堆无关的数据。
它们是否通过我们不知道的其他变量相关,或者你在一个时间点放一个x,你会得到一个y,你在一个不同的时间点放一个x,你会得到一个不同的y。有很多噪声。
Y和X之间存在概率关系,而不是纯粹的确定性关系。
通常,这些x是,这些变量x。通常,这些变量x是特征向量,而不是底层数据本身。例如。
如果我们有文档,对于每个文档,我们可能会制作一个词频直方图。然后计算所有不同单词的数量。这将X。
这是词频向量。如果我们有患者数据,那么X可能是一组不同的患者属性。
一组测试结果,也许是一组症状。如果我们数据由客户组成。
那么对于每个客户,我们都会有一个X,这将是该客户的购买历史。
也许是一般框架。从原始输入数据构建特征。
所以原始输入数据可能是向量本身。它可能是一个单词或文档。
它可能是一张图片,它可能是一段视频,它可能是一段音频。
或它可能是一组此类属性。可以考虑多个属性。
我们将称该输入数据为U。我们将将其映射到函数φ下构建x。
我们将其称为相应的特征向量。
这个函数φ有一个名字,它被称为嵌入,或特征函数或特征映射。
有时φ非常简单,有时它非常复杂。
我们将从φ中提取一个特定的属性,我们确保由于φ是一个向量。
我们将确保φ的第一个分量总是1。
因此,这可以表示为x1φ或5hiφ1。它是常数特征。
我们将在稍后解释这个原因。同样,我们嵌入或构建输出数据的特征。
我们将称这些为y。
我们将有y等于ψ(V)。所以我们的数据以对的形式出现。UIs in VIs。
数据元素是一个对UI VI,我们将它们映射到对X IYI。
我们有N个数据点,x1到Xn,y1到Yn。
一旦我们嵌入它们,一旦我们构建了特征。
然后我们不再需要直接查看U和V,相反,我们可以专注于X和Y。
所以我们将有N个D维向量,x1到xn。
M维向量,y1到Yn。
我们将X IYI称为I数据对或观察。特别地。
一个有启发性的术语是将其称为我们希望从中学习的I示例。
集体地。
我们称X和Y的整个集合为数据集。
嗯。所以这是我们将要使用来构建。
一些。拟合。
模型,用于X和Y之间的关系。我们还有。
所以那是我们的基本数据,我们将使用它来构建。
一些。拟合。
模型。我们可能还知道F可能看起来像什么。
例如,多项式。
我们可能会说F是平滑的或连续的。
这意味着如果x和x t是两个彼此接近的向量。
那么f(x)和f(x t)也应该彼此接近。
在F之前,我们可能知道的其他先验知识是,我们可能知道y始终是非负的。
因此,我们希望确保F poles在模型中的这一属性。
我们将从x和y中学习,我们将看到很多y值。
无论我们看到什么y值,我们都希望确保。
我们的学习算法产生的模型具有这样的属性,即任何x的f都是始终非负的。
还有很多其他这样的先验知识。
所以有很多其他先验知识的例子。
所以我们要构建的东西被称为预测器。
它是一个接受X并给出在该X处y的预测的模型。
我们用G表示,它是一个接受RD中的向量x并给出RM中的向量y的函数。
对于特征向量x的预测,我们将表示为y,y是G(x)。
预测器G是基于两件事选择的。
我们看到的数据和我们拥有的先验知识。
这意味着我们可以。
在原始数据方面,使用新的原始数据记录构建预测。
所以如果你给我一个我以前从未见过的U。
我将将其映射到φ下嵌入,并给出x,构建与该U对应的特征向量。
然后我可以取那个X并将其输入到预测器中,构建G(x)。
这是对y的估计,对y的预测。
然后我可以通过应用特征映射ψ的逆来取消嵌入,给出V的估计,我们将其称为V^。
这意味着我可以根据原始数据测试预测器的性能。
在原始数据方面,而不是在x和y方面。
当然,你也可以评估这个预测器在数据上的表现如何。
我们可以取一个数据对,I数据对是X I,你将XI输入G。
我们将得到Y,我们将其称为Y I。
我们希望Y^ I接近Y I。这意味着预测器在数据上表现良好。
这是对预测器的一个非常合理的要求。
当然,我们的真正目标不是让。
预测器在数据上表现良好,而是让预测器在。
我们尚未看到的潜在数据上表现良好。
当有人给我们一些新的。
X或一些新的U时。
他们可以相当合理地问,嗯嗯,你从所有那些早期数据中学到了什么?
我们给你。答案是,嗯,从所有这些数据中。
我了解到这些类型的x会产生这些类型的y,让我预测由你给出的x生成的特定y。
现在当我们使用预测器时,我们通常不会说,嗯,这里有一个预测器。
我们通常有一个预测器的参数化形式。
所以预测器是x的函数。
它是θ的函数。所以我们将有Y^是G(x, θ)。
有时我们将其写成下标,所以我们将写成Y^是G_θ(x)。
这只是为了方便引用G。
G_θ是一个函数,它接受X并给出y。
这为我们指定了一个形式,一个结构。
😊允许预测器或我们喜欢的预测器。
我们只选择与θ对应的预测器。
我们的工作变成了,而不是选择一个任意映射X到y的函数,选择θ。
然后评估G(x, θ)。所以θ是一个参数,它通常是一个向量。
它是预测模型的参数。θ通常在某个欧几里得空间中。
这里我们写了RPP,有时它是一个矩阵,我们将会看到。
有时它是一个列表,有不止一个参数,不止一个参数向量。
不止一个参数矩阵。
😊选择一个特定的θ。
这被称为调整或训练或拟合模型。
学习算法是选择θ的配方,例如。
我们可能有一个线性回归模型。
它说Y^是θ1x1加上θ2x2一直加到θD。
我们的工作是要选择θ,使得。
这是一个好的预测器。
我们在之前的线性代数课程中已经看到,可以使用这些平方来拟合这样的线性回归模型。
选择θ以最小化均方误差。
当然,有很多其他方法可以用来选择,进行线性回归,选择θ。
即使在线性回归模型中,我们将在本课程中讨论其中一些。
我想谈谈一类特殊的预测器,称为最近邻预测器。
😊。
它们的工作方式如下,我们得到一个数据集。
X1到Xn,Y1到Yn。
预测器说以下内容。你有一些新的X,你想要预测相应的Y^。
你这样做的方式是,在所有你有的数据中。
你找到最接近X的Xi。然后你预测相应的Y^ I。
这就是G在X处的定义。
这非常直观。
如果你有一些新的数据,你想要预测在该数据点x处的y。
嗯,为什么不寻找与之匹配的最近示例呢?
嗯。这可能是我们拥有的最接近的示例。所以让我们预测。
我们得到的y是之前示例中得到的y。
当然,这当然是一个参数化预测器。
参数有点有趣,因为参数是整个数据集。
你可以认为θ是整个数据集中的x1到Xn和y1到Yn。
我们不需要选择参数,参数是由数据给出的。
它是数据。所以训练很简单,没有训练,没有计算要做。
我们只需要做。
是。跟踪我们所看到的所有数据,每当得到一个新的查询点。
一个新的X。我们只需在数据集中找到最接近的X即可。
并返回相应的Y。
这意味着G将是x的分段常数函数。
因为当x比所有其他x更接近Xi时。
geo x只是yi。我们可以看到这一点。
在这个图表中。让我看看我是否可以突出显示这个图表上的某些点。
所以这些是数据点。
橙色线,我将用黑色突出显示,这条线。
这条线。它在这里。是预测器?
它告诉我们,例如,如果我们收到。
诶呀。x的值为0.2。
那么我们应该预测。
相应的y值为0.47。
所以即使我们只在特定点上得到数据点。
我们拟合了一个曲线,不是曲线,而是一个分段常数函数通过这些点。
要注意的是,函数有间断点。
让我们看看这些间断点。
所以这里有一个。也是哪个。还是哪个。
这些间断点正好位于两个相邻数据点之间。
所以当我们改变x时。
当我们在这里时。😊,我们的最近邻数据点是这个红色点。
然后当我们增加x时,我们突然切换到最接近的数据点是这个。
数据点X在这里,因此我们也将预测切换为预测这个数据点对应的y。
你可以在多个维度上这样做,这里不一定是单维X。
当x是d维时也可以这样做。
这里是一个二维案例。
在这个二维案例中,我们有数据点。
我会在这些点上突出显示这些蓝色点。
啊。并且。啊。现在与每个数据点相关联。
有一个区域,例如,对于这个数据点。
有一个区域是这个区域。
这是一个多面体,它有直线边界。
这是与这个数据点相关联的数据点的集合。
对于这个数据点,对于这个X。
我的最近邻数据点是这个。
现在如果我移动。
穿过这个边界。
突然我切换到最接近的数据点变成那个。
所以每个数据点都有一个对应区域。
这些区域称为与数据相关的Voi区域。
所以预测器是分段常数函数,它在Voi区域上是常数。
这里是它的三维图,这是x1,这是x2,这是预测。
Y或Y^?
所以这里我们有,再次,我们有数据点。
这里。
然后这是函数值。
根据每个数据点。
所以在这里,在这个Voi区域上。
这个Voi区域就在这里。
这是与这个数据点对应的Voi区域,该数据点的值是y1。
y I是-1,对不起。
所以如果我们给出一个新X,它在这个区域的任何地方。
那么我们将预测Y^也是-1。
所以现在我们已经看到了最近邻预测器。
我们可以扩展这个想法,谈谈K最近邻预测器。
😊。
这里的想法是,你选择一个数字K,一个整数。
然后你说,嗯,你给我一个x。
而不是只查看x的最近邻。
我将查看K个最近邻,Xi1到XiK。
😊,在给定数据中。
我们将预测Y^如下。
我们将选择那些K个最近邻。
😊,最近的Xi。
每个都有一个相应的Yi,直到我们得到K个相应的Yi。
我们将构建这些KYi的平均值。
这将Y^。
😊,这是最近邻预测器的推广。
它当然非常有用,它被广泛使用,你可能会看到。
它使你对数据的噪声更不敏感,如果数据变化很大。
那么K最近邻预测器将进行一些平均。
它将平滑数据。
它将消除一些噪声。
你可以用很多方法来扩展这个想法,你可以使用加权平均来形成Y^。
或者你可以预处理数据,你可以这样说,嗯,我只看。
数据而不是将其视为数据点的集合。
我只将其视为数据点的集合。
数据点的集合。😊,然后而不是选择最近邻。
我可能会选择最近的簇。
有很多你可以做的事情。
这是计算K最近邻预测器的方法,这是Julia。
😊。
它有一个函数。
它接受X,y,小x和K。
所以这里这个矩阵X。
它是一个N乘以D的矩阵。
它的第i行是第i个X点,它是X。
对应于I数据记录的变量。
y也是一个N乘以M的矩阵。
它是相应的目标。
y的第i行是第i个X行对应的目标变量。
这里,小x是。
查询点,我们给出一个新x,我们想要预测Y。
K在这里。
是K个最近邻,它是我们将考虑的邻居数量。
所以这里的第一行代码只是给我们N。
它查看矩阵X的行数。
这里我们。
查看每个。
Vow和从查询点中减去它,查看该向量的元素平方和。
然后我们得到一个列表,其中包含所有这些不同距离的平方和。
Fas one to n,这是disS,这是所有这些不同距离的列表。
disS的第i个元素是Xi到X的距离。
然后这个函数sort perm给出了指向排序。
🤢,条目的索引。
所以最近邻索引列表的第一个条目是一个整数。
如果查看disS,那么。
所以如果最近邻索引是。
如果最近邻索引列表的第一个条目是7。
那么disS7将是disS中最小的条目。
😊,disS。
同样,第二个。
最近邻索引列表中的第二个条目指向disS中第二个最小的条目。
所以如果我们查看前K个条目,通过从sort perm中提取前K个条目。
这给了我们K个数字。
这些数字指向与X最接近的对应数据记录。
然后我们做的是,我们构建相应的。
取相应的wises。
我们取它们的平均值。
并返回它作为Y^。
当然,如果你用Python或MATLb编写这个,它看起来非常相似。
😊。
这个代码的好处是它实际上非常类似于描述这个算法的数学。
😊。
这是K为2时的相同数据。
现在这很有趣,因为区域。
让我标记一个区域。
所以例如。
这个区域就在这里。
区域仍然是多面体,仍然是直线边界。
它们仍然是多面体。
但是它们现在不再对应于单个数据点。
它们对应于。
这K个数据点,在这种情况下,K是2。
所以这个区域中的每个点。
都是两个最近邻数据点。这个和一个。
你可以看到,如果我在这个区域中,我穿过这个区域。
然后我将从有。
这个和一个。
这是我的最近邻数据点到有。
这个和一个。
这是我的两个最近邻数据点。
所以现在区域与数据点的对相关联。
有更多的区域,因为数据点的数量比单个数据点的数量多。
尽管不是每个数据点的区域都是非空的。
我们可以在这里绘制相应的K最近邻估计。
这是在右侧。
有更多的区域,但函数本身也稍微平坦一些,可变性更小。
这是我们预期的,因为K最近邻预测器。
它将平滑函数。
它仍然是,当然,分段常数。
现在我们可以做的是K最近邻的另一个变体,这是软最近邻预测器。
😊。
我们在这里做的是,我们取测量y的加权平均。
但权重不是固定的,它们取决于x。
所以这里是一个非常常见的权重选择。
😊。
这些权重很有趣。
你可能会注意到,如果我将它们从I是1加到n。
那么I的和WI等于1。
让我们写下这一点。也许使用。
另一件事要注意的是,这里有一个参数。
参数是row。
它具有长度或缩放尺寸,所以特别是。
如果你看这里的分子,我得到了x减去Xi范数的平方除以row平方。
所以当row非常小。
那么1除以row平方非常大。
所以E到负某物。
除以row平方将非常小。
除非分子中有东西。
除非x减去xii范数的平方也。
😊,非常小,除非它们与row平方相似。
这意味着当row非常小。
这个量将等于1,当x接近Xi时。
并且几乎在所有其他地方都是0。
这意味着这个加权求和。
将得到。
最近的。
在最近点Xi处的y值。
所以这会回到最近邻预测器。
当rowe非常小。
当rowe很大时。
它变得有点不同。
😊,让我们看看它变成了什么。
所以我不通过代码。
但这个代码与之前的代码非常相似。
它只是再次明确遵循数学。
😊,所以这里是软最近邻预测器。
😊。
这是rowe为2的情况。
😊。
你可以看到它真的很平滑。
当row为1时。
它变得有点类似于最近邻预测器。
这里我们可以看到当row为0.5时。
在这里,我们可以看到与最近邻预测器非常接近的东西。
😊。
所以这是一种很好的方法来平滑。
最近邻预测器,而不是我们有一个不连续的。
😊,分段常数函数,我们有一个平滑函数。
我们可以使其。
并且我们可以使其尽可能平滑。
线性预测器
现在让我们转向另一类预测器,线性预测器。
😔。
G的形式是G(x, θ)是θ^T乘以x。
当M是1时,这意味着y是标量,参数θ是向量RD。
θ^T乘以x返回一个标量。
当M大于1时。
θ是一个D乘以M的矩阵。
😊,θ^T乘以x将返回一个M维向量。
与y相同的大小。
这也称为线性回归模型。
Y^,G(x)是θ1乘以x1加上θ2乘以x2一直加到θd乘以Xd。
这是θI的线性组合,系数是x1到Xd。
这里air。
如果M是1。
那么θI只是θ的第I个条目。
如果M大于1。
那么θI^T是θ的第I行。
所以每个θI都有与y相同的维度。
所以我们可以这样解释,假设y是标量,为了使解释简单。
当然,当y是向量时,你可以扩展所有这些想法?
那么线性预测器有形式Y^,G(x)是θ1乘以x1加上θ2乘以x2一直加到θd乘以Xd。
这意味着我们可以直接解释θI,所以,嗯。
Cta 3是当x3增加1时预测y^增加的量。
如果你碰巧处于x3是布尔值的情况。
😊,如果它有固定的值0或1。
那么Cta会告诉你当x3打开或关闭时,Y^会受到多大影响。
如果θ7是零,那么这也告诉我们一些东西。
它告诉我们预测不依赖于x7。
一般来说,θ是一个小的向量。
这意味着预测对x的变化不敏感。
这里有一个很好的一个小计算,它说明了这一点。
这里我们查看G(x)和G(x t)之间的绝对值。
我们有两个不同的x。
G(x)是θ^T乘以x,G(x t)是θ^T乘以x t。

所以我们将x收集起来。

等于θ^T
004:斯坦福大学《机器学习|Stanford EE104 Introduction to Machine Learning 2020》deepseek翻译 p04 Lecture 4 - validation.zh_en -BV1utzNYqEkr_p4-


机器学习:04:验证
概述
在本节课中,我们将学习如何评估不同的预测器,并了解验证的概念。
验证指标
以下是常用的验证指标:
- 均方误差 (MSE): $ \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 $
- 均方根误差 (RMSE): $ \text{RMSE} = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2} $
- 平均绝对误差 (MAE): $ \text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i| $
- 平均分数误差: $ \text{平均分数误差} = \frac{1}{n} \sum_{i=1}^{n} \frac{|y_i - \hat{y}_i|}{\min(y_i, \hat{y}_i)} $
验证方法
以下是常用的验证方法:
- 留出法 (Out-of-Sample Validation): 将数据集分为训练集和测试集,使用训练集训练模型,并在测试集上评估模型性能。
- 交叉验证 (Cross-Validation): 将数据集分为K个子集,每次使用K-1个子集作为训练集,剩余1个子集作为测试集,重复K次,取平均值作为最终结果。
过拟合
过拟合是指模型在训练数据上表现良好,但在测试数据上表现不佳的情况。
以下是避免过拟合的方法:
- 正则化: 在模型中加入正则化项,限制模型复杂度。
- 交叉验证: 使用交叉验证选择最佳模型参数。
- 数据增强: 增加训练数据量,提高模型泛化能力。
总结

本节课中,我们学习了如何评估不同的预测器,并了解了验证的概念。通过使用合适的验证指标和方法,我们可以选择最佳的预测器,并避免过拟合。
005:斯坦福大学《机器学习|Stanford EE104 Introduction to Machine Learning 2020》deepseek翻译 p05 Lecture 6 - 经验风险最小化.zh_en -BV1utzNYqEkr_p5-


经验风险最小化
经验风险最小化是学习预测器的过程,它从数据中学习预测器。
许多我们看到的预测器,实际上许多预测器整体上,都具有参数化形式。😊,我们考虑 Y^ 是 G(xm)的θ。
其中 G 是一个函数,它决定了预测器的结构或形式,它可能是。
神经网络,或者它可能是一个线性预测器,或者它可能是一棵树。
θ 是一组参数。😊,它可能是一个向量,一个矩阵或其他数据结构。
这组参数将是。
产生输出 Y^ 的决定因素之一。
当我们学习时,我们将通过选择参数 θ 并将 G 固定下来来学习。
例如,我们可能考虑线性回归。😊。
如果 y 是标量,那么我们将有 Y^ = G(x)。
这里 G(x) 将采取 θ1 乘以 x1 加上 θ2 乘以 x2 一直到 θd 乘以 xd 的形式。
😊,因此 θ 这里是一个参数,它是一个 D 维向量。
我们可能还会有一个预测器。
对于 RM 中的向量 Y。如果这是一个线性回归模型。
那么我们将有 Y^ = G(θ)x,也是 θ1 乘以 x1 加上 θ2 乘以 x2 一直到 θd 乘以 xd。
但是在这里,每个 θi 是一个 m 维向量,而 x1 到 xd 是系数,它们决定了 θ1 到 θd 的向量的线性组合。
😊,我们通常会将其写成矩阵的形式,因此我们会写出我们的矩阵 θ。
这是一个 D×M 的矩阵,该矩阵的第 i 行是 θi 的转置。😊。
然后我们可以将 Y^ = G(θ)x 的关系表达为 y^ = θ^T * x,就像之前一样。
我们可能还有其他类型的预测器。
我们可能有一个树预测模型,在这种情况下,θ 将编码树。
它将告诉我们树的每个顶点的阈值和叶值。😊。
现在我们将根据一些训练数据来选择特定的 θ。
我们将有数据对 X,Y,Y,I,如果 I 是 1 到 n。
这就是训练数据,我们将用它来拟合模型。😊。
这被称为训练过程。有许多不同的训练过程,它们根据我们选择的预测器类型和性能指标而有所不同。
例如,如果我们正在训练一个线性回归模型,并且如果 y 是标量。😊。
那么我们可能会使用这些平方。
我们将选择 θ 以最小化从数据点 1 到 n 的所有数据点的 y_i 减去预测值 y_i^ 平方的总和。
这个符号,Y_i^。
它的意思是 G 在 X 上评估的结果。所以 Y_i^ 是当预测器用 x 的 I 值馈入时的预测。
因此,我们说,我们将选择 θ 以最小化预测误差平方的总和。
这是从 i=1 到 n 的 G(θi)X_i - Y_i 平方的总和。
这是一个非常合理的学习预测器的方法。在本节课中,我们将实际介绍一个更通用的。
😊,方法,它非常广泛使用,并且非常有效,它被称为经验风险最小化。
它的核心是平方最小化思想的推广。
它的工作方式是我们有一个损失函数。
损失函数接受两个向量作为其输入。
一个 Y^ 和一个 Y,并返回一个实数。它量化。
Y^ 与 Y 的接近程度?
实际上,它量化了 Y^ 如何近似 Y,因为通常。
当 Y^ 接近 Y 时,Y^ 和 Y 的损失函数很小,当 Y^ 与 Y 不同时,损失函数很大。
嗯。所以如果损失函数很小,我们会告诉你 Y^ 是 y 的非常好的近似。
如果损失函数很大,我们会说它是一个很差的近似。
我们通常会这样安排事情。
所以当 y^ 等于 y 时,损失函数评估为零。😊,当 y^ 不等于 y 时,损失函数是非负的。
所以一些非常常见的例子。
第一个是。二次损失函数。
我有一个标量 Y,因此有一个标量 Y^。
二次损失是 y^ - y 的平方。
如果我有 y 和 y^ 的向量,那么二次损失是 y^ - y 的欧几里得范数平方。
这仅仅是 y_i^ 和 y_i 之间差异的平方和。
另一个常见的损失是绝对损失。😊,如果我有标量 y 和标量 Y^。
那么绝对损失是 y^ - y 的绝对值。
这是另一个损失。
这是 y^ / y - 1 和 y / y^ - 1 的最大值。😊,这是分数损失或相对损失,所以如果 y^ 比 y 高 20%。
那么 y^ / y - 1 将是 0.2。如果 Y^ 比 Y 低 20%。
那么。
那么 y / y^ - 1 将是 0.2。另一种方便的表达方式是作为 y^ - y 的对数的绝对值的指数。
😊,我们通常将其乘以 100,然后它真的是百分比误差。😊。
我们通常使用分数损失。😊,对于范围很广的。
量级的数量。我们上次看到了网站访问的例子。
它可以跨越许多数量级。另一个我们可能会使用分数损失的案例是处理价格。
在大多数情况下,我们更关心两个价格之间的百分比差异,而不是价格之间的绝对差异。
我们都会看到这些损失的特定解释和某些情况下它们比其他情况更好。
我们将在本课程中看到许多其他可能的损失函数。
😊,现在我们开始使用损失函数,当使用它时。
我们构建一个称为经验风险的东西。😊。
经验风险只是数据点的平均损失。😊。
为了计算经验风险,我们需要有一堆数据。
我们需要有一个预测器。我们需要有一个损失函数。然后对于每个数据点。
我们简单地计算 G(θX_i) 和 Y_i 之间的损失。
然后为了计算经验风险,我们需要平均那个损失。
在整个数据点上。
然后如果经验风险很小,预测器。😊,在平均意义上做得很好。
在整个数据上。至少根据我们选择的特定损失函数。
我们通常将经验风险写成参数化预测器的 θ 的函数。
当然,它也是数据集的函数。但我们抑制了符号。
你可能会说,嗯,这和我们之前在谈论性能指标时谈论的非常相似。
这是绝对正确的。在两种情况下,我们都在衡量预测器做得有多好。
区别在于,性能指标是我们用来判断预测器做得有多好的东西。
而经验风险是我们将用来训练。
这个。模型。
我们将训练预测器,我们将根据一个试图使经验风险最小化的程序来选择我们将要使用的预测器。
通常,经验风险和性能指标是相同的,你可能会说,嗯。
为什么不直接选择经验风险等于性能指标呢?
我们将在本课程的后半部分有更多关于这个问题的细节。
通常,我们试图选择经验风险以对应性能指标。
😊,嗯。有时当您不这样做时,训练效果更好。
以下是经验风险的更多示例。
例如,如果您有二次损失和标量 Y。
那么经验风险是均方误差。
如果您有标量 Y 并且您使用绝对损失函数。
那么经验风险是平均绝对误差。😊。
经验风险最小化
经验风险最小化是我们选择预测器的方法。
其思想非常简单,选择 θ 以最小化经验风险。嗯。
一种说法是,我们正在尝试使整个数据集上的平均损失很小。
这是使我们的预测器与数据集匹配的一种方法。
有时您可以确切地解决经验风险最小化。😊。
所以特别是,如果 G(θ) 是线性预测器。😊,并且我们使用平方损失函数。
那么经验风险最小化问题。😊,是平方最小化问题?
我们可以解析地解决它。😊,有一个显式公式。
😊,但在大多数情况下,情况并非如此。最小化问题的解析解不存在,没有公式。
取而代之的是。
我们必须使用数值优化来找到使经验风险最小化的 θ。
通常,这实际上更糟,因为我们使用的数值过程不能保证。
😊,找到使经验风险最小化的 θ。
但只能保证近似最小化经验风险。嗯。あの。
但是也有理由认为这是可以接受的。
我们通常不希望或需要完美的最小化器 θ。
但近似最小化器是可以的。我们将在稍后对此进行更多说明。
现在,θ 的特定值取决于您选择的特定损失。
😊,以及我们如何确定我们应该选择哪种损失,鉴于我们已经看到了?
均方误差,平均绝对误差,平均分数误差以及许多其他潜在的损失函数。
对这些问题的答案始终相同,我们进行验证。
我们将其与某些外部测试集进行验证。嗯。
当我们进行验证时,我们并不总是使用我们选择用于训练的错误度量进行验证。
我们使用性能指标进行验证。
现在,我们向经验风险最小化添加了一个额外的曲折。
它实际上可以使它工作得更好。😊。
这就是我们所说的正则化。
正则化的工作方式如下。
我们非常关心。
训练一个没有过度拟合预测器的预测器。
我们没有调整得非常好的预测器。
它调整得很好,以适应训练数据中的特征。
而不是数据中的通用特征。
换句话说。
如果我们从相同的现象中获取其他数据集。
我们想确保我们的预测器调整得很好,以适应该数据集中出现的那些特征。
而不是仅在训练集中出现的特定波动。
我们是这样做的。
我们查看预测器的敏感性。
我们查看它对 x 中的微小变化的反应程度。
因此,我们将称一个预测器 G(θ) 为对 x 不敏感。
如果对于某个 X 近似于 X̃。
G(θX) 也接近于 G(θX̃)。
另一种说法是,如果特征很接近。
那么预测也将很接近。😊,有许多方法可以更精确地从数学上表达这一点。
一种方法是连续性的概念。
还有其他更量化的连续性概念。
嗯。但关键点不是您如何衡量预测器的敏感性。
而是您通过使预测器对特征 X 不敏感所获得的收益。
您使预测器对 X 不敏感。
您使预测器泛化得很好。
当您没有很多训练数据时,这尤其重要。
因此,不敏感性是预测器应该具有的良好属性。
尽管它可能看起来像是一个不好的属性。
正则化是一个函数,它衡量预测器 G(θ) 的敏感性。
因此,正则化器作为函数 R,它接受 θ 作为输入。😊,
并返回一个实数。所以。
这里我们使用了 R^P 来表示 θ 所在的空间。
这是一个 p 维空间。
如果 y 是标量并且我们使用线性预测器,那么 p 等于 D。
如果 y 是 m 维并且 x 是 d 维,那么 p 等于 d×M。
如果我们使用神经网络,那么 p 可能是一个更大的数字。
所以。
θ 的选择使得当 G(θ) 对 X 不敏感时,它很小。
而当 G(θ) 对 X 敏感时,它很大。
在某些情况下,我们可以。😊。
以直接的方式量化预测器的敏感性。
例如,在线性回归模型中,其中 G(x) = θ^T * x。
那么。小的敏感性。
对应于小的 θ。
要看到这一点,请查看所谓的柯西-施瓦茨不等式。
记住柯西-施瓦茨不等式,让我写下来。
它说,如果我有两个向量。
P 和 Q。
我将查看 P^T * Q。
P^T * Q 的绝对值小于或等于 P 的欧几里得范数乘以 Q 的欧几里得范数。
我们将需要对该不等式进行一些推广,以说以下结果。😊。
假设 G(θ)x = θ^T * x,并且我通过测量 G(θx) 和 G(θx̃) 之间的差异来衡量敏感性。
😊,那么这等于 θ^T * x - x̃ 的范数。
乘以 θ^T * x̃ 的范数。
现在,这里的难点是我们用于该不等式的范数的选择。
首先,让我提醒你我们使用的结果。
θ^T * 向量 x 的绝对值小于或等于 θ 的欧几里得范数乘以 x 的欧几里得范数。
这是当 θ 和 x 都是向量时为真。
所以这里我们有 θ 在 R^D 中,x 在 R^D 中。
现在我想考虑 y 不是标量,而是向量的情况。
然后我们必须查看当我们将矩阵乘以向量并询问是否存在一种简单的方法来构建该数量的界限时会发生什么。
所以这里,让我们考虑矩阵 A 并查看 A * X 的欧几里得范数。
我们知道那是什么,那就是从 I=1 到 M 的求和。
A_i^T * X。
我将其平方。
但是在这里,我所做的是将 A 写成其行的形式。
a_1^T 到 a_M^T。
所以这里的每个 a_i 都是一个向量在 R^D 中,A 在 R^M×D 中。
这个数量,A_i^T * X。
我们知道如何对其进行界限。
因为它来自直接的柯西-施瓦茨不等式。
所以这小于或等于从 I=1 到 M 的求和。
A_i^2 范数平方。
x^2 范数平方。
使用柯西-施瓦茨不等式的平方。
当然,我们可以将括号放在那里,因为。
X 不依赖于 I。
而这个。这个数量。
是矩阵 A 的每一行的范数平方之和。
我们实际上是在对矩阵 A 的每一行进行操作。
我们可以通过取其条目的平方和来计算其范数平方。
然后如果我们对所有行进行求和,那么我们实际上是在对矩阵 A 的所有条目的平方和进行求和。
所以这等于从 I=1 到 M 的求和。
S_i 是 1 到 D 的 a_i^2 范数。
这不是 a_i^2 范数平方。
不是应用 a_i^2 范数。
这个数量。
被称为矩阵的 Frobenius 范数平方。
它是向量欧几里得范数的类似物。
它只是将矩阵 A 的所有条目的平方和开平方。
因此,我们可以将此结果应用于我们的预测器,我们的向量预测器。
我们发现。
θ^T * x - x̃ 的范数小于或等于 Frobenius 范数。
乘以 x - x̃ 的范数。
这表明。
也许我们应该使用作为正则化器的。
θ 的 Frobenius 范数平方。
这是一个可能的选项,它是一个非常常见的正则化器。
如果我们保持正则化器很小,我们选择一个使 R(θ) 很小的 θ,那么我们将使我们的。
预测器对 X 不敏感。
当 y 是标量时。
最常用的正则化器是 θ 的各分量的平方和。
θ 的欧几里得范数平方。
这有一个名字,叫做 L2 正则化。😊,对于向量 Y。
我们取所有条目的平方和。
θ 的 Frobenius 范数平方。
这也被称为 L2 正则化。😊。
另一个非常流行的正则化器是取 θ 的 1 范数。
当 θ 是向量时,这是条目的绝对值之和。
当 θ 是矩阵而不是向量时,我们取所有条目的绝对值之和。
当存在常数特征时。
例如,当 x1 是 1 时。
我们在正则化时做些不同的事情。
这通常发生因为我们非常希望有一个具有常数项的预测器。
例如,如果 G(θ) 是线性预测器,那么 G(θ)x = θ^T * x。
如果 x1 被选择为 1,那么 g(θ)x 将是 θ_1 加上 θ_2^T 乘以 x 的其余部分。
我们也这样做,当我们有神经网络预测器时。
在一般矩阵情况下。
G(θ)x 将看起来像 θ^T * x,但现在第一个组件,它对应于 x1,将是 θ 的第一行。
我们将其写成 θ_1,::。
因此,生成的。预测器将是 G(θ)x = θ_1,:: 转置。
加上 θ_2,:: θ_D,:: 转置 x_2,:: x_D。
现在,让我们明确一下这里的符号的含义。
😊,这里的符号意味着以下内容。
如果我有 2,3,::7。
这意味着从矩阵中取出一个切片,该切片由第二行和第三行组成。
列 4、5、6 和 7。
我也可以写成 A_2,3::。
这意味着在 Bever 列中取整个第二行和第三行。
这是 MATLAB 和 Julia 使用的符号。
现在它也以这种方式从编程传播到数学。
所以。
G(θ)x 是常数加上 x 的线性项。
现在,常数项不影响敏感性。
我们可以通过评估 g(θx) - g(θx̃) 来看到这一点。
那么,常数项简单地抵消,我们剩下 θ_2,:: θ_D,:: 转置 * x - x̃。
因此,如果 x1 是常数,则不需要正则化 θ 的第一行。
我们使用一个正则化器,它只是一个范数或 θ 的其他函数。
我们可能会使用 θ 的最后 d-1 行的 Frobenius 范数平方。
这使我们到达了正则化 ERM。😊,
这是一个方法,其中我们。
而不是选择一个简单地最小化经验风险 E(θ) 的 θ。
我们还试图找到一个 θ,它在预测器的敏感性之间进行权衡。
它是这样做的。
我们试图找到一个 θ,它使 L(θ) 和 R(θ) 都很小。
您这样做的方法是通过称为正则化 ERM 的技术。
其中我们选择 θ 以最小化加权求和 L(θ) + λR(θ)。
λ 这里是一个非负数,它是一个参数,它被称为正则化超参数。
超参数在这里意味着它不是一个直接从训练数据中学习的参数。
我们将通过不同的过程来选择它。
我将在稍后告诉你。
当 λ 为零时。
正则化 ERM 只是 ERM。
当 λ 非常大时。
最小化 L(θ) + λR(θ) 的 θ 将非常接近于仅最小化 Af 的 θ。
因此,我们将最终得到一个对数据拟合得很好的预测器。
但是它可能不会很好地拟合预测数据。
因此,当 λ 在零和非常大之间取中间值时。
那么我们将得到在最小化 L(θ) 和最小化 R(θ) 之间取得平衡。
在大多数情况下,您不能精确地解决正则化 ERM。
就像您不能精确地解决 ERM 一样。
直到我们使用数值优化。
所以,与 ERM 一样,您只是最小化经验风险 E(θ) 并选择这样做 θ。
😊,与 RARM 一样,因为您在目标函数中添加了这一项。
您得到的 θ 不会最小化经验风险。
换句话说,它不会。
产生最佳拟合训练数据的预测器。
它产生了一个比 ERM 预测器拟合得差的预测器。
但它比 ERM 预测器更不敏感,因为。
您获得的是您得到一个使正则化器小的预测器。

这里的优点是,一个不敏感的预测器通常泛化得
006:斯坦福大学《机器学习|Stanford EE104 Introduction to Machine Learning 2020》deepseek翻译 p06 Lecture 8 - non quadratic losses.zh_en -BV1utzNYqEkr_p6-


📚 斯坦福大学《机器学习》:非线性损失函数
概述
在本节课中,我们将学习非线性损失函数,并探讨它们在经验风险最小化中的作用。
非线性损失函数
非线性损失函数通常表示为残差的惩罚函数,即 $ L(y, \hat{y}) = P(\hat{y} - y) $,其中 $ P $ 是一个惩罚函数。
惩罚函数
惩罚函数 $ P $ 可以有多种形式,例如:
- 平方惩罚: $ P(r) = r^2 $,其中 $ r = \hat{y} - y $ 是预测误差。
- 绝对值惩罚: $ P(r) = |r| $。
- 倾斜绝对值惩罚: $ P(r) = \begin{cases} -\tau r & \text{if } r < 0 \ 1 - \tau r & \text{if } r \geq 0 \end{cases} $,其中 $ \tau $ 是一个参数。
惩罚函数的影响
惩罚函数的选择会影响预测器的行为。例如:
- 平方惩罚: 预测器倾向于产生较小的预测误差。
- 绝对值惩罚: 预测器对正负预测误差的惩罚相同。
- 倾斜绝对值惩罚: 预测器对低估和过估的惩罚不同。
例子:Huber 惩罚函数
Huber 惩罚函数是一种鲁棒惩罚函数,它对异常值不敏感。其公式如下:
$$ P(r) = \begin{cases} r^2 & \text{if } |r| \leq \alpha \ \alpha & \text{if } |r| > \alpha \end{cases} $$
其中 $ \alpha $ 是一个参数。
例子:对数 Huber 惩罚函数
对数 Huber 惩罚函数是一种更鲁棒的惩罚函数,它对异常值更加不敏感。其公式如下:
$$ P(r) = \begin{cases} r^2 & \text{if } |r| \leq 1 \ \log(r^2) & \text{if } |r| > 1 \end{cases} $$
总结
非线性损失函数在机器学习中扮演着重要的角色。它们可以帮助我们构建更鲁棒和更准确的预测器。
📚 斯坦福大学《机器学习》:分位数回归
概述
在本节课中,我们将学习分位数回归,它是一种用于估计数据分布的分位数的方法。
分位数回归
分位数回归是一种经验风险最小化方法,它使用一个倾斜惩罚函数作为损失函数。其目标是找到预测器,使得预测误差的 $ \tau $ 分位数等于零。
公式
分位数回归的损失函数如下:
$$ L(\theta) = \frac{1}{n} \sum_{i=1}^n P_{\tau}(G(\theta, x_i) - y_i) $$
其中:
- $ \theta $ 是预测器的参数。
- $ G(\theta, x) $ 是预测器。
- $ y_i $ 是第 $ i $ 个数据点的真实值。
- $ P_{\tau} $ 是 $ \tau $ 分位数函数。
例子
假设我们有一个数据集,其中 $ \tau = 0.5 $。这意味着我们想要找到预测器,使得预测误差的中位数等于零。
总结

分位数回归是一种强大的工具,可以用于估计数据分布的分位数。它可以帮助我们更好地理解数据的分布,并构建更准确的预测器。
007:斯坦福大学《机器学习|Stanford EE104 Introduction to Machine Learning 2020》deepseek翻译 p07 Lecture 9 - house prices example.zh_en -BV1utzNYqEkr_p7-


机器学习:第9讲 - 房价示例
概述
在本节课中,我们将通过一个简单的例子来回顾之前讨论的所有机器学习主题,并尝试使用房屋特征来预测房价。
数据集介绍
本节课使用的数据集来自Kaggle,一个由谷歌拥有的公司,专门组织机器学习竞赛。Kaggle提供了来自不同领域的各种数据集,本例中是房价数据集。
该数据集包含爱荷华州艾姆斯市1456套房屋的价格和特征,这些房屋在2006年至2010年间出售。我们的目标是使用房屋特征来预测房价,具体来说是预测房价的对数。
特征嵌入
数据集包含约80个特征,我们将使用前20个特征进行预测。以下是特征嵌入的步骤:
- 数值特征:直接将数值特征作为数值嵌入,例如房屋建造年份、居住空间面积、楼层面积、车库面积、木制露台面积、地下室面积、最近翻修年份和地块面积。
- 有序特征:将有序特征作为整数嵌入,例如卧室数量、厨房数量、壁炉数量、半浴室数量、房间数量、条件评分、材料质量评分和车库可容纳车辆数量。
- 类别特征:将类别特征进行独热编码,例如厨房质量、建筑类型和社区。
数据标准化
在训练模型之前,我们需要对数据进行标准化,以消除不同特征之间的量纲差异。我们使用训练集来计算每个特征的均值和标准差,然后使用这些值来标准化训练集和测试集。
模型训练
我们使用岭回归模型进行预测,并使用均方根误差作为性能指标。我们选择一系列不同的正则化参数λ,并使用交叉验证来选择最佳的λ值。
结果分析
通过分析训练误差和测试误差,我们可以评估模型的性能。在本例中,我们观察到测试误差略高于训练误差,但整体性能仍然不错。
特征重要性
我们可以通过分析模型的系数来了解不同特征的重要性。在本例中,房屋面积、建造年份、条件评分和质量评分是影响房价的最重要因素。
总结
在本节课中,我们通过房价预测示例回顾了机器学习的各种主题,包括数据预处理、特征嵌入、模型训练和结果分析。我们学习了如何使用岭回归模型进行预测,并了解了不同特征的重要性。

本节课中我们一起学习了如何使用机器学习预测房价,并了解了特征嵌入、数据标准化和模型训练等关键概念。
008:斯坦福大学《机器学习|Stanford EE104 Introduction to Machine Learning 2020》deepseek翻译 p08 Lecture 10 - 非二次正则化.zh_en -BV1utzNYqEkr_p8-



非二次正则化

正则化的概念
正则化的目的是选择一个模型,它既能最小化经验风险,又能使预测器不过于敏感。也就是说,如果我们有一个接近于 $ \theta $ 的 $ x $,那么我们希望 $ G_{\theta}(x) $ 也接近于 $ G_{\theta}(x_{\text{ta}}) $。这种降低敏感度的原因在于,如果你使预测器过于敏感,最终得到的结果将无法很好地泛化。😊。
这是一种迫使预测器对数据不敏感的方法,从而使预测器泛化得更好。这是一种防止过拟合的方法。😊。
为了实现这一点,我们使用一个正则化函数 $ R $,它是一个关于参数 $ \theta $ 的函数,并且是一个实值函数。它衡量 $ G_{\theta} $ 的敏感性,因此当 $ \theta $ 很大时,我们的正则化函数中的函数也很大。通过使正则化函数很小,我们可以使 $ \theta $ 很小,从而使得 $ G_{\theta} $ 的敏感性很小。😊。
另一种思考方式,这在统计文献中非常常见,是从统计的角度来看。也就是说,正则化编码了我们关于 $ \theta $ 的先验信息。具体来说,正则化后的 $ \theta $ 实际上很小。😊,这是一种说,我们相信 $ \theta $ 能够泛化,现在对应于数据下真正的预测器,真正的数据模型。作为一个小的 $ \theta $,我们将在学习算法中强制执行这一点。我们只考虑实际上很小的 $ \theta $。这是一种看待正则化器目的的完全不同的方式,但它同样有效。在这两种情况下,你都想使经验风险 $ L(\theta) $ 和正则化 $ R(\theta) $ 都很小。😊。
正则化经验风险最小化
我们选择 $ \theta $ 来最小化经验风险 $ L(\theta) $ 加上某个正的常数 $ \lambda $ 乘以 $ R(\theta) $ 的正则化。😊,记住,这里的 $ \lambda $ 被称为正则化超参数,我们可以通过验证集上的数据来权衡 $ L(\theta) $ 和 $ R(\theta) $。😊。
当然,所有这一切的关键在于这实际上有效。它有效的原因在于,通过强制正则化,我们在训练集上的性能会变差,而在测试集上的性能会变好。我们真正关心的是测试集的性能。
正则化函数
到目前为止,我们已经看到,在岭回归中使用了隧道范数作为正则化函数。正则化函数的常见格式是惩罚函数 $ Q $,它是一个将实数映射到实数的函数。$ \theta $ 的正则化是 $ Q(\theta_1) + Q(\theta_2) + \ldots + Q(\theta_P) $ 的总和。我们分别惩罚每个参数,每个 $ \theta $ 的组成部分,并将相应的惩罚相加。😊。
通常,我们选择这些惩罚函数 $ Q $,因为它们是非负的,并且只有在 $ \theta_i $ 为零时才为零。因此,$ Q(\theta_2) $ 因此表达了我们对选择预测器系数 $ \theta_i $ 的不满,特别是通过将其定义为随着 $ \theta_2 $ 的值增加而增加,它表达了我们更喜欢小的 $ \theta_i $ 而不是大的 $ \theta_i $。
常见的正则化函数
- 平方范数正则化(岭回归):$ Q(\theta_i) = \theta_i^2 $,也称为平方范数正则化或 $ L_2 $ 正则化。
- 绝对值函数正则化(Lasso):$ Q(\theta_i) = |\theta_i| $,也称为绝对值正则化或 $ L_1 $ 正则化。
- 非负正则化:当 $ \theta_i \geq 0 $ 时,惩罚函数为零,当 $ \theta_i < 0 $ 时,惩罚函数为无穷大。
敏感度分析
现在,让我们在敏感度的背景下看看这个问题。假设我们有一个线性预测器 $ G_{\theta}(x) = \theta^T x $,这里我们预测一个标量 $ y $。我们将假设特征向量 $ X $ 变为 $ x_{\delta} $,其中 $ \delta $ 是 $ X $ 的扰动或变化。我们假设现在任何 $ \delta $ 都是可能的,但我们只考虑扰动集 $ \Delta $,我们只允许扰动 $ \delta $ 位于 $ \Delta $ 集中。
L2 正则化
如果我们在 $ \Delta $ 中允许 $ \delta $ 范围在某个 $ \Delta $ 中,我们可以看到最坏情况的敏感度,即 $ \Delta $ 中所有 $ \delta $ 的绝对值 $ \theta^T \delta $ 的最大值。这是对某个特定集 $ \Delta $ 的敏感度的度量。
L1 正则化
如果我们在 $ \Delta $ 中允许 $ \delta $ 范围在某个 $ \Delta $ 中,我们可以看到最坏情况的敏感度,即 $ \Delta $ 中所有 $ \delta $ 的绝对值 $ \theta^T \delta $ 的最大值。这是对某个特定集 $ \Delta $ 的敏感度的度量。
总结

本节课中,我们学习了非二次正则化,包括岭回归、Lasso 回归和非负正则化。我们讨论了正则化的目的和如何选择合适的正则化器。我们还分析了正则化对敏感度的影响,并讨论了如何使用正则化进行特征选择。
009:斯坦福大学《机器学习|Stanford EE104 Introduction to Machine Learning 2020》deepseek翻译 p09 Lecture 11 - 神经网络.zh_en -BV1utzNYqEkr_p9-

神经网络



神经网络是一种非线性预测器。
Y^ = g(c(x)),它具有特定的分层形式。
思考神经网络的一种方式是,它将特征工程的一些方面纳入预测器中。
这可以理解为自动特征工程。
这就是神经网络如此受欢迎的原因之一,因为在非常复杂的分类和回归问题中,显然不知道正确的特征选择是什么,并且有一个可以自动确定正确特征选择的系统。
这非常强大。
因此,特定神经网络的参数数量可以非常大。
换句话说,变量θ的维度可以是数百万或数十亿。
这会使训练变得困难且耗时。
某些神经网络可能需要几周时间才能训练。但是,然而,另一方面是它们可以表现得非常好。
特别是当你有很多数据来训练它们时。
训练后得到的预测器非常难以解释。
本质上是一个黑盒,它接受一个X并给出一个估计的Y^。
它是如何做到这一点的?是。有点神秘。
如果你与线性预测器进行比较,特别是y^ = θ^T x。
那么θ的各个条目的含义非常清楚。告诉我们增加x的某些组件会影响预测Y^。
对于神经网络来说,这非常难以解释。
但特定的参数。特征。实际上意味着。
所以,在我们的神经网络中,特别是这里,我们谈论的是前馈神经网络。😊。
在课堂上我们还会看到其他类型的神经网络。
前馈神经网络由函数的组合组成。
Y^ = g3(g2(g1(x))),这是在有三层的情况下,但我们可能有任何数量的此类函数,这些函数被称为层。
我们可能使用组合符号来写这个,g = g3(g2(g1)),其中组合运算符用圆圈表示。
有些人会称这种神经网络为多层感知器。
我们经常用单个变量来表示预测器的组合。
我们可能说Z1 = g1(x),然后Z2 = g2(Z1),然后y^ = g3(Z2)是我们的三层示例。
每个这些向量Z被称为第I层的激活或输出。
其中第I层只是函数gI。ZI是一个向量,它具有维度D,这取决于层。
这些层的维度不必相同。
特别是,有时它们会增长,有时会缩小,具体取决于应用。
我们有时喜欢z0 = x,D0是D,这是从原始数据嵌入的特征的数量。
所以我们仍然有一个基本的特征映射,它从U构建X。X是φ(U)。
但我们通常不在神经网络中进行特征工程,相反。
我们允许层提供特征,这些特征被后续层使用。
在我们的三层网络中,我们有Z3 = Y^,预测。
然后D3是Y^的组件数量,这将是一个M。
所以,特别是这意味着预测器的输入x和预测器的输出y。
也被认为是层的激活。
我们可能将此可视化为一个简单的图,其中X从左侧进入。
通过函数g1生成Z1,然后传递给g2生成Z2。
然后传递给g3生成Y^,这只是一个C3。
这些层具有特定的形式。😊。
每一层都是标量函数H和激活函数的组合。
所以g(Z^(i-1)) = H(g(i-1)(θ(i-1)Z(i-1))),其中每个Z(i-1)都是标量。
记住这个符号,这个符号意味着。如果我有两个向量A,B,那么它们是相同的。
并且将它们堆叠在一起。这意味着θ^(i-1), Z意味着θ^(i-1), z。
矩阵D(i-1)。😊,它具有维度D(i-1) + 1。
D^(i)是第I层的参数。
θ^(i-1)Z的输出是一个向量。
H在这里是一个标量激活函数。
它将实数映射到实数,因此它应用于向量的方式。
这个符号的意义是逐元素应用。所以,特别是,如果Z^(i-1) = H(Q),让我只叫它Z作为参数的例子。
那么Z^(i-1) = H(Q(i-1)),Z(i-2) = H(Q^(i-2)),依此类推。
所以当我们有M层在神经网络中时。
我们有M个矩阵,θ(i-1)到θ(M-1)。😊,这些是我们训练时需要选择的参数。
现在我们可以明确地将矩阵θ^(i-1)的分量划分为以下内容。
我们将θ^(i-1) = α(i-1)β(i-1),就像这样。
在这里,α^(i-1)是一个。是一个。低向量。
所以α(i-1)1。α(i-1)2。一直到α(i-1)(i-1)。
其中每个条目都是标量。
但是β^(i-1)是一个矩阵。
它的条目β(i-1)1。到β(i-1)^(i-1)。
每个条目都是一个维度为D^(i-1)的向量。
现在,如果我们采用这个符号,然后说,好吧,我们将θ^(i-1)乘以Z。
那么对于第I层,我们将θ(i-1)T乘以Z^(i-1)。
这等于这个向量α。
加上一个向量,其分量只是β(i-1)T乘以Z^(i-1)。
所以这个向量中的每个条目都是线性部分。
然后这里有一个常数部分。
所以。调整,正如我们可能期望的那样,对于激活函数。
一个函数通常具有以下形式。Hey,time C。让我不叫它们。让我叫它们。Ha。C加上D乘以Z,其中D是一个矩阵,C是一个向量。
这是我们的C。
这是Dz。
所以层映射Z = g(Z^(i-1))。
这意味着我们取这个线性函数的每个分量。
这里。
F(i-1)J加上β(i-1)J^T Z^(i-1)。
然后通过激活函数H传递。
这种函数。
这种函数在这里。它接受一个向量Z^(i-1)作为输入并返回一个标量,它是Z的第J个分量。
让我们称它为神经元。
人们经常写成这样。这里出来的是Z^(iJ)。
然后我们有Z(i-1)的分量。1。Z(i-1)2,Z^(i-1)3。
这是一个神经元,在我们的层中有许多这样的神经元。
每个神经元都在输出不同的分量,这将是一个Z^(i-2)。
这将是一个Z^(i-1)。
它由相同的输入提供。
所以这是一个有两个输出和三个输入的层。
现在,这些常数项。
在A函数中被称为常数项向量,它被称为神经元的偏差。
所以在这个有两个神经元的层中,有两个标量α(i-1)1和α(i-1)2。
这是该层的两个偏差。
偏差是输入权重。
激活函数,有两种常用的激活函数。
它们被选为非线性,特别是如果它们是线性的。
那么g(θ)将只是Z的f函数,这将是一个单层的线性预测器。
特别是,如果我将单层g(i)(它是线性的)与下一层g(i+1)组合。
那么我最终将得到一个。非线性层,其中组合层的线性部分只是两个线性部分的组合。
如果我在其中放置一个非线性函数,那么G(i)组合G(i+1)。
这是一个无法表示为单个层的函数。
所以最常用的激活函数被称为ReLU,我们也使用了这个符号。
A+正的部分a或最大a0。
这是我们在之前看到过的函数。
当输入为负时为0,当输入为正时为A。
另一个非常常见的激活函数是这个函数e^(a) / (1 + e^(a))。
这是一个平滑的函数,它在0和1之间变化,当a趋于无穷大时,它趋于1,当a趋于负无穷大时,它趋于0。
这是一个缩放的反正切函数。
我们经常将神经网络中的神经元明确地绘制成图形。
这里有一个这样的图形。
这里有一个具有三层神经网络的神经网络,我们有一个。
这是输出。这个向量在这里。是X的特征向量。
然后我们有Z1,我们将其映射到G1,得到Z1。
这里我们有Z2,我们将其映射到G2,得到Z2。
然后我们最终将其映射到G3,得到Y^。
我们可以在图中解释每个。边。
连接图内顶点的线。
所以每个边都有一个θ与之对应。
但节点内也有θ,它们提供偏差。
所以只有与图边相关的权重项。
所以每个顶点都是,它是激活的一个分量。😊,
边是单个权重。
这里是一个随机选择的一组参数的例子。
你看到的是一个看起来像这样的函数。
这是在这里,我们有一个具有两个变量x1和x2的输入的三层神经网络。
因此,θ有三个。3行,第一行。这里。那是偏差。
这里有一些偏差。
其余条目是权重,所以第二。
第一层的输出,第二层的输入是一个维度为4的向量。
然后后续层的输出具有维度2。
这里。
然后我们有一个维度为1的输出,它是Y^。
所以结果是,从两个维度。这里air。
到输出的一维映射。
在神经网络中,有一些非常常用的术语。
如果你有一个M层网络,那么第1层到M-1层被称为隐藏层。
第M层被称为输出层。
通常,如果你在做回归。
你不在输出层上使用激活函数,或者更具体地说,在输出层上使用恒等激活函数。
H(A)是A。在回归的情况下,你可以看到为什么是这样,如果你回顾一下我们通常使用的激活函数。
😊,如果输出层使用,例如,sigmoid激活函数。
那么它只能生成介于0和1之间的输出值或预测值。
这当然不会在我们试图预测wise时起作用,wise不在该范围内。
或者如果我们使用值,那么。我们只能将Y^的值设置为非负值。
层的数量称为网络的深度。
人们将具有大M和大D的网络称为深度学习。
通常,对于用于图像分类的神经网络,我们可能有15。
20层或更多。
现在,当我们使用神经网络进行训练时。
我们进行正则化经验风险最小化,就像我们之前看到的,我们选择层参数。
θ(i-1)到θ(M-1)以最小化经验风险,并添加正则化项。
经验风险始终是平均损失函数在训练数据集上的评估,其中G(θ)是神经网络映射,从输入X到输出Y。
现在,正则化项。
不正则化偏差参数α^(i-1)J。
每个层的常数项。它只正则化权重项。
这是因为我们没有必要正则化不影响网络敏感性的项。
常见的正则化项是平方和,L1也很常见。
特别是,对于L1。
我们可以期望看到神经网络的稀疏化。
一些权重最终会变成0,这允许我们进行所谓的剪枝神经网络。
简单地删除。具有零权重的条目,然后重新训练。
这可能对应于删除整个神经元或仅删除网络中的特定路径。
通常,当你使用神经网络预测器时。
你不能。最小化正则化经验风险。嗯。凸损失函数的特殊情况。
凸正则化器和线性预测器。这是一个非常特殊的情况,其中可以精确地找到神经网络的优化解。
那么即使你有二次损失和二次正则化器。
没有算法可以解决这个问题。
所以训练算法找到近似最优解。
这些可能是局部最优的,也可能是接近局部最优的。
我们将看到用于执行此操作的方法,这些是迭代训练方法。
它们可能需要很长时间。
这里有一个特定的例子。
这个神经网络有四到五层。
它只有二维输入和一维输出,它在大约100个数据点上进行了训练。
其中一些可以在图中看到,并且你可以看到它已经很好地拟合了它。
当然,我们看不到所有数据点,因为一些点在表面下面。
并且。啊。很难对参数的意义或如何拟合我们的可能性空间有直觉。
我们所能做的就是验证。
在Julia中,这看起来像这样。
这是用于训练先前示例的神经网络回归函数的预览。
关于它的一些注意事项。
这里。定义了网络结构。
所以我们有三个层,第一层。你一个。有D个输入和10个输出。
并且有一个值激活。
第二层。有10个输入和10个输出,并且也有一个值激活。
第三层。
有10个输入和M个输出,其中M在这种情况下是1,D在这种情况下是2。
并且它有一个恒等激活,因为我们正在解决回归问题。
😊,现在,这些是什么?
这些函数在这里,函数dints。
实际上返回一个层函数。
所以当你调用它时,dints D10 激活函数值。
它将返回给你一个函数F。
我们可以简单地称它为G1等于。
然后我们得到G2是dints。
这是G3。
然后所以无论我们称它为什么。
然后我们可能说我们的整体神经网络。
让我们称它为预测器G。
我们希望G3(g2(g1))。
现在在Julia中,你实际上可以这样做,这是完全可以的。
如果你碰巧知道如何在键盘上找到圆圈的Unicode符号,那么如果你像我一样不知道。
那么你可以只写chain G1 G2,和G3。
这正是我们在那里做的。
所以这只是组合函数。
这意味着如果我们想将结果预测器应用于输入。
我们只需取G,在这种情况下,我们称之为模型。
让我只叫它模型。
然后我们可以做模型。
Of a vector X。这将是一个Y^。
所以Y^是模型在X上的执行神经网络预测器,并返回预测。
现在,参数。
它们在这里不被称为A和β。
我们在这里使用Flux库。
🤢,所以在我们运行此代码之前,我们需要键入using Flux。
顶部。
参数存储在层函数中。
一种访问方法是以下内容。
所以一旦我开始,一旦我组合了模型是chain G1,G2,G3。
我可以通过说G1 = model[1]来获取函数。
即使模型不是向量,模型实际上是一个函数的组合。
它已经在Julia中设置好了,当我访问模型的第一个组件时。
我得到的是第一个函数,我的神经网络的第一个层。
然后我可以访问其偏差和权重,其偏差称为G1。
b和其权重称为G1。
w。
所以G1.b是一个向量,我们在幻灯片上称之为α。
G1.w是一个矩阵,我们在幻灯片上称之为β。
所以你可以看到这里。
我们有正则化函数,它正在构建。
取每个层的权重的范数的平方,并将它们加在一起。
这就是我们的正则化。
当我们想要构建预测时,我们只需调用。
模型函数在x上,它返回预测。
特别是。
如果我有x和y对应于特定记录,那么我可以计算predict(x)。
predict(y) - y,这是错误,我可能取其范数的平方来计算二次损失函数。
这里是我想最小化的整体目标。
这个函数train实际上在参数和数据上最小化成本函数。
成本函数,这些是它接受的东西,成本函数。
参数。
这是一个Flux中的特殊函数,它从每个层中提取参数。
和数据,它迭代。
然后我们返回模型。
所以我们将nn regression与x和y以及正则化参数Lada一起使用。
它将为我们返回一个模型。
然后我们可以计算。在数据集上的相应预测。
我们有一个函数,称为predict_all,它执行此操作。
你给它一个模型和一个x。
这是一个数据矩阵,它迭代每一行,用矩阵x调用它,称为小x,并调用模型X,以给出相应的。
😊,Yhy^,然后它将所有这些堆叠起来,返回给我们一个矩阵。
我们可能称之为大Y^。
predict_all(model, X)。
所以如果我们想计算预测的均方根误差,例如。
我们调用predict(model, training_data)。
并将其与我们的真实训练目标变量进行比较,并计算RsC。
所以Julia的P库在构建神经网络方面非常高效且简洁。
我们可以构建任何大小的神经网络,并训练它们。
当然,我还没有告诉你训练函数是如何工作的。
我们将把关于训练函数是如何工作的讨论推迟到课程的最后几节课。
但现在我们将使用Julia提供的Flux提供的训练函数。
思考神经网络的一种方式是,它们实际上与特征工程管道非常相似。
我们从X开始,并对X执行一系列变换或映射。
最终,我们得到。Y^?
区别在于,特征工程映射是手动选择的。
😊,它们通常没有参数或只有很少的参数。
你可以解释它们的意义。
我们可以说预测。
我们可能通过取两个特征的乘积来构建一个新特征来进行特征工程,并且我们非常清楚,如果我们取两个特征的乘积。
那么当这两个单独的组件都很大时,该乘积将很大。
相比之下,神经网络映射,嗯,那些是我们没有手动选择的特定形式。
它只是一个类别,我们不是手动选择参数。
训练过程正在选择参数。
这将确定结果映射。
所以,思考神经网络的一种方式是,它们正在进行数据。
驱动的自动特征工程。
所以,现在,使用预训练神经网络是当今使用神经网络的一种非常常见的方式。
一个人训练一个神经网络来预测某个特定的目标变量,例如,例如,一个人试图区分自动驾驶汽车道路上的不同特征。
一个人已经训练了一个神经网络来分类大量不同的道路标志类型和不同的车辆类型、自行车、建筑和交通锥以及你在路上看到的所有其他东西。
这个过程将在非常大的数据集上进行,并花费相当多的时间。
然后你可以说,好吧,我有一个非常大的神经网络。
我们将固定参数。
并使用最后一个隐藏层的输出作为特征来执行其他预测。
所以,在完成所有这些训练后。
我们突然意识到,实际上我们需要能够区分我们之前没有想过的事情。
一种特定的道路标志类型。
或一种特定的交通障碍物类型。
那么,我们不会重新训练神经网络的参数。
相反,我们只重新训练神经网络的最后一层。
或者我们简单地取神经网络的前N-1层的所有输出,并将它们作为特征输入到新的神经网络或新的预测器或其他形式的预测器。
这实际上工作得很好,即使一个人正在为不同的任务训练。
如果一个人训练一个神经网络来做,例如,一种图像分类。
那么他通常可以用它来做另一种图像分类。
😊。
这被称为预训练神经网络。
我们在前面的章节中看到了两个这样的例子,当我们查看VGG16时,我们查看word2vec。
这两个都是预训练神经网络,我们在那里将它们视为特征映射,当然,如果我们不训练它们的参数,那么这正是它们。
所以,让我们总结一下。
神经网络,训练需要大量数据。
它可能很困难,可能需要很长时间。
并且得到的神经网络是不可解释的。
然而,它们通常工作得很好。
对于许多问题,特别是图像分类,它们通常比其他任何方法都好。
最好的神经网络远远优于我们拥有的任何其他方法。
思考它们的一种方式是它们是。自动特征工程。


010:斯坦福大学《机器学习|Stanford EE104 Introduction to Machine Learning 2020》deepseek翻译 p10 Lecture 12 - classifiers.zh_en -BV1utzNYqEkr_p10-


机器学习:第12讲:分类器
概述
在本节课中,我们将学习分类器的基本概念,包括分类问题的定义、分类器的类型、性能指标以及如何评估分类器的性能。
分类问题
分类问题是一种预测问题,其目标变量 $ V $ 是离散的,只能取有限个可能的值。我们将这些可能的值称为标签集 $ \mathcal{V} $。
公式:
$$ \mathcal{V} = { V_1, V_2, \ldots, V_K } $$
其中 $ V_i $ 是标签集 $ \mathcal{V} $ 中的一个元素,表示一个类别或标签。
分类器
分类器是一种从特征空间 $ \mathcal{U} $ 到标签空间 $ \mathcal{V} $ 的映射,用于将输入数据映射到相应的类别。
公式:
$$ G: \mathcal{U} \rightarrow \mathcal{V} $$
其中 $ G $ 是分类器,$ \mathcal{U} $ 是特征空间,$ \mathcal{V} $ 是标签空间。
分类器的类型
- 二分类:当标签集 $ \mathcal{V} $ 只有两个元素时,称为二分类。
- 多分类:当标签集 $ \mathcal{V} $ 有多于两个元素时,称为多分类。
性能指标
- 错误率:错误率是预测错误的样本占总样本的比例。
- 混淆矩阵:混淆矩阵是一个二维矩阵,用于描述分类器的性能。它包含以下四个元素:
- 真阳性(TP):预测为正类且实际为正类的样本数量。
- 真阴性(TN):预测为负类且实际为负类的样本数量。
- 假阳性(FP):预测为正类但实际为负类的样本数量。
- 假阴性(FN):预测为负类但实际为正类的样本数量。
评估分类器
- 交叉验证:交叉验证是一种评估分类器性能的方法,通过将数据集分为训练集和测试集,并在测试集上评估分类器的性能。
- 混淆矩阵:混淆矩阵可以用于评估分类器的性能,并计算各种性能指标,例如错误率、精确率、召回率等。
总结

在本节课中,我们学习了分类器的基本概念,包括分类问题的定义、分类器的类型、性能指标以及如何评估分类器的性能。在下一节课中,我们将学习如何构建分类器。
011:斯坦福大学《机器学习|Stanford EE104 Introduction to Machine Learning 2020》deepseek翻译 p11 Lecture 13 - erm for classifiers.zh_en -BV1utzNYqEkr_p11-


机器学习:第13讲 - 机器学习分类器
概述
在本节课中,我们将学习如何通过经验风险最小化来拟合分类器。我们将讨论如何将分类变量嵌入到向量中,以及如何使用嵌入和反嵌入函数来构建分类器。
分类变量嵌入
首先,我们需要将分类变量嵌入到向量中。假设我们的目标变量 $ V $ 可以取 $ k $ 个值,我们可以使用一个函数 $ \psi $ 将 $ V $ 映射到一个向量 $ y $ 中,其中 $ y $ 是 $ \mathbb{R}^M $ 中的一个向量。
公式:
$$ y = \psi(V) $$
其中 $ \psi $ 是一个将 $ V $ 映射到 $ \mathbb{R}^M $ 的函数。
嵌入函数
嵌入函数 $ \psi $ 可以有多种形式,例如:
- 独热编码:将每个类别映射到一个 $ M $ 维向量,其中只有一个元素为 1,其余元素为 0。
- 归一化:将每个类别映射到一个单位向量。
- 其他映射:例如,将类别映射到实数或复数。
反嵌入函数
一旦我们有了嵌入函数 $ \psi $,我们还需要一个反嵌入函数 $ \psi^{-1} $ 来将预测结果 $ y $ 反映射回类别 $ V $。
公式:
$$ V = \psi^{-1}(y) $$
其中 $ \psi^{-1} $ 是 $ \psi $ 的反函数。
分类器构建
构建分类器的步骤如下:
- 将原始输入 $ U $ 嵌入到特征向量 $ x $ 中。
- 使用预测函数 $ G $ 将 $ x $ 映射到预测结果 $ y $。
- 使用反嵌入函数 $ \psi^{-1} $ 将 $ y $ 反映射回类别 $ V $。
公式:
$$ V = \psi^{-1}(G(x)) $$
近邻反嵌入
通常,我们使用近邻反嵌入来将预测结果 $ y $ 反映射回类别 $ V $。这意味着我们找到与 $ y $ 最接近的嵌入向量 $ \psi(V) $,并将其对应的类别 $ V $ 作为预测结果。
公式:
$$ V = \psi^{-1}(y) = \arg\min_{V \in {V_1, V_2, ..., V_k}} |y - \psi(V)| $$
分类器类型
根据类别数量,分类器可以分为以下几种类型:
- 布尔分类器:当 $ k = 2 $ 时,称为布尔分类器。
- 多类分类器:当 $ k > 2 $ 时,称为多类分类器。
总结

在本节课中,我们学习了如何通过经验风险最小化来拟合分类器。我们讨论了如何将分类变量嵌入到向量中,以及如何使用嵌入和反嵌入函数来构建分类器。在下一节课中,我们将讨论分类器的损失函数。
012:斯坦福大学《机器学习|Stanford EE104 Introduction to Machine Learning 2020》deepseek翻译 p12 Lecture 14 - 布尔分类.zh_en -BV1utzNYqEkr_p12-


布尔分类
布尔分类是一种特殊的机器学习任务,其目标变量是分类变量,通常表示为真或假。在本节中,我们将探讨布尔分类的基本概念和常用损失函数。
核心思想
布尔分类的核心思想是将目标变量嵌入到欧几里得空间中。对于布尔分类,我们将目标变量嵌入到一维欧几里得空间中,即正负1。例如,真可能嵌入为正1,而假嵌入为负1。
然后,我们使用正则化经验风险最小化来拟合各种损失函数,例如平方损失函数和逻辑损失函数。
损失函数
以下是布尔分类中常用的损失函数:
- 平方损失函数:当预测值与真实值不一致时,损失函数的值较大;当预测值与真实值一致时,损失函数的值为0。
- 逻辑损失函数:类似于逻辑回归中的损失函数,当预测值与真实值不一致时,损失函数的值较大;当预测值与真实值一致时,损失函数的值为0。
- Hinge损失函数:当预测值与真实值不一致时,损失函数的值较大;当预测值与真实值一致时,损失函数的值为0。
例子
以下是一个使用逻辑损失函数进行布尔分类的例子:
import numpy as np
from sklearn.linear_model import LogisticRegression
# 创建数据集
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])
y = np.array([1, 1, 0, 0])
# 创建逻辑回归模型
model = LogisticRegression()
# 训练模型
model.fit(X, y)
# 预测
y_pred = model.predict(X)
# 打印预测结果
print(y_pred)
总结

布尔分类是一种特殊的机器学习任务,其目标变量是分类变量。在本节中,我们介绍了布尔分类的基本概念和常用损失函数。希望这些内容能够帮助您更好地理解布尔分类。
013:斯坦福大学《机器学习|Stanford EE104 Introduction to Machine Learning 2020》deepseek翻译 p13 Lecture 15 - 多类分类.zh_en -BV1utzNYqEkr_p13-


多类分类
概述
在本节课中,我们将学习多类分类的基本概念和方法。
核心概念
多类分类:目标变量可以取K个可能值的分类问题。
原始目标值:从1到K的数字。
嵌入:使用映射 $ y = \psi(V) $ 将原始目标值嵌入到 $ \mathbb{R}^M $ 空间。
预测器:从输入 $ X $ 生成预测目标值 $ \hat{y} $ 的函数。
反嵌入:从预测目标值 $ \hat{y} $ 恢复原始目标值 $ V $ 的过程。
分类过程
- 嵌入:将原始目标值 $ V $ 嵌入到 $ \mathbb{R}^M $ 空间。
- 预测:使用预测器从输入 $ X $ 生成预测目标值 $ \hat{y} $。
- 反嵌入:找到与 $ \hat{y} $ 最接近的嵌入点,从而确定类别。
性能指标
- 混淆矩阵:用于评估分类器的性能。
- Kappa系数:用于衡量分类器的一致性。
损失函数
- 理想损失函数:根据预测目标值 $ \hat{y} $ 和真实目标值 $ y $ 计算的损失函数。
- 正则化经验风险最小化:用于构建预测器的优化问题。
多类分类方法
- 多类支持向量机(SVM):使用多类 hinge 损失函数。
- 多类逻辑回归:使用多类 logistic 损失函数。
示例
- 鸢尾花数据集:使用多类逻辑回归进行分类。
总结

本节课中,我们学习了多类分类的基本概念和方法,包括嵌入、预测、反嵌入、损失函数和分类器。我们还通过示例展示了如何使用多类逻辑回归进行分类。
014:斯坦福大学《机器学习|Stanford EE104 Introduction to Machine Learning 2020》deepseek翻译 p14 Lecture 16 - probabilistic classification.zh_en -BV1utzNYqEkr_p14-


📚 机器学习:16. 概率分类
概述
在本节课中,我们将学习概率分类的概念,包括概率分类器、概率分布以及如何评估概率分类器的性能。
概率分类器
概率分类器与点分类器不同,它不仅预测一个类别,而是预测一个概率分布。这意味着它给出每个可能类别的概率,而不是一个确定的类别。
公式:
$$ P(\hat{V} | U) = G(U) $$
其中 $ G $ 是一个函数,它将输入 $ U $ 映射到一个概率分布 $ P(\hat{V} | U) $。
概率分布
概率分布是一个函数,它将目标集 $ V $ 中的每个元素映射到一个非负实数,这些实数的总和必须为 1。
公式:
$$ P(V_i) = \frac{count(V_i)}{total_count} $$
其中 $ count(V_i) $ 是类别 $ V_i $ 的数据点数量,$ total_count $ 是所有数据点的总数。
评估概率分类器
评估概率分类器的一种方法是计算其平均对数似然。对数似然是预测分布与真实分布之间的匹配程度的度量。
公式:
$$ L(P) = \prod_{i=1}^{n} P(\hat{V}_i | U_i) $$
其中 $ P $ 是预测分布,$ \hat{V}_i $ 是第 $ i $ 个数据点的预测类别。
交叉熵
交叉熵是预测分布与真实分布之间的差异的度量。
公式:
$$ H(P, Q) = -\sum_{i=1}^{n} P(V_i) \log P(\hat{V}_i) $$
其中 $ P $ 是预测分布,$ Q $ 是真实分布。
总结

本节课中,我们学习了概率分类的概念,包括概率分类器、概率分布以及如何评估概率分类器的性能。我们了解到,概率分类器可以提供比点分类器更丰富的信息,并且可以通过对数似然和交叉熵来评估其性能。
015:斯坦福大学《机器学习|Stanford EE104 Introduction to Machine Learning 2020》deepseek翻译 p15 Lecture 17-erm for probabilistic classif..zh_en -BV1utzNYqEkr_p15-


📚 斯坦福大学《机器学习》:概率分类的ERM
概述
在本节课中,我们将学习如何使用期望最大化(ERM)方法进行概率分类。我们将探讨损失函数、交叉熵损失以及如何将线性预测器转换为概率分类器。
概率分类器
我们有一个概率分类器 $ G $,它依赖于参数 $\theta$,输入为 $ x $,并返回目标集上的概率分布。
损失函数
我们使用平均负对数似然(NLL)来评估概率分类器的性能。
交叉熵损失
交叉熵损失(CE)是负对数似然,表示为:
$$ L_{CE}(y, \hat{y}) = -\log P(y|\hat{y}) $$
其中 $ y $ 是真实标签,$ \hat{y} $ 是预测的概率分布。
线性预测器
对于线性预测器,我们使用逻辑函数(softmax)将预测向量转换为概率分布。
逻辑函数
逻辑函数(softmax)定义为:
$$ \sigma(y) = \frac{e{y_i}}{\sum_{j=1} e^{y_j}} $$
其中 $ y $ 是预测向量,$ K $ 是类别数。
概率分类
对于概率分类,我们使用交叉熵损失函数,并通过逻辑函数将线性预测器的输出转换为概率分布。
总结

在本节课中,我们一起学习了如何使用期望最大化(ERM)方法进行概率分类。我们探讨了损失函数、交叉熵损失以及如何将线性预测器转换为概率分类器。
016:斯坦福大学《机器学习|Stanford EE104 Introduction to Machine Learning 2020》deepseek翻译 p16 Lecture 18 - 无监督学习.zh_en -BV1utzNYqEkr_p16-


🤖 斯坦福大学《机器学习》:第18讲:无监督学习
概述
在本节课中,我们将学习无监督学习。无监督学习与监督学习不同,它不依赖于标签数据,而是通过探索数据中的结构来学习。
无监督学习
无监督学习的目标是构建一个模型来描述数据中的结构。以下是一些无监督学习的应用:
- 揭示数据结构:例如,将数据聚类成不同的组。
- 处理缺失值:例如,通过插补方法填充缺失值。
- 检测异常值:例如,识别数据中的异常情况。
数据表示
与监督学习类似,我们首先将数据嵌入到特征向量中。假设我们有一个数据集 $ U = { u_1, u_2, ..., u_n } $,其中每个 $ u_i $ 是一个 $ D $ 维向量。我们将这些数据嵌入到特征向量 $ X = { x_1, x_2, ..., x_n } $ 中,其中每个 $ x_i $ 是 $ \phi(u_i) $ 的结果。
损失函数
无监督学习中的模型是通过损失函数来描述的。损失函数 $ L(\theta, x) $ 是一个定义在 $ \mathbb{R}^D $ 上的实值函数,它衡量了 $ x $ 作为数据点的合理性。如果 $ L(x) $ 较小,则 $ x $ 看起来像数据中的典型点;如果 $ L(x) $ 较大,则 $ x $ 不像数据中的点。
模型示例
以下是一些常见的无监督学习模型:
- 高斯混合模型:假设数据由多个高斯分布组成。
- K均值聚类:将数据聚类成 $ K $ 个簇。
- 主成分分析:将数据投影到低维空间。
异常检测
异常检测是一种无监督学习方法,用于识别数据中的异常值。以下是一种异常检测方法:
- 使用损失函数 $ L(\theta, x) $ 建立数据模型。
- 计算所有数据点的损失函数值。
- 选择一个阈值 $ T $,例如,99% 分位数。
- 如果某个数据点的损失函数值大于 $ T $,则将其标记为异常。
缺失值插补
缺失值插补是一种无监督学习方法,用于填充数据中的缺失值。以下是一种缺失值插补方法:
- 对于每个数据点 $ x $,找到其已知值 $ K $。
- 使用损失函数 $ L(\theta, x) $ 填充缺失值。
- 选择使 $ L(x) $ 最小的值。
总结

本节课中,我们学习了无监督学习的基本概念和应用。无监督学习是一种强大的工具,可以用于探索数据中的结构,并解决各种实际问题。
017:斯坦福大学《机器学习|Stanford EE104 Introduction to Machine Learning 2020》deepseek翻译 p17 Lecture 19 - 主成分分析.zh_en -BV1utzNYqEkr_p17-


概述
在本节课中,我们将学习主成分分析(PCA),这是一种无监督学习方法,用于数据降维和特征提取。
主成分分析(PCA)
主成分分析是一种无监督学习方法,它使用特定的数据模型来分析数据,并利用子空间距离的概念。
子空间
给定一组D维向量 $\theta_1$ 到 $\theta_R$,通过所有可能的线性组合,我们可以得到一个子空间。例如,$X = a_1\theta_1 + a_2\theta_2 + ... + a_R\theta_R$,其中$a_i$ 可以任意选择。
子空间距离
如果我们有一个向量 $X$,我们想知道它到子空间 $S$ 的距离,我们可以找到子空间 $S$ 中与 $X$ 最接近的点 $X^*$。
最小二乘法
为了找到 $X^*$,我们可以使用最小二乘法。最小化目标函数 $||X - \theta a||^2$,其中 $\theta$ 是一个矩阵,其列是向量 $\theta_1$ 到 $\theta_R$,$a$ 是系数向量。
主成分
主成分分析的目标是找到一组正交基向量,这些向量可以最小化数据点到子空间的距离。
特征提取
PCA 可以用于特征提取,将高维数据转换为低维数据,同时保留大部分信息。
近似等距性质
PCA 具有近似等距性质,这意味着它近似地保留了原始数据中的距离。
应用
PCA 可以用于多种应用,包括:
- 数据降维
- 特征提取
- 异常检测
- 图像压缩
示例:潜在语义索引
潜在语义索引是一种使用 PCA 进行文本分析的方法。它可以将文档映射到低维空间,以便进行分类或聚类。
总结

在本节课中,我们学习了主成分分析(PCA),这是一种用于数据降维和特征提取的无监督学习方法。PCA 具有近似等距性质,可以近似地保留原始数据中的距离。PCA 可以用于多种应用,包括数据降维、特征提取、异常检测和图像压缩。

浙公网安备 33010602011771号