机器学习D6——线性回归

  • 回归问题的判定
    • 目标值是连续的值,而分类问题的目标值是离散型的值。
  • 回归处理的问题为预测:
    • 预测房价
    • 销售额的预测
    • 设定贷款额度
    • 总结:上述案例中,可以根据事物的相关特征预测出对应的结果值
  • 线性回归在生活中的映射:生活案例【预测学生的期末成绩】:
    • 期末成绩的制定:0.7考试成绩+0.3平时成绩,则该例子中,特征值为考试成绩和平时成绩,目标值为总成绩。从此案例中大概可以感受到:
      • 回归算法预测出来的结果其实就是经过相关的算法计算出来的结果值!
      • 每一个特征需要有一个权重的占比,这个权重的占比明确后,则就可以得到最终的计算结果,也就是获得了最终的预测的结果了
      • 那么这个权重如何获取或者如何指定呢
  • 首先画出数据的散点图,看散点有什么趋势。
    -
    • 可以很明显的看出是一次线性关系
  • 线性回归的作用
    • 就是找出特征和目标之间存在的某种趋势!!!在二维平面中,该种趋势可以用一条线段来表示。
  • 该种趋势使用线性方程来表示
    • 在数学中,线性方程y=w*x+b可以表示唯一的一条直线,使用已有数据,找出w权重和b偏置,即可得到房价与面积的预测方程,将要预测的面积代入预测方程,即可得到房价的预测值。

在这里插入图片描述

  • 用矩阵的方式来表示线性方程组

    • Y=XWT
  • W*WT = W

  • 问题:真实结果和预测结果是否会存在误差?

    • 如果房价预测案例中,特征与目标之间的分布规律不是线性的,那是否还可以使用一条直线表示特征和目标之间的趋势呢?
      • 可以,只要保证直线距离所有的散点距离最近,则该直线还是可以在一定程度上表示非线性分布散点之间的分布规律。但是该规律会存在误差!
    • 在多数的预测中都会和真实值存在一定的误差!
  • 误差存在,那我们如何处理误差呢?在处理误差之前,我们必须要知道一个回归算法的特性:

    • 回归算法是一个迭代算法,所谓的迭代没就好比是系统的版本迭代,迭代后的系统要比迭代签的系统更好。
      • 当开始训练线性回归模型的时候,是逐步的将样本数据代入模型对其进行训练的。
      • 训练开始时先用部分的样本数据训练模型,生成一组w和b,对应的直线和数据对应的散点的误差比较大,通过不断地代入样本数据训练的模型会逐步的迭代不好的(误差较大的)w和b从而使得w和b的值更加的准确。
    • 官方解释:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或者结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
  • 误差处理的方法

    • 通俗点来说,回归算法就是在不断的自身迭代的过程中减小误差来使得回归算法的预测结果可以越发的逼近真实结果。
  • 如何不断的迭代减小误差?

    • 通过【损失函数】来表示误差(残差平方和)
      在这里插入图片描述
  • SSE和RSS

    • 在L2范式上开平方,就是我们的损失函数。我们往往称呼式子为SSE(Sum of Sqaured Error,误差平方和)或者RSS(Residual Sum of Squares,残差平方和)。
  • 最小二乘法

    • 现在的问题传唤成了求解让RSS最小化的参数向量w,这种通过最小化真实值和预测值之间的RSS来求解参数的方法叫做最小二乘法
    • 求解极值(最小值)的第一步往往是求解一阶导数并让一阶导数为0,最小二乘法也是这样。因此,我们现在在残差平方和的RSS上对参数向量w求导。
  • 首先w表示的是一个列向量(矩阵),我们并非是对常数求导,而是对列向量(矩阵)进行求导。

  • API

    • 最小二乘(正规方程):from sklearn.linear_model import LinearRegression
  • 最小二乘法

