记录较全的 CS229 的 ML 笔记
在监督学习问题中,算法会知道每个样本的正确答案是什么,并希望学习算法对于新的输入能输出大致相同的答案。如房价预测的例子, 可能有一组训练样本,会告诉算法,对于每一个集合中的样本,什么是它“正确”的房价; 之后会希望这个算法能够学习房屋大小和房屋价格之间的关系。并且能够产生出更多“正确”的答案。
回归问题: 如自动驾驶; 比如汽车尝试预测表示行驶反向的连续变量的值。
分类问题: 如垃圾邮件分类。
这里主要将一个监督学习的算法,同时它可以归约于一个回归任务; 如房价预测的例子:
其对应的数据分布图:
Question 1 给一个训练数据的集合,如第一张图里的数据,能否学会预测第二张图中房屋大小和房价之间的关系?
2.1 符号表示:
- m m m : 表示训练样本的数目,也就是第一张图里面数据的行数(房子的大小、价格的数目)。
- x x x : 表示输入变量,通常称为特征(feature)。
- y y y : 表示输出变量,或者称为目标变量。
- ( x , y ) (x,y) (x,y) : 表示一个样本
- n n n : 学习问题中特征的数目
- ( x i , y i ) (x^i,y^i) (xi,yi) : 第 i i i 个训练样本或说表中的第 i i i 行。 用括号括起来的上标 i i i 表示训练样本列表中的第 i i i 行
- 这里面, 喊 j j j 的下标是针对特征向量从 0 到 n, i i i 的下标是从 1 到 m,针对的是训练样本。
在监督学习中,一般会先找到一个训练集合,然后将由 m m m 个训练样本组成的训练集合,提供给学习算法; 然后算法会生成一个输出函数( h h h ),这个函数称为假设函数。 这个假设函数的任务就是: 接收输入,比如说一个用平方英尺表示的新的面积并输出对房价的估计。 即假设 h h h 将输入 x x x 映射到输出 y y y ,流程图如下:
那么,为了设计学习算法,第一步要做的是:决定应该怎样表示假设! 对于这里的第一个学习算法来说,要对假设函数进行线性表示,即把假设函数表示成:
h ( x ) = θ 0 + θ 1 x 1 h(x) =θ_0 + θ _1x_1 h(x)=θ0+θ1x1 , x x x 是一个输入特征,这里对应的就是要考虑的房子大小。
通常情况下,许多回归问题都需要多个输入特征,这里新增一个特征: 房子的卧室数量,如下图:
这样,训练集合就可以有第二个特征,表示房子的卧室数量; 那么,使用 x 1 x_1 x1 : 表示房子的大小和平方公尺, x 2 x_2 x2 : 表示卧室的数量; 这时候假设函数就写成:
h ( x ) = h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 h(x) =h_ θ(x) = θ_0 + θ _1x_1 + θ _2x_2 h(x)=hθ(x)=θ0+θ1x1+θ2x2 。
这就是假设:即对于特征 x x x 预测的开销(代价); 给定房子的特征 x x x ,一个明确的房子大小和一个明确的卧室数,预测出的开销;
为了写法便捷,定义 x 0 = 1 x_0 = 1 x0=1 ,则假设函数可表示为:
h ( x ) = ∑ i = 0 2 θ i x i = θ T x h(x) = \sum_{i=0}^2\ θ _ix_i= θ ^Tx h(x)=