线性回归算法梳理

1. 机器学习的一些概念

有监督、无监督、泛化能力、过拟合和欠拟合(以及各自解决方法)、方差和偏差、交叉验证

1.1 有监督

监督学习,就是常说的分类。通过已有的训练样本(即已知数据以及对应的标签)去训练一个最佳模型,再利用这个模型将未知样本(没有标签的数据)的输入映射为输出(有标签了),对输出进行判断从而实现分类目的。例如,父母告诉小孩这是鸟和猫,我们所见的鸟和猫就是已知的输入数据,父母的认知(这是鸟还是猫)就是相应的输出。后来见识多了,我们脑子就会训练出一个泛化模型,会抓住一些特征总结出一些规律,当再看见其他类的鸟或者猫时,我们也能对他们进行分类。

1.2 无监督

无监督学习,与监督学习不同,样本数据类别未知(输入数据没有标签),需要根据样本间的相似性对样本集进行分类(聚类,clustering)试图使类内差距最小化,类间差距最大化。通俗点讲就是实际应用中,不少情况下无法预先知道样本的标签,也就是说没有训练样本对应的类别,因而只能从原先没有样本标签的样本集中学习分类器设计。无监督学习里典型的例子就是聚类了,聚类的目的在于把相似的东西聚在一起,而我们并不关心这一类是什么。

1.3 泛化能力

泛化能力,指用来表征学习模型对于未知数据的预测能力。例如上面提到的小孩脑子里的泛化模型,每一个小孩都有不同的泛化模型,对应的泛化能力是不一样的。

1.4 过拟合和欠拟合

1.4.1 过拟合

当一个模型过于复杂后,它可以很好的处理训练数据的每一个数据,甚至包括其中的随机噪点,而没有总结训练数据中趋势,以至于模型在新的数据上表现很差。
原因:
1)特征值过多也可能会导致过拟合,但不一定,若有相关性的特征很容易导致过拟合;
2) 参数太多,模型复杂度较高;
3) 选取的样本数据不足以代表预定的分类规则;
4) 样本噪音干扰过大。
解决方法:
1)获取和使用更多的数据(数据集增强) – 解决过拟合的根本性方法
2)特征降维:人工选择保留特征方法或特征选择
3)加入正则化
4)Dropout,因为有取平均的作用 (dropout掉不同的隐藏神经元类似于训练不同的网络,而不同的网络可能产生不过的过拟合,取平均则有可能让一些相反的过拟合互相抵消,从而可以整体上减少过拟合)
5)集成学习方法,例如随机森林等

1.4.2 欠拟合

指模型过于简单或训练样本做的不够,以至于模型没有很好地捕捉到数据特征,不能够很好地拟合数据。
原因:
1)特征量过少;
2)模型复杂度过低
解决方法:
1)添加其他新特征项(可以考虑特征组合),有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。
2)减少正则化参数,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。
3)添加多项式特征,例如将线性模型通过添加二次项或者更高项使模型泛化能力更强;
4)使用非线性模型,例如SVM,决策树,深度学习模型等

1.5 方差和偏差

Bias:误差,对象是单个模型,期望输出与真实标记的差别(可以解释为模型对本训练集的拟合程度)
Variance:方差,对象是多个模型(这里更好的解释是换同样规模的训练集,模型的拟合程度怎么样;也可以说方差是刻画数据扰动对模型的影响,描述的是训练结果的分散程度)
从同一个数据集中,用科学的采样方法得到几个不同的子训练集,用这些训练集训练得到的模型往往并不相同。

区别:
1
泛化误差、偏差、方差和模型复杂度的关系:
在这里插入图片描述
模型复杂度高->过拟合->训练误差低,泛化误差高;偏差小,方差高
模型复杂度低->欠拟合->训练误差高,泛化误差高;偏差大,方差低

1.6 交叉验证

交叉验证(cross-validation)是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set),首先用训练集对分类器进行训练,在利用验证集来测试训练得到的模型,以此来做为评价分类器的性能指标。
常见的交叉验证方法如下:
1).Hold-Out Method
将原始数据随机分为两组,一组做为训练集,一组做为验证集,利用训练集训练分类器,然后利用验证集验证模型,记录最后的分类准确率为此Hold-OutMethod下分类器的性能指标.此种方法的好处的处理简单,只需随机把原始数据分为两组即可,其实严格意义来说Hold-Out Method并不能算是CV,因为这种方法没有达到交叉的思想,由于是随机的将原始数据分组,所以最后验证集分类准确率的高低与原始数据的分组有很大的关系,所以这种方法得到的结果其实并不具有说服性.

