![TensorFlow机器学习(原书第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/694/44567694/b_44567694.jpg)
3.2 线性回归
让我们从创建一些模拟数据开始进入线性回归的核心部分。创建一个名为regression.py的Python文件,按照清单3.1初始化数据。代码将产生类似图3.5的输出。
![](https://epubservercos.yuewen.com/10538A/23764583701649206/epubprivate/OEBPS/Images/070-02.jpg?sign=1739553865-pXzluPyEXR0yPFbyHojqFRZe9GGTYEf0-0-3079760bfbcde9e75aca06f9cfbc2d24)
图3.5 y=x+(噪声)的散点图
清单3.1 可视化原始输入
![](https://epubservercos.yuewen.com/10538A/23764583701649206/epubprivate/OEBPS/Images/070-01.jpg?sign=1739553865-b6sMZSaMlUIP0tSVURxiwxh5JX0b4gef-0-8e17984484a9b8148d21093e0bb17c10)
现在你有了一些可用的数据点,你可以尝试对它们拟合一条直线。至少,你需要为TensorFlow提供每个候选参数的得分。确定得分的通常被称为代价函数。得分越高说明模型的参数越差。如果最佳拟合曲线是y=2x,选择2.01为参数的代价较低,而选择-1为参数的代价则较高。
当转化为最小化代价函数的问题之后,如图3.6所示,TensorFlow负责背后的工作,尝试以一种有效的方式更新参数,并最终达到可能的最佳值。将你所有的数据遍历完一次以更新参数,称为一个epoch。
![](https://epubservercos.yuewen.com/10538A/23764583701649206/epubprivate/OEBPS/Images/070-03.jpg?sign=1739553865-xqe4QmQgfDpjiQIyTMlfXU0c0GE4d4cG-0-28142deba6fce7bdaefd03902d9eed6a)
图3.6 寻找参数w使代价最优。代价定义为理想值与模型实际输出之间的误差的范数。最后,实际输出是根据模型的函数计算的
在本例中,你用误差的总和来定义代价。预测x的误差通常是计算实际值f(x)和预测值M(w, x)的平方差。因此,代价为实际值与预测值的平方差之和,如图3.7所示。
![](https://epubservercos.yuewen.com/10538A/23764583701649206/epubprivate/OEBPS/Images/071-01.jpg?sign=1739553865-s5L44k5LkYsOGWNKmeFWBJhkZEgJ3JkH-0-a9a5915f287ce4c8c39ba732dff94b8d)
图3.7 代价是模型输出和实际值之间差的范数
将前面的代码更新为清单3.2的样子。此代码定义了代价函数并要求TensorFlow运行优化器来找到模型参数的最优解。
清单3.2 求解线性回归
![](https://epubservercos.yuewen.com/10538A/23764583701649206/epubprivate/OEBPS/Images/071-02.jpg?sign=1739553865-EARaGAN73wxiX1TvHtB2xbyG7vOMZbBS-0-e284527640a0d01ef13492fc1ffc8ebb)
如图3.8所示,你刚刚使用TensorFlow完成了线性回归!另外,回归算法中的其他主题与清单3.2的代码差别不大,这很方便。整个流程涉及通过TensorFlow更新模型参数,如图3.9所示。
![](https://epubservercos.yuewen.com/10538A/23764583701649206/epubprivate/OEBPS/Images/072-01.jpg?sign=1739553865-UjrYnlmr5ZSjPw3m6w0kGQFH7zwxXSGT-0-99af94fd2cc3f8de1784e70e012b5004)
图3.8 运行清单3.2得到的线性回归估计
![](https://epubservercos.yuewen.com/10538A/23764583701649206/epubprivate/OEBPS/Images/072-02.jpg?sign=1739553865-nzfOb7wwlnuNi5yOlgRZM26bBCpXaC3x-0-78fc7762874506a3e70a06eff7e57f64)
图3.9 学习算法更新模型参数来最小化给定的代价函数
现在你已经学习了如何在TensorFlow中实现一个简单的回归模型。如前所述,要进一步改进模型只需要适当地调整偏差和方差之间的权衡。到目前为止,你的模型有较大的偏差,它只表达了一组有限的函数,如线性函数。在3.3节中,你会尝试一个更复杂的模型。你会发现只有TensorFlow图需要重新连接,其他所有事情(如预处理、训练和评估)都保持不变。