Python深度学习与项目实战
上QQ阅读APP看书,第一时间看更新

1.1 线性回归详解

考虑这样一个情况,现在有一套房子需要出售。房子的主人并不清楚如何对这套房子进行定价,因此他就在房屋出售的相关网站上查找这套房子附近已经售出的房子的交易价格,可是没有找到一套和他的房子地理位置、房子大小、房间格局等都很类似的房子的交易信息。虽然可以随便给这套房子定一个较高的价格,但是如果把这套房子的价格定得过高,使得其性价比远远低于附近正在售卖的房子,就会直接导致这套房子在短时间内很难卖出去。如果将这套房子的价格定得过低,低于这套房子的市值,房主就会觉得很不甘心。这个时候就可以根据网站上已有的附近正在售卖的房子信息与其对应的价格数据来构建并训练一个线性回归模型,然后使用这个经过训练的线性回归模型来实现对当前房子价格的预测。将预测出的房价作为实际的售卖价格,就能够保证这套房子的性价比不会与周围其他正在售卖的房子差距过大。以下几节将详细讲解如何构建并训练一个线性回归模型来实现对房价的预测。

1.1.1 数据集的构建

首先需要搜集用于训练线性回归模型的数据集,可以在网上搜集并记录这套房子附近正在出售的房子相关的详细信息(包括房子大小、房间数、距市中心的距离等)以及每套房子对应的价格数据。这些房子相关的描述信息称为特征(feature),对应的房价称为标签(label)。一套房子的数据,包括描述信息(特征)与房价(标签),称为一个样本。搜集到的所有样本的集合称为数据集。数据集中样本的个数使用来表示。为了简化描述,可以假设房价只取决于房子大小、房间数、距市中心的距离这3个特征值。因此数据集中每个样本表示一套房子的数据,每个样本都有3个特征值与一个对应的标签值。

在机器学习中,通常使用来表示数据集中所有样本的特征的集合,使用来表示数据集中所有样本的标签的集合。数据集中第个样本的特征使用表示。使用特征加下标的方式来分别表示样本中每一个单独的特征值,对于这个房价数据集,分别使用来表示第个样本中的3个特征值。使用表示第个样本的标签值,也就是其对应的房价。

1.1.2 线性回归模型的构建

构建数据集以后,就可以构建一个线性回归模型,然后使用数据集中的数据对模型进行训练。在线性回归模型中,使用样本特征值与模型的参数的线性组合作为模型的预测值。如数据集中第个样本使用线性回归模型得到的预测值为

其中,表示线性回归模型对第个样本的预测值;为模型的参数;参数称为线性回归模型的权重(weight);参数称为线性回归模型的偏差(bias)。模型中所有的参数需要在初始化之后,使用数据集中的样本数据对模型进行训练才能够得到合适的值,1.4节会详细讲解如何训练线性回归模型。线性回归模型中的权重值的大小决定了对应特征对预测结果的重要程度。如该模型经过训练得到的3个权重的值分别为100、10、1,这就说明房子的大小对房价影响最大,其次是房间数,距市中心的距离相对来说对房价影响最小。

1.1.3 损失函数详解

构建好了线性回归模型以后,需要制定一个标准来衡量模型的好坏。例如,对于第个样本,它的标签值(实际的房价)为,模型的预测值(模型预测的房价)为,这个标准需要能够衡量模型的预测值与标签值之间的差值,差值越小说明模型的预测值与标签值越接近,也就是模型的预测效果越好。在机器学习中,把这个衡量模型预测值与标签值之间差值的函数称为损失函数(loss function)。

我们首先来看一下可以用来衡量线性回归模型的预测值与标签值的损失函数表达式,如下所示。

其中,为线性回归模型的参数,同时也是损失函数的参数;为数据集中样本个数;分别为第个样本的标签值与线性回归模型对第个样本的预测值。在损失函数中,首先把模型的预测值与标签值相减,得到模型的预测值与标签值的误差,然后对误差求平方。接下来把所有的平方值加起来,并将最后的结果除以样本的个数,得到所有样本误差平方的平均值。公式中的平方运算是为了防止相加后的结果正、负抵消:对于一些样本,标签值与模型的预测值相减得到的是正数;对于另一些样本,相减的值会是负数。无论正数还是负数,都代表了模型预测值与实际值之间的差值,但是如果直接把这些值相加,正、负值就会抵消,从而不能准确地衡量损失值。把所有相减得到的值都求平方以后,所有的差距值都变为正数,这样相加后的结果能够更加准确地衡量模型的预测值与标签值之间的差距。

损失函数中的参数决定了损失函数输出值的大小。因为损失函数的输出值代表了模型对数据集中全部样本的预测值与标签值之间的差值,差值越小说明模型的预测值越准确,所以需要得到参数合适的值,使损失函数的输出值最小。在机器学习中,通常使用梯度下降算法来求使损失函数取最小值的参数的值。