ML-程序练习-Dragon
本文最后更新于:2023年11月8日 中午
回归问题
前期
假设已有某样例,参数为w=1.477, b=0.089,即为$y=1.477x+0.089$
过程分析
数据采样
首先我们需要模拟一些带有真实样本观测误差的数据(因为真实情况是真实模型我们已经知道了),所以我们在这里给模型添加误差自变量$\epsilon$,其采样自均值为0,标准差为0.01的高斯分布:
$$
y=1.477x+0.089+\epsilon,\epsilon\sim N(0, {0.01}^2)
$$
通过随机采样100次获得训练数据集
1 |
|
MSE
计算每个点的预测值与真实值之间差的平方并累加,获得均方误差损失值
1 |
|
最后的误差和除以样本总数得到平均误差
梯度计算
这里首先需要推导一下梯度的表达式
$$
\frac{\alpha L}{\alpha w}=\frac{\alpha \frac{1}{n}\sum_{i=1}^{n}{(wx^{(i)}+b-y^{(i)})}^2}{\alpha w}=\frac{1}{n}\sum_{i=1}^{n}\frac{\alpha{(wx^{(i)}+b-y{(i)})}^2}{\alpha w}
$$
所以可以得到
$$
\frac{\alpha L}{\alpha w}=\frac{2}{n}\sum_{i=1}^n(wx^{(i)}+b-y^{(i)}·x^{(i)})
$$
同理,可以推导得到
$$
\frac{\alpha L}{\alpha b}=\frac{1}{n}\sum_{i=1}^n2(wx^{(i)}+b-y^{(i)})·1
$$
所以,我们只需要计算出上述两个值,平均以后即可得到偏导数
1 |
|
梯度更新
我们可以根据计算出的误差函数在w和b处的梯度后,根据$x^`=x-\eta\triangledown f$更新w和b的值。对数据集的所有样本训练一次称为一个Epoch,共循环迭代num_iterations个Epoch
1 |
|
完整程序
1 |
|
运行结果:
1 |
|
所以,当迭代100次之后,w和b的值就已经比较接近真实模型了。