线性回归
问题定义
作为一种新事物,我们将从学习怎样实现线性回归开始。线性回归的主要思想是熟悉目标函数,计算出它们的梯度和通过一些列参数使目标达到最优化。这些基本的工具将组成后面更加复杂的算法。想要了解一些附加细节的读者可以参考监督学习的课程笔记。
我们在线性回归课程的目标上是通过输入一个向量去预测目标值y.举个例子来说,我们可能想要预测一组房子的价格,我们用y代替房子的价格,并且在x向量中的
代表描述房子的某一个特征(比如说它的大小和卧室的数量)。假设我们有许多房子数据的样本,其中样本中的特征对应的价格为
。
我们的目标是找到一个函数,所以对每一组样本数据我们可以有
。如果我们能够成功找到这样的函数
,并且我们已经看过足够多的房子和它们对应价格的数据,我们希望这个函数
可以成为一个好的房子价格预测者,即使我们只知道一个新房子的一些特性,但是不知道它的价格。
要找到这样的函数使得
,第一步,我们必须决定怎样表达函数
,开始我们将使用到线性函数:
.在这里
代表的是一个θ组来参数化的函数(我们把这函数的空间称为"假设类"),通过这种表达方式来表达h,我们的目标是找到一组选择θ,来让尽可能的和
靠近。特别的是,我们将会找寻这组θ来使
这个函数最小化。这个函数是用来对我们用来评估对于一个特定的组θ的选择而导致错误的"成本函数"。这也可能被称为"损失","惩罚"或者或者"目标"函数。
函数最小化
我们现在想要找到一组这样的θ来使上面得出的函数最小化。这里有许多的算法来最小化上面的函数,这里我们将用一些特别有效的算法来描述,这个算法在你们上了后一章节梯度下降后你们可以很容易自己实现。但是对于现在,让我先忽略掉这个现实--大部分常用的函数最小化算法要求我们提供
的两部分信息。我们需要写出代码来计算
和
,其要求遍历所有θ组。在这之后,使用最优化寻找最合适的θ组过程由最优化算法来处理(回想不同j的函数梯度
是一组向量作为以θ为函数的最速增长方向-所以很容易发现最优化算法是怎样使用这点来对θ做出很小的改变来使
增加或减少)
上面通过一些列关于和
的训练数据给出的
表达式非常容易在MATLAB上计算出
的值-无论你给出的θ组是什么。剩下的要求是去计算梯度:
对上面给出的一个特定参数对花费函数
微分得出:
作业1A:线性回归
在这次练习中你们将要在MATLAB上实现目标函数并且计算出线性回归的梯度。
在starter code package 中的ex1/目录下你们将会看到文件ex1_linreg.m,它包含了一个简单线性回归线性回归的实验材料。这个文件给出了一些规格步骤给你。
1、数据从housing.data载出。一个额外的特征"1"被添加到数据集,θ1将作为线性函数的截距项。
2、数据集中的例子将会随机被翻换,然后数据将会被分成训练集和测试集。用来作为学习算法输入的特征们被储存在变量train.X 和 test.X中。要预测的目标值是每个示例的估计房价。训练集合测试集中的价格分别被储存在"train.y" 和 "test.y"中,。你将使用训练集去寻找最合适的θ来预测房子价格然后用测试集来检测它的性能。
3、代码调用minfunc优化包。 minfunc将通过最小化在linear_regression.m.文件中实现的目标函数来尝试去寻找最合适的θ。实现linear_regression.m.去计算目标函数值并且通过参数组算出梯度将是你的任务。
4、在minFunc完成后(即训练集完成后),训练和测试的错误将会被打印出来。 可选的,它将快速的可视化展示出在测试集上的预测价格和实际价格。
ex1_linreg.m文件调用linear_regression.m(你需要自己写代码)。linear_regression.m接收训练集X,训练集目标值(房子价格)y,和当前参数组θ作为输入参数。
完成下列练习步骤:
1、填写linear_regression.m文件中的代码来计算上面描述的线性回归问题的,将计算得出的值存储在变量f中。
你可能通过循环训练集中的例子(数据矩阵X中的列)来完成所有步骤。对于每一次循环,都改变f和g值。我们在下个练习会用另外一个更快的版本。
一旦你成功的完成了练习,结果的展示应该和下面的图看起来很像。
(你的可能因为对训练集和数据集的随机选择不同而和我的有些不同)均方根训练和测试误差的典型值分别为5和4.5之间。