前言
最近看了李航老师的《统计学习方法》,还正在学习吴恩达老师的《机器学习》的课程(网易公开课上有,较老的版本)。自从看过《统计学习方法》之后,发现笔记不看其实学习效果并不好。因此想以电子版格式写下来记录,一方面加深自己的印象,一方面也是希望能够和大家交流。
此版本大致与吴恩达老师的《机器学习》课程一致,因为是结合他的课程以及我之前的《统计学习方法》笔记来写的这一系列文章。
以下观点均是本人在学习过程当中的总结,如有疑问或者问题,欢迎大家批评指正,本人万分感谢。
愿大家共同进步!
线性回归(Linear Regression)
At first, I wanna show what is linear regression?
Secondly, what is the differences between regression and fitting?
什么是线性回归?回合和拟合的关系?
- 拟合和回归的关系
回归是拟合的一种,拟合是个大概念,除了回归还包括插值等等方法,参考于博客。 - 线性回归
线性回归的历史来源我也不知道,只是高中的时候大概就知道回归这个概念,老师说一群散点,可以大致画出一条线来表示变量之间的线性关系,使得每个点与线上的值的残差平方和最小,也就是说是最小二乘方法来拟合散点了,这就是我们说的回归的一种形式。
强调一点,线性回归是用来做回归的,这里强调是想让大家记住回归和分类有区别的,线性回归是用来做回归,而不是分类。
学着学着就发现不可逃脱的要写线性回归、逻辑回归、回归、分类,会单独拎出来写一篇文章。
用数据来说一下线性回归用来回归的情况吧,首先画张图:

图1 随机数据集
这个是随机生成的15个点,其对应数据格式为(x,y),这里的y是指label,x是代码中的data。
import numpy as np
data= np.random.random((15,1))
label = np.random.random((15,1))
这样就随机生成了一组数据,如图1所示。
接下来我们就是要去拟合这些点,大致结果如下:

图2 线性回归
为什么要用一根线来拟合呢?
因为我们做的是线性回归,线性指的是 x x 与之间是存在线性关系的,我们做线性回归的目的是为了拟合这种线性关系。以数学公式说明,我们假设 y=wTx y = w T x , w w 是系数,最简单的,此时 w w 是一个一维向量,复杂的时候,是一个 n n 维向量。这里为了画图,我使得呈现最简单的类似于 y=3x y = 3 x 这种关系。
How do I get this result?
#使用线性回归拟合这些点
from sklearn import linear_model
from sklearn.metrics import mean_squared_error,r2_score
reg = linear_model.LinearRegression()
reg.fit(data,label)
y_pre = reg.predict(data)
这里我用了scikit-learn中的linear_model去拟合这些点,我们且不看效果如何,那么这里是怎么得到中间那条线的呢?
参照scikit-learn中linear_model中的官方文档中的介绍,我们可以知道,这里拟合采用的最小二乘算法。
也就是说,我们的目标函数如下:

最小二乘的目标函数
上述摘自scikit-learn官方文档。
So,Why should we minimize the residual sum of squares?
为什么是最小二乘呢?
为什么线性回归要使用最小二乘?
这里参照吴恩达老师的课程当中的讲授,简要说一下。
我们进行线性回归(或者说线性拟合)时,我们往往认为因变量和自变量之间呈现某种线性关系,形象的说,如下所示:

线性关系
上述摘自scikit-learn官方文档。
一般化的:
y=wTx+ε y = w T x + ε , where ε ε is the risidual. ε ε 是残差。
假设 ε ε 符合正态分布 N(0,σ2) N ( 0 , σ 2 ) ,结果可得:
p(yi|xi;w)=e−(yi−wTxi)2σ22π√σ p ( y i | x i ; w ) = e − ( y i − w T x i ) 2 σ 2 2 π σ
采用极大似然函数估计,极大似然函数为:
L(w)=∏ni=1p(yi|xi;w) L ( w ) = ∏ i = 1 n p ( y i | x i ; w )
最后对数,求极值(即极大似然法的求解步骤),可得极大似然等价于最小二乘法。