我认为自己学习到的线性回归非常简单:
- 输入数据(X,y)。
y 是 X 的标签,X 是 m ∗ {*} ∗ n 的矩阵,m 表示 X 的样本数量,n 是每个样本的特征的数量。
有时候为了方便处理,X 是 (n, m) 的矩阵。 - 初始化 θ {\theta} θ 值,指定假设函数 h θ {h_\theta} hθ。代入成本函数 J ( θ ) {J(\theta)} J(θ),成本函数梯度 ∂ J ( θ ) ∂ θ {\frac{\partial J(\theta)}{\partial \theta}} ∂θ∂J(θ)公式中
- 最小化成本函数,课程中使用的是梯度下降算法。当然还有其他优化算法。
- 将最小化成本函数后得出的最优 θ {\theta} θ 值代入假设函数中,取一新样本也代入假设函数,便可求得预测值。
逻辑回归的算法也是类似的,只将函数替换,其他的步骤没变。
但这次我想将一个完整的回归机器学习模型设计复习一下,不仅包括核心算法,也包括预处理,查找最适
α
{\alpha}
α 值,最适多项式次数也加入到其中。
- 首先将数据载入到模型中,分为 X,y
- 将数据归一化处理
- 将数据以 6:2:2 分为 训练集 (x_train, y_train)、交叉验证集 (x_cv, y_cv)、检验集 (x_test, y_test)。
这三个集作用不再陈述,有问题可以点击这篇文章:模型选择与训练集、验证集、测试集) - 使用正则化的成本函数计算 J ( θ ) {J(\theta)} J(θ)
- 使用梯度下降算法(其他优化方法也可以)最小化成本函数,得到 theta_train 。
至此,模型训练部分结束,进行下一部分,寻找模型的最优参数(学习率 α {\alpha} α, 假设函数的多项式次数…等等)
- 将 α {\alpha} α 初始化为 i = 0.01,0.03,0.1,…, 3。使用 for 循环对各个 α {\alpha} α 值计算损耗函数。本次计算使用交叉验证集数据 (x_cv, y_cv)。θ 值使用的是 theta_train
- 绘制图形,以 α {\alpha} α 为横轴, J ( θ ) {J(\theta)} J(θ) 为纵轴绘制二维曲线图。 J ( θ ) {J(\theta)} J(θ) 为最小处对应的 α {\alpha} α 即为最优 α {\alpha} α 值
- 多项式次数也是由此求得。重新进行一次计算、绘图。本次图形以多项式次数为 X 轴,
J
(
θ
)
{J(\theta)}
J(θ) 为 y 轴。
找出最小 J ( θ ) {J(\theta)} J(θ) 对应的多项式次数就可以了。
注意: 随着多项式次数增加, J ( θ ) {J(\theta)} J(θ) 会逐渐变小(这里次数指 8 次或者 9 次这样的高幂),最终趋于平缓。但是所需要的计算量每增加一个次数,就增加 x n {x^n} xn 次计算。例如 n = 9, 与 n = 10,可能 J ( θ ) {J(\theta)} J(θ) 相差不大,但是增加了一个 x 1 0 {x^10} x10 。
至此,最优参数选择完毕。接着进行所训练模型性能评定。
- 将 theta_train 代入 测试集中,计算 J t e s t ( θ ) {J_test(\theta)} Jtest(θ),绘制学习曲线,查看是否有偏差或者方差问题。
- 比较 J t r a i n ( θ ) {J_train(\theta)} Jtrain(θ) 和 J t e s t ( θ ) {J_test(\theta)} Jtest(θ),得出模型性能。
暂时就这些,仍需要补充,在进行知识总结的时候,我会对这篇文章需要的地方进行补充。