2.3.3通过调整特征大小改善梯度下降
许多机器学习算法需要通过对某种特征进行调整以优化性能。
梯度下降是许多可以从特征调整中优化的算法之一。可以利用一种叫做标准化的特征尺度调整方法来加快收敛,它可以使数据具有标准正态分布的特征,有助于梯度下降学习。标准化可以使标准化后的特征平均值为0,标准差为1。比如要标准化第j个特征值 xj=(xj-μj)/σj。μi是所有样本第i个特征的均值。σi是所有样本第i个特征的标准差。用Numpy的方法mean和std可以很容易地实现标准化:
X_std=np.copy(X)
X_std[:,0]=(X_std[:,0]-X_std[:,0].mean())/X[:,0].std()#标准化特征1
X_std[:,1]=(X_std[:,1]-X_std[:,1].mean())/X[:,1].std()#标准化特征2
标准化后再次训练上一节的Adaline,在η=0.01的情况下观察其收敛情况:
ada=AdalineGD(n_iter=15,eta=0.01)
ada.fit(X_std,y)
plot_decision_regions(X_std,y,classifier=ada)
plt.title('Adaline - Gradient Descent')
plt.xlabel('sepal length [standardized]')
plt.ylabel('petal length [standardized]')
plt.legend(loc='upper left')
plt.tight_layout
plt.show()
plt.plot(range(1,len(ada.cost_)+1),ada.cost_,marker='o')
plt.xlabel('Epochs')
plt.ylabel('Sum-aquared-error')
plt.show()
在学习率为0.01的情况下,在第10次就基本收敛。
2.3.4 大规模机器学习与随机梯度下降
上一节是基于整个训练集计算代价梯度,也称为批量式梯度下降。但当数据集有高达数百万个数据点的时候,批量式梯度下降就会成本很高。
在大型数据集中替代批量式梯度下降的方法是随机梯度下降法,也称为迭代或在线梯度下降法,该方法不是基于所有样本累加误差之和更新权重,而是为每个训练样本逐渐更新权重
虽然随机梯度下降可以看作是梯度下降的近似,但因为权重更新更频繁,通常收敛得更快
随机梯度下降以及在线学习的代码见作者github:https://github.com/PacktPublishing/Python-Machine-Learning-Second-Edition。
第二章小结:本章主要讨论有监督学习的线性分类器,通过实现感知器了解如何通过向量化实现梯度下降和基于随机梯度下降的在线学习,有效地训练自适应线性神经元。