fuli2020

2020-08-20   阅读量: 790

机器学习——线性回归

扫码加入数据分析学习群

回归分析属于有监督学习算法,回归问题最终输出的是连续变量。

线性回归的机器学习表示方法

  1. 核心逻辑

    在给定n个属性描绘的客观事物x=(x1,x2,x3,...,xp)中,每个xi都用于描绘某一次观测时事物在某个维度表现出来的数值属性值。当我们在建立机器学习模型捕捉事物运行的客观规律时,本质是希望能够综合这些维度的属性值来描绘事物最终运行结果,而最简答的综合这些属性的方法就是对其加权求和汇总,这就是线性回归的方程式表达形式:

    图片.png


  2. 优化目标

    对于单元或多元的线性回归而言,预测函数可以写成图片.png,在机器学习我们也称作“决策函数”。其中只有w是未知的,所以线性回归的原理核心就是找出模型的参数向量w。我们使用“损失函数”这个评估指标,来衡量系数为w的模型拟合训练集时产生的信息损失的大小,并以此衡量参数w的优劣。



关键概念:损失函数

衡量参数w的优劣的评估指标,用来求解最优参数的工具

损失函数小,模型在训练集上表现优异,拟合充分,参数优秀

损失函数大,模型在训练集上表现差劲,拟合不足,参数糟糕

我们追求,能够让损失函数最小化的参数组合

注意:对于非参数模型没有损失函数,比如KNN、决策树


对于连续型变量而言,邻近度度量方法可采用SSE来进行计算,SSE称作【残差平方和】,也称作【误差平方和】或者【离差平方和】,我们的优化目标可用下述方程来表示:

图片.png


最小二乘法:这种通过最小化真实值和预测值之间的SSE来求解参数的方法叫做最小二乘法。


根据偏导求得:

图片.png 图片.png


此时,使得SSE最小的量图片.png称为总体参数w0,w1的最小二乘估计值,预测方程图片.png称为最小二乘直线。


通过矩阵求导,w向量求解 图片.png 在这里,逆矩阵存在的充分必要条件是特征矩阵不存在多重共线性。



回归算法评估指标

回归算法评估指标体系,首先是残差平方和SSE,其计算公式如下所示:

图片.png

其中m为数据集记录数,yi为实际标签值,图片.png为预测值。


在回归算法中,为了消除数据集规模对残差平方和的影响,我们还会计算平均残差MSE:

图片.png


在回归分析中,SSR表示聚类中类似的组间平方和概念,有预测数据与标签均值之间的差值的平方和构成

图片.png


而SST则是实际值和均值之间的差值的平方和:

图片.png


判定系数R2

图片.png


若所有观测点都落在直线上,残差平方和为SSE=0,则R2=1,拟合是完全的;

如果y的变化与x无关,x完全无助于解释y的变差,图片.png

可见R2的取值范围是[0,1]

R2越接近1,表明回归平方和占总平方和的比例越大,回归直线与各观测点越接近,用x的变化来解释y值变差(y取值的波动称为变差)的部分就越多,回归直线的拟合程度就越好;

反之,R2越接近0,回归直线的拟合程度就越差


线性回归的Scikit-learn 实现

接下来尝试利用scikit-learn算法库实现线性回归算法


from sklearn.linear_model import LinearRegression


reg=LinearRegression()

reg.fit(data.iloc[:,:-1].values,data.iloc[:,-1].values)

reg.coef_ #查看方程系数

reg.intercept_ #查看截距


计算模型MSE和判断系数

from sklearn.metrics import mean_squared_error,r2_score


yhat=reg.predict(data.iloc[:,:-1])

mean_squared_error(y,yhat)

r2_score(y,yhat)



多重共线性

重要定义:满轶矩阵

满轶矩阵:A是一个n行n列的矩阵,若A转换为梯形矩阵后,没有任何全为0的行或者全为0的列,则称A为满轶矩阵。简单来说,只要对角线上没有一个元素为0,则这个矩阵中绝对不可能存在全为0的行或列。一个矩阵如果要满轶,则要求矩阵中每个向量之间不存在多重共线性。


岭回归

岭回归基本原理

岭回归就是在原方程系数计算公式中添加了一个扰动项图片.png,原先无法求出广义逆的情况变成可以求出其广义逆,使得问题得以求解,其中λ是自定义参数,I则是单位矩阵。


岭回归的损失函数:

图片.png


使用最小二乘法求解可得:

图片.png


sklearn 当中ridge的实现:


from sklearn.linear_model import Ridge


ridge=Ridge(alpha=0.2)

ridge.fit(aba.iloc[:,:-1],aba.iloc[:,-1])

ridge.coef_ #查看系数

ridge.intercept_ #查看截距


Lasso 回归

Lasso回归基本原理

在岭回归中,对自变量系数进行平方和处理也被称作L2正则化,由于此原因,岭回归中自变量系数虽然会很快衰减,但很难归为零,且存在共线性的时候衰减过程也并非严格递减,这就是为何岭回归能够建模、判断共线性,但很难进行变量筛选的原因。Lasso算法将岭回归的损失函数中的自变量系数L2正则化为L1正则化,即Lasso回归损失函数为:

图片.png


lasso算法sklearn中的实现

from sklearn.linear_model import Lasso

las=Lasso(alpha=0.01)

las.fit(aba.iloc[:,:-1],aba.iloc[:,-1])

las.coef_

las.intercept_

不同于岭回归,Lasso算法的处理结果中自变量系数会更加倾向于迅速递减为0,因此Lasso算法在自变量选择方面要优于岭回归。


总结:

1. 对于Rdige和Lasso来说,增大惩罚λ ,都是对参数值的⼀个惩罚越大,参数越趋近于0
2. Ridge的惩罚力度不大,⼀个很大的λ值会使得参数值很小,但是都是趋近于0,而不是等于0
3. Lasso的惩罚力度大,⼀个很大的 λ值会直接将某一些不重要的参数值变成0




添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
36.1350 3 0 关注作者 收藏

评论(0)


暂无数据

推荐课程