目标
在本实验中,你将:
- 利用在上一个实验中开发的多变量例程
- 对具有多个特征的数据集运行梯度下降
- 探讨学习率alpha对梯度下降的影响 通
- 过使用z-score归一化的特征缩放提高梯度下降的性能
工具
使用matplotlib和NumPy
import numpy as np
np.set_printoptions(precision=2)
import matplotlib.pyplot as plt
dlblue = '#0096ff'; dlorange = '#FF9300'; dldarkred='#C00000'; dlmagenta='#FF40FF'; dlpurple='#7030A0';
plt.style.use('./deeplearning.mplstyle')
from lab_utils_multi import load_house_data, compute_cost, run_gradient_descent
from lab_utils_multi import norm_plot, plt_contour_multi, plt_equal_scale, plot_cost_i_w
【注意】文件夹下一定要有下面两个文件
问题描述
与之前的实验一样,您将使用房价预测的激励示例。训练数据集包含许多具有4个特征(大小,卧室,楼层和年龄)的示例,如下表所示。注意,在本实验中,尺寸特征以平方英尺为单位,而早期的实验室使用1000平方英尺。这个数据集比以前的实验室要大。
我们想用这些值建立一个线性回归模型,这样我们就可以预测其他房子的价格——比如,一栋1200平方英尺、3间卧室、1层、40年的房子。
数据集
load the dataset
X_train, y_train = load_house_data()
X_features = ['size(sqft)','bedrooms','floors','age']`
让我们通过绘制每个特征与价格的关系来查看数据集及其特征。
fig,ax=plt.subplots(1, 4, figsize=(12, 3), sharey=True)
for i in range(len(ax)):
ax[i].scatter(X_train[:,i],y_train)
ax[i].set_xlabel(X_features[i])
ax[0].set_ylabel("Price (1000's)")
plt.show()
将每个特征与目标价格进行对比,可以显示哪些特征对价格的影响最大。以上,增大尺寸也增加价格。卧室和楼层似乎对房价没有太大影响。新房子的价格比旧房子高。
多变量梯度下降
这是你在上个多变量梯度下降实验中开发的方程:
n是特征量的数量,参数w,b是同事改变的
M是数据集中训练样例的个数
学习率
讲座讨论了一些与设定学习率有关的问题。 学习率控制参数更新的大小。见式(1)。它由所有参数共享。
让我们运行梯度下降并尝试一些设置我们的数据集
a=9.9e-7
#set alpha to 9.9e-7
_, _, hist = run_gradient_descent(X_train, y_train, 10, alpha = 9.9e-7)
看来学习率太高了。解不收敛。成本在增加而不是减少。让我们来绘制结果:
plot_cost_i_w(X_train, y_train, hist)
右图显示了其中一个参数的值w0,在每次迭代中,它都会超过最优值,因此,成本最终会增加而不是接近最小值。请注意,这不是一个完全准确的图片,因为每次有4个参数被修改,而不仅仅是一个。这张图只是在展示w0其他参数固定在良性值。在这个和后面的图中,你可能会注意到蓝色和橙色的线稍微偏离了。
a=9e-7
#set alpha to 9e-7
_,_,hist = run_gradient_descent(X_train, y_train, 10, alpha = 9e-7)
成本在整个运行过程中不断下降,这表明alpha不是太大。
plot_cost_i_w(X_train, y_train, hist)
在左边,你可以看到成本在下降。在右边,你可以看到W0仍然在最小值附近振荡,但是每次迭代都在减少而不是增加。注意,dj_dw[0]随着每次迭代而改变符号,因为w[0]跳过了最优值。这个值会收敛。您可以改变迭代的次数来查看它的行为。
a= 1e-7
#set alpha to 1e-7
_,_,hist = run_gradient_descent(X_train, y_train, 10, alpha = 1e-7)
成本在整个运行过程中不断下降,a不是太大
plot_cost_i_w(X_train,y_train,hist)
在左边,你可以看到成本在下降。在右边你可以看到
在不超过最小值的情况下递减。注意,dj_w0在整个运行过程中都是负值。这个解决方案也会收敛,尽管没有前面的示例那么快。
特征缩放
讲座描述了重新缩放数据集的重要性,以便特征具有相似的范围。如果您对为什么会出现这种情况的细节感兴趣,请点击下面的“details”标题。如果没有,下面一节将介绍如何进行特征缩放的实现。
Z-score 归一化
在z-score归一化之后,所有特征的均值为0,标准差为1。
要实现z-score归一化,调整输入值,如下公式所示:
选择X矩阵中的一个特征或一列。µ是均值,σ是标准差
实现注意:在对特征进行归一化时,存储用于归一化的值是很重要的——用于计算的平均值和标准偏差。在从模型中学习参数之后,我们经常想要预测我们之前没有见过的房子的价格。给定一个新的x值(客厅面积和卧室数量),我们必须首先使用我们之前从训练集中计算的平均值和标准差对x进行规范化。