参数 含义
fit_intercept 布尔值,可以不填,默认为true;是否计算此模型的截距。如果设为False,则不会计算截距。
normalize 布尔值,可以不填,默认为False;当fit_intercept设置为False时,将忽略此参数。如果为True,则特征矩阵X在进入回归之前将会被减去均值(中心化)并除以L2范式(缩放)。如果你希望进行标准化,请在fit数据之前使用preprocessing模块中的标准化专用类StandardScaler
copy_X 布尔值,可以不填,默认为True;如果为真,将在X.copy()上进行操作,否则的话原本的特征矩阵X可能被线性回归影响并覆盖
n_jobs 整数或者None,可以不填,默认为None;用于计算的作业数。只在多变迁的回归和数据量足够大的时候才生效。除非None在用于计算的作业数。只在多标签的回归和数据量足够大的时候才生效。除非None在joblib.parallel_backend上下文中,否则None统一表示为1.如果输入-1,则表示使用全部的CPU来进行计算。
  • 这些参数没有一个是必填的,更没有对我们的数据有不可替代作用的参数。这说明,线性回归的性能,往往取决于数据本身,而并非是我们的调参能力,线性回归也因此对数据有着很高的要求。
  • 但现实生活中的大部分连续型变量之间,都或多或少的存在着线性关系,所以线性回归虽然简单,却很强大。
  • sklearn中的线性回归可以处理多标签问题,只需要在fit的时候输入多维度标签就可以了。
  • feature = fch().data #特征就是X就是数据集中的数据
  • target = fch().target #目标就是Y就是要预测的值
    -在这里插入图片描述

回归模型的评价指标

  • 回归类算法的模型评估一直都是回归算法中的一个难点,回归类与分类型算法的模型评估其实是相似的法则——找真实标签和预测值的差异。只不过在分类型算法中,这个差异只有一种角度来评判,那就是否预测到了正确的分类,而在我们的回归类算法中,我们有两种不同的角度来看待回归的效果:

  • 第一,我们是否预测到了正确或者接近正确的数值(因为误差的存在)

  • 第二,我们是否拟合到了足够的信息。(是否模型预测的结果线性和样本真实的结果线性更加吻合)

    • 这两种角度,分别对应着不同的模型评估指标。
  • 均方误差MSE(mean squared error)来衡量我们的预测值和真实值的差异:就是残差平方和除以数据量。

  • 均方误差,本质上就是在RSS的基础上除以样本总量,得到了每个样本量上的平均误差。有了平均误差,我们就可以将平均误差和我们的标签的取值范围(最大值和最小值)在一起进行比较,以此来获得一个较为可靠的评估依据(查看这个错误有多严重)。

    • 因为标签的最大值和最小值可以表示标签的一个分布情况,那么将其最大值和最小值的平均误差比较就可以大概看出在每个样本上的误差或者错误有多严重。
  • 在sklearn 中,我们有两种方式调用这个评估指标:

    • 一种是使用sklearn专用的模型评估模块metrics里面的类mean_squared_error
    • 另一种是调用交叉验证的类cross_val_score并使用里面的scoring参数来设置为:neg_mean_squared_error使用均方误差。
      在这里插入图片描述
      在这里插入图片描述
  • 交叉验证求得均方差为负值

    • 均方误差本身也是一种误差,所以被sklearn划分为模型的一种损失(loss)。在sklearn中,所有的损失都使用负数来表示,因此均方误差也就被显示为负数了。真正的均方误差MSE其实就是neg_mean_squared_error去掉符号的数字。
  • 绝对值均值误差MAE(mean absolute error)就是预测值减实际值的绝对值的均值

    • 其表达的概念与均方误差完全一致,选用其中一个就可以了
    • 在sklearn中,使用命令
      • from sklearn.metrics import mean_absolute_error来调用MAE
    • 同时也可以使用交叉验证中的
      • scoring = “neg_mean_absolute_error”,以此在交叉验证中调用MAE.

是否拟合了足够的信息

  • 对于回归类算法而言,只探索数据预测是否准确是不够的。除了数据本身的数值大小之外,我们还希望我们的模型能够捕捉到数据的“规律”,比如数据的分布规律(抛物线),单调性等等。而是否捕获到这些信息是无法使用MSE来衡量的。
  • 方差越大,代表数据上的信息量越多,而这个信息量不仅包含了数值的大小,还包含了我们希望模型捕捉的那些规律。为了衡量模型对数据上的信息的捕捉,我们定义了R2来表示
    在这里插入图片描述
    • 分母就是方差。在R2中,分子是真实值与预测值之差的差值,也就是我们模型没有捕获到的信息总量,分母是真实标签所带的信息量,所以其衡量的是1 - 我们的模型没有捕获到的信息量占真实标签中所带的信息量的比例,所以R2越接近1越好。
    • 可以使用三种方式来调用
      • 一种是直接从metrics中导入r2_score,输入预测值和真实值后打分。
      • 第二种是直接从线性回归LinearRegression的接口score来进行调用。
      • 第三中是在交叉验证中,输入“r2”来调用。
        在这里插入图片描述
  • 绘制拟合图
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44350337/article/details/115212747
d6