2).K-fold Cross Validation(记为K-CV)
将原始数据分成K组(一般是均分),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型,用这K个模型最终的验证集的分类准确率的平均数作为此K-CV下分类器的性能指标.K一般大于等于2,实际操作时一般从3开始取,只有在原始数据集合数据量小的时候才会尝试取2.K-CV可以有效的避免过学习以及欠学习状态的发生,最后得到的结果也比较具有说服性.

3).Leave-One-Out Cross Validation(记为LOO-CV)
如果设原始数据有N个样本,那么LOO-CV就是N-CV,即每个样本单独作为验证集,其余的N-1个样本作为训练集,所以LOO-CV会得到N个模型,用这N个模型最终的验证集的分类准确率的平均数作为此下LOO-CV分类器的性能指标.相比于前面的K-CV,LOO-CV有两个明显的优点:
①每一回合中几乎所有的样本皆用于训练模型,因此最接近原始样本的分布,这样评估所得的结果比较可靠。
②实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。
转自:https://www.cnblogs.com/sddai/p/5696834.html

1.7 归一化/标准化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 线性回归的原理

首先解释什么是回归?例如有一个函数,我们只要往这个函数传一些参数作为输入,就能得到一个结果作为输出。简单来说输出的结果是个连续的值就是回归,如果不是连续值而是个离散值那就叫分类。
(线性不用解释了吧…)
给定一个数据集:D={(X1,Y1),(X2,Y2),…,(Xm,Ym),}
其中 Xi=(Xi1;Xi1;…;Xid)
“线性回归”(linear regression)试图学得一个线性模型以尽可能准确地预测实值输出标记。
2
所以线性回归可以被看做是样本点的最佳拟合直线。

3. 线性回归损失函数、代价函数、目标函数

  • 损失函数:计算的是一个样本的误差,用来估量在一个样本点上模型的预测值 h(x) 与真实值 y 的不一致程度。它是一个非负实值函数,通常使用 L(y, h(x)) 来表示。
  • 代价函数:是整个训练集上所有样本误差的平均。代价函数越小,就代表模型拟合的越好。但是不是越小越好呢?答案是否定的。
    3
  • 目标函数:代价函数 + 正则化项
    上文提到代价函数并不是越小越好。这里有一个概念叫风险函数(risk function)。风险函数是损失函数(代价函数)的期望,这是由于我们输入输出的(X,Y)遵循一个联合分布,但是这个联合分布是未知的,所以无法计算。但是我们是有历史数据的,就是我们的训练集,f(X)关于训练集的平均损失称作经验风险(empirical risk),所以我们的目标就是最小化经验风险。
    4
    那是不是经验风险函数越小越好,当然还是不是的。最小的经验风险函数就是对历史的数据拟合的最好嘛,这时有可能过拟合了。所以,我们不仅要让经验风险最小化,还要让结构风险最小化
    这个时候就定义了一个函数J(f),这个函数专门用来度量模型的复杂度,在机器学习中也叫正则化(regularization)。常用的有L1, L2范数。到这一步我们就可以说我们最终的优化函数是:
    5
    即最优化经验风险和结构风险,而这个函数就被称为目标函数。
    转自:https://blog.csdn.net/qq_28448117/article/details/79199835

4. 优化方法

梯度下降法(随机梯度下降法和批量梯度下降法)、牛顿法、拟牛顿法

4.1 梯度下降法

梯度下降法是最早最简单,也是最为常用的最优化方法。梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是最速下降法。由xn+1=xn− α∗f′(xn)可知,梯度下降算法是用平面拟合函数的局部曲面。
6
最速下降法越接近目标值,步长越小,前进越慢。所以在接近最优解的区域收敛速度明显变慢,利用梯度下降法求解需要很多次的迭代。

优点
  • 确保不会越过最低点(不会在局部最优点附近动荡)。原因:当你接近局部最优解的时候,很显然在局部最低时导数等于零,当接近局部最优解时,导数值(即公式的最后一部分)会变得越来越小,所以梯度下降将自动采取较小的幅度。但还要注意步长,每一步走的距离在极值点附近非常重要,如果走的步子过大,也会容易在极值点附近震荡而无法收敛。
缺点
  • 靠近极小值时收敛速度减慢。原因也是上面优点的那个原因,是优点也是缺点。

在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和小批量梯度下降法。

4.1.1 随机梯度下降

批量梯度下降法(Batch Gradient Descent,简称BGD)是梯度下降法最原始的形式,它的具体思路是在更新每一参数时都使用所有的样本来进行更新,与上面的形式一致,不再赘述。
批量梯度下降法在更新每一个参数时,需要所有的训练样本,训练过程会随着样本数量的加大而变得非常缓慢。
随机梯度下降每次更新参数时,随机选取一个样本点来更新模型参数,因此每次的学习是非常快速的,随机梯度下降最大的缺点在于每次更新可能并不会按照正确的方向进行,因此可以带来优化波动,因为是随机选取的,那么在解的空间搜索最优点比较盲目,但是最终会到达一个局部最优点,甚至全局最优点,但是更次的次数会变得很多。
优点:训练速度快(每次只更新一个样本)
缺点:准确度下降,(因为并不是全局最优点),很难并行实现

