回归分析属于有监督学习算法,回归问题最终输出的是连续变量。
线性回归的机器学习表示方法
核心逻辑
在给定n个属性描绘的客观事物x=(x1,x2,x3,...,xp)中,每个xi都用于描绘某一次观测时事物在某个维度表现出来的数值属性值。当我们在建立机器学习模型捕捉事物运行的客观规律时,本质是希望能够综合这些维度的属性值来描绘事物最终运行结果,而最简答的综合这些属性的方法就是对其加权求和汇总,这就是线性回归的方程式表达形式:
优化目标
对于单元或多元的线性回归而言,预测函数可以写成,在机器学习我们也称作“决策函数”。其中只有w是未知的,所以线性回归的原理核心就是找出模型的参数向量w。我们使用“损失函数”这个评估指标,来衡量系数为w的模型拟合训练集时产生的信息损失的大小,并以此衡量参数w的优劣。
关键概念:损失函数
衡量参数w的优劣的评估指标,用来求解最优参数的工具
损失函数小,模型在训练集上表现优异,拟合充分,参数优秀
损失函数大,模型在训练集上表现差劲,拟合不足,参数糟糕
我们追求,能够让损失函数最小化的参数组合
注意:对于非参数模型没有损失函数,比如KNN、决策树
对于连续型变量而言,邻近度度量方法可采用SSE来进行计算,SSE称作【残差平方和】,也称作【误差平方和】或者【离差平方和】,我们的优化目标可用下述方程来表示:
最小二乘法:这种通过最小化真实值和预测值之间的SSE来求解参数的方法叫做最小二乘法。
根据偏导求得:
此时,使得SSE最小的量称为总体参数w0,w1的最小二乘估计值,预测方程称为最小二乘直线。
通过矩阵求导,w向量求解 在这里,逆矩阵存在的充分必要条件是特征矩阵不存在多重共线性。
回归算法评估指标
回归算法评估指标体系,首先是残差平方和SSE,其计算公式如下所示:
其中m为数据集记录数,yi为实际标签值,为预测值。
在回归算法中,为了消除数据集规模对残差平方和的影响,我们还会计算平均残差MSE:
在回归分析中,SSR表示聚类中类似的组间平方和概念,有预测数据与标签均值之间的差值的平方和构成
而SST则是实际值和均值之间的差值的平方和:
判定系数R2
若所有观测点都落在直线上,残差平方和为SSE=0,则R2=1,拟合是完全的;
如果y的变化与x无关,x完全无助于解释y的变差,
可见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的行或列。一个矩阵如果要满轶,则要求矩阵中每个向量之间不存在多重共线性。
岭回归
岭回归基本原理
岭回归就是在原方程系数计算公式中添加了一个扰动项,原先无法求出广义逆的情况变成可以求出其广义逆,使得问题得以求解,其中λ是自定义参数,I则是单位矩阵。
岭回归的损失函数:
使用最小二乘法求解可得:
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回归损失函数为:
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
暂无数据