Task02 回归
学习地址
回归
定义和例子比较简单,不详细介绍。主要总结一下相关理解和注意点。
模型步骤
- step1:模型假设,选择模型
- 可以选择线性模型,一元的或多元的
- ps:线性模型不仅仅只是一次的,也可以是n次的以及其他交叉的,只需将 xn 看作是一个特征即可
- step2:模型评估,如何判断众多模型的好坏(损失函数)
- 对于线性回归选择误差平方和即可
- ps:这是一个凸函数,故在用gradient descent寻找最优参数时一定可以找到
- step3:模型优化,如何筛选最优的模型(梯度下降)
- 优化目标即找到使loss最小的function或者w,b
- 梯度下降具体做法:
- 梯度下降可视化过程:
- 梯度下降的理解及存在的问题:
- 参数更新主要取决于梯度的大小和学习率即步长,直观上,梯度越大的地方参数更新幅度也越大,学习率越大参数更新幅度也越大
- 梯度下降不仅仅适用于线性回归中的损失函数更新参数,对于任何可微的损失函数都适用
- 对于损失函数为凸函数的问题,梯度下降总能找到global minima
- 对于复杂的损失函数问题,梯度下降容易陷入local minima,尤其受到初始值和学习率的影响
- 容易陷入鞍点,停止更新
过拟合问题overfiting
模型在训练集上过拟合的问题:即在训练集上面表现更为优秀的模型,在测试集上效果反而变差。或者说泛化能力generalization不够好。
- 错误率结果图形化展示发现过拟合问题 :
如何解决或者降低过拟合
- 使用多个模型结合,如使用多个线性模型合并成的线性模型
- 引入更多特征参数,更多数据input
- 在损失函数中加入正则化限制参数w的大小
- 常见的有L1正则化和L2正则化
- w越小,意味着function越平滑
- 正则化参数
λ
\lambda
λ 越大,training error考虑的比重就越低
- 在很多应用场景中,并不是 w 越小模型越平滑越好,但是经验值告诉我们 w 越小大部分情况下都是好的
- bias 的值对曲线平滑没有影响,因此正则化项中并不包含 b
回归demo
使用朴素的constant learning rate梯度下降效果并不好,给b和w特制化两种learning rate:
b = -120
w = -4
lr = 1
iteration = 100000
b_history = [b]
w_history = [w]
lr_b=0
lr_w=0
import time
start = time.time()
for i in range(iteration):
b_grad=0.0
w_grad=0.0
for n in range(len(x_data)):
b_grad=b_grad-2.0*(y_data[n]-n-w*x_data[n])*1.0
w_grad=w_grad-2.0*(y_data[n]-n-w*x_data[n])*x_data[n]
lr_b=lr_b+b_grad**2
lr_w=lr_w+w_grad**2
b -= lr/np.sqrt(lr_b) * b_grad
w -= lr /np.sqrt(lr_w) * w_grad
b_history.append(b)
w_history.append(w)
import matplotlib.pyplot as plt
plt.contourf(x, y, Z, 50, alpha=0.5, cmap=plt.get_cmap('jet'))
plt.plot([-188.4], [2.67], 'x', ms=12, mew=3, color="orange")
plt.plot(b_history, w_history, 'o-', ms=3, lw=1.5, color='black')
plt.xlim(-200, -100)
plt.ylim(-5, 5)
plt.xlabel(r'$b$')
plt.ylabel(r'$w$')
plt.title("线性回归")
plt.show()
运行结果:
另附Datawhale组队学习—李宏毅机器学习任务安排
|