4.1.2 小批量梯度下降

小批量梯度下降考虑了批量梯度下降和随机梯度下降结合的方法,在更新速度和更新次数中保持了一个平衡,即每次更新时在样本中选取m个样本,m<n,n是全部样本数。

对每轮训练:
 
     将数据打乱
 
     对每个数据(在抽取到的m个数据中):
 
                 计算梯度,更新参数

4.2 牛顿法

4.2.1 牛顿法求根

有时候,在方程比较复杂的情况下,使用一般方法求解它的根并不容易。牛顿法通过迭代的方式和不断逼近的思想,可以近似求得方程较为准确的根。
牛顿法求根的核心思想是泰勒一阶展开。例如对于方程 f(x) = 0,我们在任意一点 x0 处,进行一阶泰勒展开:
f ( x ) = f ( x 0 ) + ( x − x 0 ) f ′ ( x 0 ) f(x)=f(x_0)+(x−x_0)f^′(x_0) f(x)=f(x0)+(xx0)f(x0)
令 f(x) = 0,带入上式,即可得到:
x = x 0 − f ( x 0 ) f ′ ( x 0 ) x=x_0− {f(x_0) \over f^′(x_0)} x=x0f(x0)f(x0)
注意,这里使用了近似,得到的 x 并不是方程的根,只是近似解。但是,x 比 x0 更接近于方程的根。然后,利用迭代方法求解,以 x 为 x0,求解下一个距离方程的根更近的位置。迭代公式可以写成:
x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1}=x_n−{f(x_n)\over f^′(x_n)} xn+1=xnf(xn)f(xn)

4.2.2 凸优化

牛顿法求解方程的根,这一特性可以应用在凸函数的优化问题上。
机器学习、深度学习中,损失函数的优化问题一般是基于一阶导数梯度下降的。现在,从另一个角度来看,想要让损失函数最小化,这其实是一个最值问题,对应函数的一阶导数 f’(x) = 0。也就是说,如果我们找到了能让 f’(x) = 0 的点 x,损失函数取得最小值,也就实现了模型优化目标。
现在的目标是计算 f’(x) = 0 对应的 x,即 f’(x) = 0 的根。转化为求根问题,就可以利用上一节的牛顿法了。
对于牛顿法求极值点,考虑以下泰勒展开:
f ( x + Δ x ) = f ( x ) + f ′ ( x ) Δ x + 1 2 f ′ ′ ( x ) Δ x 2 f(x+Δx)=f(x)+f^′(x)Δx+{1\over 2}f^{′′}(x)Δx^2 f(x+Δx)=f(x)+f(x)Δx+21f(x)Δx2
同样我们希望左式最小,那么将左式看成是Δx的函数,当取合适的Δx值时,左边的式子达到极小值,此时导数为0。因此对上式进行求导数,得到公式: 0=f′(x)+f′′(x)∗Δx
此时可得到公式: x n + 1 = x n − f ′ ( x n ) f ′ ′ ( x n ) x_{n+1}=x_{n}−{f^′(x_n)\over f^{′′}(x_n)} xn+1=xnf(xn)f(xn)
通过迭代公式,就能不断地找到 f’(x) = 0 的近似根,从而也就实现了损失函数最小化的优化目标。

梯度下降与牛顿法

梯度下降一阶优化:
在这里插入图片描述
牛顿法二阶优化:
在这里插入图片描述
所以说牛顿下降法是用二次曲面来拟合函数的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
首先,我们来看一下牛顿法的优点:

  • 第一,牛顿法的迭代更新公式中没有参数学习因子,也就不需要通过交叉验证选择合适的学习因子了。
  • 第二,牛顿法被认为可以利用到曲线本身的信息, 比梯度下降法更容易收敛(迭代更少次数),最优化速度更快。

然后,我们再来看一下牛顿法的缺点。我们注意到牛顿法迭代公式中除了需要求解一阶导数之外,还要计算二阶导数。从矩阵的角度来说,一阶导数和二阶导数分别对应雅可比矩阵(Jacobian matrix)和海森矩阵(Hessian matrix)。
在上面讨论的是2维情况,高维情况的牛顿迭代公式是:
7
其中H是hessian矩阵,定义为:
8
牛顿法不仅需要计算 Hessian 矩阵,而且需要计算 Hessian 矩阵的逆。当数据量比较少的时候,运算速度不会受到大的影响。但是,当数据量很大,特别在深度神经网络中,计算 Hessian 矩阵和它的逆矩阵是非常耗时的。从整体效果来看,牛顿法优化速度没有梯度下降算法那么快。所以,目前神经网络损失函数的优化策略大多都是基于梯度下降。

