Linear Regression

本文代码,见github:

目录

一, 简单线性回归原理

1.线性回归算法的优点。

2.分类问题和回归问题的不同点(为了可视化,我们以二维为例)

3. 线性回归涉及到的几个数据概念

4.简单线性回归原理的介绍

(1)原理介绍

(2)根据上述原理,进行简单的代码实现

二. 多元线性回归

1.多元线性回归的原理及参数的求解

2.多元线性回归的实现

三. 局部加权线性回归

四. 衡量线性回归的指标

1. MSE,RMSE,MAE,R_Square, accuracy_score

2. TSS,ESS,RSS

3. 加载波士顿房价数据.对上述指标程序的实现。

五. 线性回归的复杂度惩罚因子

1. 正则项

2. 正则化与稀疏

六.总结

1.线性回归算法的特点及与KNN算法的比较

2.线性回归算法具有可解释性的说明


一, 简单线性回归原理

1.线性回归算法的优点。

    解决回归问题;

    思想简单,容易实现;

    许多强大的非线性模型的基础;

    结果具有很好的可解释性;

    蕴含机器学习中的很多重要的思想;

2.分类问题和回归问题的不同点(为了可视化,我们以二维为例)

分类问题(左图),x,y均表示特征

回归问题(右图),x表示特征,y表示标记(分类问题中标记(target)是离散值,回归问题中,target是连续值,比如:房价)。

上图中只有一个特征,称为简单的线性回归;若有两个或多个特征,需要在三维及更高的维度,称为多元线性回归。

3. 线性回归涉及到的几个数据概念

(1)高斯分布

(2)最大似然估计(Maximum Likelihood Estimation)

(3)最小二乘法

最小二乘,又称最小平方法,是一种数学优化建模方法。它通过最小化误差的平方和寻找数据的最佳函数匹配。

(4)使用极大似然估计解释最小二乘

 的解析式的求解过程

 注:求梯度的过程可参考“向量求导”章节

 

ps:小知识点——伪逆(详见math——伪逆)

4.简单线性回归原理的介绍

从非数学的角度,直观的解释一下。或者是说从工程的角度。

(1)原理介绍

(1)式不同的样本点可能会相互抵消(如上图:在红线左侧的点的真值和估计值的差值小于0,在红线左侧的点的真值和估计值的差值大于于0,最后所有样本真值和估计值的差值相加会产生抵消的情况,不能很好的知道是否预测的准确)

(2)式不是凸优化问题,存在不可导点(因为我们要计算函数最小值,最终转化为求导=0,寻求最小点)

目标:,而,所以找到a和b,使得最小。

转化为最小二乘问题最小化误差的平方

最小二乘问题的原理,推导:见另一篇博客: 一些基本 的数学知识 2.最小二乘问题

这样我们就可以拟合出一条直线来近似的表示feature和target的线性关系:即

(2)根据上述原理,进行简单的代码实现

见 SimpleLinearRegression.ipynb (github地址在本文开始)

二. 多元线性回归

1.多元线性回归的原理及参数的求解

多元线性回归,x不再是表示某个样本的一个特征,而是表示某个样本多个特征组成的向量

多元线性回归的目标函数(同简单线性回归): m 表示样本的总数

(1),即找到,使得目标函数最小。

令 为系数(coefficients), 为截距(intercept).

,其中,。

(1)   式 https://i-blog.csdnimg.cn/blog_migrate/256718d83f768c15112055ac002d29dd.png

                    https://i-blog.csdnimg.cn/blog_migrate/50d9dbb9c1ad6f5d9317e301f79633a3.png ​         

扩展到多个样本,写成矩阵的形式:

https://i-blog.csdnimg.cn/blog_migrate/4d93a0c2b5dc8c15838a3b54e2f2a578.png

 https://i-blog.csdnimg.cn/blog_migrate/26476b729ffe363ece18cf1b7e3abf39.png ​ 

https://i-blog.csdnimg.cn/blog_migrate/e75f2e90fdea7e3f3fee45752ab9c2a3.png(2)为多元线性回归的正规方程解,

但是其时间复杂度高https://i-blog.csdnimg.cn/blog_migrate/ba88b2fef1f9e3efaa4c04701359dfc2.png

2.多元线性回归的实现

见github代码

三. 局部加权线性回归

权值的设置

四. 衡量线性回归的指标

1. MSE,RMSE,MAE,R_Square, accuracy_score

