哇!耽搁了两天,今天来把第一篇正儿八经的机器学习的算法博客补上,其实我也是在校学生一枚,看了很多算法和别人的总结,写了很多笔记。所以现在想试着把自己之前整理过的笔记和思考之后的注意点写下来,如果有问题欢迎给我指出来哦~
1.什么是线性回归
对于所有接触机器学习的小伙伴来说,几乎都被安利过大神吴恩达的机器学习入门视频,而课程讲的第一个机器学习算法就是线性回归。实际上,线性回归属于监督学习的内容,监督学习分为分类和回归两部分;而线性回归又是回归内容中基础又经典的部分。
机器学习的实质说白了就是通过数据之间的关系找出某种映射
f:X→y
。而针对线性回归来说就是假定X与y之间有线性相关关系。(注意,一定是线性相关关系,和多项式关系区分开啊!)
回归的最明显特征就是输出的结果
yi
为连续变量(这个连续变量一般都是浮点数,但是有的也是整数哦)。而线性回归的经典原型是:
而向量形式表示为:
但是我们必须明确的一点是, θ⃗ 的取值是有很多种的,也就是说没有限定条件下是不确定的,那么这个时候我们想要找出最佳的模型则需要通过损失来帮忙。
2.线性回归的损失函数
损失函数(有时也被成为代价函数),是我们寻找最佳模型的一种依据。在线性回归这里,对应的就是找出最符合数据的权重参数 θ⃗ ,即 [θ0,θ1,...,θn]T 。针对线性回归,损失函数一般谁用均方差MSE,即:
其中,m代表样本个数,前面的 12m 是为了求导方便,不影响最后的计算结果的。
实际上,这个就是预测值和实际值的距离的平方的均值,为什么选用这个为损失函数呢?一反面是能正常的反应预测值和实际值的差距,更重要的一点是这个函数是凸函数!(感觉找出了凸函数就等于找到了家一样,各种安全有木有~~)
而通过损失函数求解我们的最优权重参数一般有两个思路:最小二乘法 和 迭代法
先来说最小二乘法,使用最小二乘法是线性回归特有的,可以一步到位直接解出参数的,具体过程就先不写啦,直接给出参数的解:
接下来是使用迭代法,而迭代法就有大家都很熟悉的梯度下降法、牛顿法、拟牛顿法等。迭代法是通过一步一步的不断优化更新权重参数,使其最后达到最优解的(因为我们的损失函数是凸函数,所以是全局最优解)。我们以梯度下降法为例,通过对损失函数求偏导并令其为零可以得到需要更新的部分,如下:
其中,α是学习率(也叫步长),是超参数,在训练模型的时候需要手动调整的参数。不宜太大,也不宜太小。
实际中,我们一般不会真的计算到准确的最小值点的位置,所以迭代次数一般会设限制以防止机器运行的太久。而且针对α,在实际工程中会调用一些包进行自适应处理,也就是说,α一般会自己进行调整,不会固定不变的。
针对线性回归的损失函数一般使用的是梯度下降,实际上牛顿法和拟牛顿法也可以。牛顿法在小数据量级上速度会很快,但是当数据量非常大的时候,对内存的耗用会很严重,所以可能会采用BFGS或者L-BFGS。而这个时候还会出现能否并行计算的问题,就算可以进行并行计算 ,那么计算速度也会下降。
3.过拟合与欠拟合
欠拟合比较好理解,主要就是模型学习的不到位,数据本身该有的特性没学到导致的模型性能不好,这个问题也比较好解决。一般通过提高数据量就能解决。
过拟合问题是我们在机器学习当中考虑最多的一个问题。何之谓过拟合?通俗点讲也就是说,如果我们有特别多的特征,那么我们假设的函数可以对训练数据拟合的非常好,即
J(θ1,θ2,...,θn)=12m∑i=1m(hθ(x⃗ (i))−y(i))2≈0
,但是这样的话会丧失一般性,从而导致对新给的预测样本会预测的非常差。(其实也就是说把不应该学习的也学习来了,这样的话对于带预测样本来说就是噪声了)。为了解决过拟合问题,在损失函数中引入了正则化。我们常用的正则化一般是L1正则化和L2正则化。而线性回归因为引入的正则化项不同,从而出现了Ridge回归、Lasso回归以及ElasticNet回归。(这三只放在后面单独总结)
那么,为什么引入正则化项就能防止过拟合呢?其实主要原理就是通过引入权重参数来限制模型的复杂度,在李航的《统计学习方法》中称为降低结构风险,而结构风险小的模型一般泛化能力都是较好的。关于三种回归之间的差别和风险降低的原理之后再说哦!
4.多项式回归
最开始学线性回归的时候我也出现过把多项式回归当做线性回归的情况。。。多项式回归的假设函数假设为:
此时就不再是线性回归,而是多项式回归。其实看这个很像是特征的映射。但是如果我们令 x0=1,x1=x1,x2=x2,x3=x21,x4=x22,x5=x1x2 .这个时候我们可以重新得到:
相当于又变回了线性回归。但是注意到,最开始我们是二元维度,而现在变成了5元维度。也就是通过升维换区到了线性。(其实有点像SVM的核函数将低维空间变为高维空间)
第一次来写算法类的博客,感觉写的不是很流畅,而且有的部分不完善。等我之后慢慢改进啊。不过,今天第一次用LaTeX来编辑博客,感觉非常不错。嗯,好好努力写博客~~