高维情况也可以用牛顿迭代求解,但是Hessian矩阵引入的复杂性,使得牛顿迭代求解的难度增加,解决这个问题的办法是拟牛顿法(Quasi-Newton methond)。

4.3 拟牛顿法

拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度。拟牛顿法和最速下降法一样只要求每一步迭代时知道目标函数的梯度。通过测量梯度的变化,构造一个目标函数的模型使之足以产生超线性收敛性。这类方法大大优于最速下降法,尤其对于困难的问题。另外,因为拟牛顿法不需要二阶导数的信息,所以有时比牛顿法更为有效。
主要过程是先推导出海塞矩阵需要满足的条件,即拟牛顿条件(也可以称为拟牛顿方程)。然后我们构造一个满足拟牛顿条件的近似矩阵来代替原来的海塞矩阵。
8

5. 线性回归的评估指标

SSE(误差平方和)、MSE(均方误差)、RMSE(均方根误差)、MAE(平均绝对误差)、R Squared(R方)
  1. SSE
    SSE= ∑ i = 0 n ( y i − f i ) 2 \sum _{i=0}^n(y_i - f_i)^2 i=0n(yifi)2,其中f为预测值,y为真实值。
    同样的数据集的情况下,SSE越小,误差越小,模型效果越好。随着样本增加,SSE必然增加,也就是说,不同的数据集的情况下,SSE比较没有意义。
  2. MSE
    MSE= 1 n ∑ i = 0 n ( y i − f i ) 2 \frac{1}{n}\sum _{i=0}^n(y_i - f_i)^2 n1i=0n(yifi)2
    MSE其实是对SSE除以n,使其与样本数n无关。但是平方会导致量纲问题,例如房子价格为万元,平方后就变成万元的平方。
  3. RMSE
    对MSE开方,使量纲相同:RMES= M S E \sqrt{MSE} MSE
  4. MAE
    通过对加绝对值,也可以使量纲相同:MAE= 1 n ∑ i = 0 n ∣ y i − f i ∣ \frac{1}{n}\sum _{i=0}^n|y_i - f_i| n1i=0nyifi

MSE/MAE如何选择:
1、从损失函数收敛角度来看,MSE求导简单,可较快达到收敛值;
2、从离群值来看,若离群值是真实的或应该被检测到的,应该使用MSE;若离群点代表异常的,不应过多关注,应该使用MAE

  1. R Squared
    R Squared是衡量线性回归法最好的指标。
    R2= 1 − ∑ i = 0 n ( y i − f i ) 2 / ∑ i = 0 n ( y i − y ˉ ) 2 1-\sum _{i=0}^n(y_i - f_i)^2/\sum _{i=0}^n(y_i -\bar y)^2 1i=0n(yifi)2/i=0n(yiyˉ)2
    数学理解: 分母理解为原始数据的离散程度,分子为预测数据和原始数据的SSE,二者相除可以消除原始数据离散程度的影响。
    9

6. sklearn参数详解

sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False,copy_X=True, n_jobs=1)

参数说明
fit_intercept布尔型,默认为True,若参数值为True时,代表训练模型需要加一个截距项;若参数为False时,代表模型无需加截距项(即直线过原点)。
normalize布尔型,默认为False,若fit_intercept参数设置False时,normalize参数无需设置;若normalize设置为True时,则输入的样本数据将标准化。
copy_X布尔型,默认为true,即是否对X复制,如果选择false,则直接对原数据进行覆盖。(即经过中心化,标准化后,是否把新数据覆盖到原数据上)
n_jobs整型, 默认为1,计算时设置的任务个数(number of jobs)。如果选择-1则代表使用所有的CPU。这一参数的对于目标个数>1(n_targets>1)且足够大规模的问题有加速作用。
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
逻辑回归是一种分类算法,它的主要思想是根据现有数据对分类边界线(Decision Boundary)建立回归公式,以此进行分类。 与线性回归相似,逻辑回归通过一组预测器变量来预测特征与输出结果。但逻辑回归更适用于二分类问题,输出结果为0或1。通过方程系数,我们可以估计模型中自变量的比率。这使得逻辑回归可以用于确定某个事件的可能性。 逻辑回归和多重线性回归的区别在于因变量的不同。多重线性回归的因变量只有一个,而逻辑回归的因变量可以是二分类,也可以是多分类。广义线性模型家族中的模型基本形式相似,主要区别在于因变量的不同。例如,如果因变量是连续的,那么就是多重线性回归;如果因变量是二项分布,那就是逻辑回归;如果因变量是泊松分布,那就是泊松回归。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [逻辑回归算法梳理](https://blog.csdn.net/pandawang830/article/details/88867221)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [逻辑回归算法](https://blog.csdn.net/qq_39691463/article/details/119257621)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值