Liner Regression
目录
1、什么是线性回归
2、能够解决什么样的问题
3、一般表达式是什么
4、如何计算
5、过拟合、欠拟合如何解决
5.1 什么是L2正则化(岭回归)
5.2 什么场景下用L2正则化
5.3 什么是L1正则化(Lasso回归)
5.4 什么场景下使用L1正则化
5.5 什么是ElasticNet回归
5.6 ElasticNet回归的使用场景
6、线性回归要求因变量服从正态分布?
7、代码实现
1.什么是线性回归
- 线性:两个变量之间的关系是一次函数关系的——图象是直线,叫做线性。
- 非线性:两个变量之间的关系不是一次函数关系的——图象不是直线,叫做非线性。
- 回归:人们在测量事物的时候因为客观条件所限,求得的都是测量值,而不是事物真实的值,为了能够得到真实值,无限次的进行测量,最后通过这些测量数据计算回归到真实值,这就是回归的由来。
- 综合一下 回归 就是找到一个函数 function,通过输入特征 x ,输出一个数值 Scalar
2. 能够解决什么样的问题
对大量的观测数据进行处理,从而得到比较符合事物内部规律的数学表达式。也就是说寻找到数据与数据之间的规律所在,从而就可以模拟出结果,也就是对结果进行预测。解决的就是通过已知的数据得到未知的结果。
例如:
1. 对房价的预测、判断信用评价、电影票房预估等。
2. 对于道路交通,输入道路情况,输出方向盘应该旋转的角度;
3. 对于天气预测,输入过去几天的天气情况,输出明天的温度或者湿度等;
3. 一般表达式是什么
w叫做x的系数,b叫做偏置项。
4. 如何计算
Framework(框架)
A set of function + training data → goodness of function → pick the best function
Loss Function--MSE
利用梯度下降法找到最小值点,也就是最小误差,最后把 w 和 b 给求出来。
以神奇宝贝的进化后的cp值预测为例
step1:Model(建立一个模型)——线性模型
y = b + w*x ,
其中
x 为输入量,即进化前的cp值(先以此为例,后面再加其他因素)
y 为输出量,即进化后的cp值
step2:Goodness of function(确定评价函数)——损失函数
Training data:This is real data (x1,y1) (x2,y2) (x3,y3) (x4,y4)……(x10,y10)
我们需要衡量我们建立的model的好坏,我们使用实际进化后的CP值与模型预测的CP值的差值来判断建立的模型的好坏程度。
也就是Loss function,L(f)=L(w, b)是和w,b有关的函数,L(f)越小,说明我们建立的model越好。
L(w,b) = ∑ ( yn - f (xn) )^2 —— real output与model output的方差
也可以写成 L(w,b) = ∑ ( yn - ( b + w * xn ) )^2
step3:Best function ——梯度下降法
目的:找到一个最合适的参数w,b 使得Loss function的值最小,即误差最小
方法:Gradient Descent(梯度下降法),实际就是求微分。
如何实施:
Gradient Descent(梯度下降) → if only one parameter → w = arg min L(w)
1 (Randomly) Pick an initial value w0 1 随机选其一个初始值w0
2 Compute 𝑑𝐿/𝑑𝑤 |𝑤=𝑤0 → w1 = w0 -η*𝑑𝐿/𝑑𝑤 |𝑤=𝑤0 2 计算Loss function在w0的微分
(η is called “learning rate”) 如果微分为负,则往前继续运算;
3 Compute 𝑑𝐿/𝑑𝑤 |𝑤=𝑤0 → w2 = w1 -η*𝑑𝐿/𝑑𝑤 |𝑤=𝑤1 如果微分为正,则往后继续运算;
4 Many iteration(多次迭代) 3 重复以上步骤,直至找到最低点停止。
Gradient Descent → how about two parameters→ w* , b* = arg min L(w , b)
1 (Randomly) Pick an initial value w0, b0
2 Compute 𝑑𝐿/𝑑𝑤 |𝑤=𝑤0 → w1 = w0 -η*𝜕𝐿/𝜕𝑤 |𝑤=𝑤0 (偏微分)
Compute 𝑑𝐿/𝑑b |b=b0 → b1 = b0 -η*𝜕𝐿/𝜕b |b=b0
3 Compute 𝑑𝐿/𝑑𝑤 |𝑤=𝑤1 → w2 = w1 -η*𝜕𝐿/𝜕𝑤 |𝑤=𝑤1 (偏微分)
Compute 𝑑𝐿/𝑑b |b=b1 → b2 = b1 -η*𝜕𝐿/𝜕b |b=b1
4 [ 𝜕𝐿/𝜕𝑤; 𝜕𝐿/𝜕b] | gradient
5 𝜕𝐿/𝜕𝑤 = 𝜕𝐿𝜕𝑏 =
如果是两个变量,w,b,就求偏微分,过程和一个变量相同,最终找到使得Loss function最小的w*,b*。
总结:至此Gradient Descent就已经完成了,Regression也就完成了。但是存在一些问题,也就是可能找到的结果只是局部最优解。
5. 过拟合、欠拟合如何解决
使用正则化项,也就是给loss function加上一个参数项,正则化项有L1正则化、L2正则化、ElasticNet。加入这个正则化项好处:
- 控制参数幅度,不让模型“无法无天”。
- 限制参数搜索空间
- 解决欠拟合与过拟合的问题。
5.1 什么是L2正则化(岭回归)
方程:
表示上面的 loss function ,在loss function的基础上加入w参数的平方和乘以 ,假设:
回忆以前学过的单位元的方程:
正和L2正则化项一样,此时我们的任务变成在L约束下求出J取最小值的解。求解J0的过程可以画出等值线。同时L2正则化的函数L也可以在w1w2的二维平面上画出来。如下图:
L表示为图中的黑色圆形,随着梯度下降法的不断逼近,与圆第一次产生交点,而这个交点很难出现在坐标轴上。这就说明了L2正则化不容易得到稀疏矩阵,同时为了求出损失函数的最小值,使得w1和w2无限接近于0,达到防止过拟合的问题。
5.2 什么场景下用L2正则化
只要数据线性相关,用LinearRegression拟合的不是很好,需要正则化,可以考虑使用岭回归(L2), 如何输入特征的维度很高,而且是稀疏线性关系的话, 岭回归就不太合适,考虑使用Lasso回归。
5.3 什么是L1正则化(Lasso回归)
L1正则化与L2正则化的区别在于惩罚项的不同:
求解J0的过程可以画出等值线。同时L1正则化的函数也可以在w1w2的二维平面上画出来。如下图:
惩罚项表示为图中的黑色棱形,随着梯度下降法的不断逼近,与棱形第一次产生交点,而这个交点很容易出现在坐标轴上。这就说明了L1正则化容易得到稀疏矩阵。
5.4 什么场景下使用L1正则化
L1正则化(Lasso回归)可以使得一些特征的系数变小,甚至还使一些绝对值较小的系数直接变为0,从而增强模型的泛化能力 。对于高的特征数据,尤其是线性关系是稀疏的,就采用L1正则化(Lasso回归),或者是要在一堆特征里面找出主要的特征,那么L1正则化(Lasso回归)更是首选了。
5.5 什么是ElasticNet回归
ElasticNet综合了L1正则化项和L2正则化项,以下是它的公式:
5.6 ElasticNet回归的使用场景
ElasticNet在我们发现用Lasso回归太过(太多特征被稀疏为0),而岭回归也正则化的不够(回归系数衰减太慢)的时候,可以考虑使用ElasticNet回归来综合,得到比较好的结果。
6. 线性回归要求因变量服从正态分布?
我们假设线性回归的噪声服从均值为0的正态分布。 当噪声符合正态分布N(0,delta^2)时,因变量则符合正态分布N(ax(i)+b,delta^2),其中预测函数y=ax(i)+b。这个结论可以由正态分布的概率密度函数得到。也就是说当噪声符合正态分布时,其因变量必然也符合正态分布。
在用线性回归模型拟合数据之前,首先要求数据应符合或近似符合正态分布,否则得到的拟合函数不正确。
7. 代码实现