Q: 在分类准确度的测量中,1表示预测性能最好,0表示预测性能最差,不论是预测鸢尾花数据的分类还是手写数字的识别都是如此,即我们可以比较不同场景下的预测准确性。

    但是在上述衡量线性回归的指标中,误差总是与预测数据的大小有关,也就是说,用上述的衡量误差方法,在用线性回归预测学生成绩和房价这两个场景中,显然是无法比较谁的预测更准确一点。即没有统一化的标准

对R_Square进一步进行分析

将R_Square 变形为我们熟悉的形式,也方便编程的实现

一般, sklearn中的score 用的就是R_square

accuracy_score

np.sum(y_true == y_predict) / len(y_true)

2. TSS,ESS,RSS

ESS(Explained Sum of Squares):https://i-blog.csdnimg.cn/blog_migrate/a12c67d64750e6e999b3202ed40e1b8c.png

TSS = ESS + RSS(只有在无偏估计时上述等式才成立,否则,TSS >= ESS + RSS)

ESS又称为回归平方和SSR(Sum of Squares for Regression)

3. 加载波士顿房价数据.对上述指标程序的实现。

具体程序见:MSE_RMSE_MAE_R2.ipynb

五. 线性回归的复杂度惩罚因子

1. 正则项

为了参数过大,不稳定,防止过拟合,加入正则项。

Ridge L2-norm

LASSO(Least Absolute Shrinkage and Selection Operator) L1-norm

其中,

L1-norm如何处理梯度?

2. 正则化与稀疏

 

六.总结

1.线性回归算法的特点及与KNN算法的比较

(1)线性回归训练示意图

(2)线性回归为典型的参数学习,找到 ,是目标函数最小。
        KNN为非参数学习

(3)线性回归只能解决回归问题,但是在很多分类方法中,新性回归是基础,比如逻辑回归(需后续学习)

         KNN既可以解决分类问题,又可以解决回归问题。但在预测波士顿房价时,线性回归的性能更好一些。

(4)线性回归算法对数据有假设:线性

        而KNN算法对数据没有假设

(5)多元线性回归的正规方程解的计算复杂度高,

(6)线性回归算法对数据具有很强的可解释性,进而可以挖掘出新的有价值的数据,而KNN算法没有这个优点。

2.线性回归算法具有可解释性的说明

注:蓝色的表示out(输出)

from sklearn import datasets

from sklearn.linear_model import LinearRegression
import numpy as np
boston = datasets.load_boston()
X = boston.data
y = boston.target
X = X[y<50]
y = y[y<50]
X.shape
    (490, 13)
y.shape
    (490,)
#由于我们现在不做预测,所以不需要将数据集分成训练数据集和测试数据集
linReg = LinearRegression()
linReg.fit(X,y)  #coef_  intercept_
coef = linReg.coef_
coef

    array([-1.05574295e-01,  3.52748549e-02, -4.35179251e-02,  4.55405227e-01,
           -1.24268073e+01,  3.75411229e+00, -2.36116881e-02, -1.21088069e+00,
            2.50740082e-01, -1.37702943e-02, -8.38888137e-01,  7.93577159e-03,
           -3.50952134e-01])


boston.keys()
    dict_keys(['data', 'target', 'feature_names', 'DESCR'])

featureNames = boston.feature_names

featureNames

    array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',
           'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7')


# 根据我们拟合出来的系数,看一下哪写特征对房价的影响较大,
#某特征前面的系数越大,表明该特征对房价的影响因素越大
featureNames[np.argsort(coef)] #默认为从小到大

    array(['NOX', 'DIS', 'PTRATIO', 'LSTAT', 'CRIM', 'INDUS', 'AGE', 'TAX',
           'B', 'ZN', 'RAD', 'CHAS', 'RM'], dtype='<U7')


boston.DESCR
# 正相关系数比较大的
# - RM       average number of rooms per dwelling  数据挖掘:房屋的面积?
# - CHAS     Charles River dummy variable (= 1 if tract bounds river; 0 otherwise) 数据挖掘:附近是否有公园?


#负相关系数比较大的
# - NOX      nitric oxides concentration (parts per 10 million) 数据挖掘:附件污染常矿的数量?
# - DIS      weighted distances to five Boston employment centres 数据挖掘:到商业中心/产业区的距离?
# 可以看到这些结果与我们现实生活中的现象是一致的,同时也可以挖掘出新的数据特征。
# 通过搜集我们挖掘到的特征,再进行预测,或许可以进一步的提高预测的准确性。

代码:详见LinearRegression_Explanation.ipynb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值