算法梳理(一)线性回归算法梳理

目录

一、机器学习的一些概念

1、有监督

2、无监督

3、泛化能力

4、过拟合和欠拟合

5、交叉验证

二、线性回归的原理

三、线性回归的损失函数、代价函数、目标函数

1、损失函数

2、代价函数

3、目标函数

四、优化方法

1、梯度下降法

2、牛顿法

3、拟牛顿法

五、线性回归的评价指标

六、sklearn参数详解


一、机器学习的一些概念

计算机程序利用经验 E 学习任务 T,性能是 P,如果针对任务 T 的性能 P 随着经验 E 不断增长,则称为机器学习。

机器学习教计算机执行人和动物与生俱来的活动:从经验中学习。机器学习算法使用计算方法直接从数据中“学习”信息,而不依赖于预定方程模型。当可用于学习的样本数量增加时,这些算法可自适应提高性能。

主要任务:

分类(classification):将实例数据划分到合适的类别中。
应用实例:判断网站是否被黑客入侵(二分类 ),手写数字的自动识别(多分类)
回归(regression):主要用于预测数值型数据。
应用实例:股票价格波动的预测,房屋价格的预测等。
聚类:在无监督学习中,将数据集分成由类似的对象组成多个类的过程称为聚类。

1、有监督

有监督机器学习又被称为“有老师的学习”,所谓的老师是指标签。监督学习就是最常见的分类(注意和聚类区分)问题,通过已有的训练样本(即已知数据及其对应的输出)去训练得到一个最优模型(这个模型属于某个函数的集合,最优表示某个评价准则下是最佳的),再利用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的。也就具有了对未知数据分类的能力。 

2、无监督

无监督机器学习被称为“没有老师的学习”,无监督相比于有监督,输入数据没有被标记,也没有确定的结果。样本数据类别未知,需要根据样本间的相似性对样本集进行分类(聚类,clustering)试图使类内差距最小化,类间差距最大化。通俗点将就是实际应用中,不少情况下无法预先知道样本的标签,也就是说没有训练样本对应的类别,因而只能从原先没有样本标签的样本集开始学习分类器设计。

3、泛化能力

泛化能力(generalization ability)是指一个机器学习算法对于没有见过的样本的识别能力。我们也叫做举一反三的能力,或者叫做学以致用的能力。举个例子,小学生先通过学习十以内的加减乘除,知道什么是四则运算和怎么具体去算数,以后遇到百以内或者千以内的数字也知道怎么去做四则运算。我们只教会他十以内的运算,他自己就能推广到百以内或者千以内的运算,这种能力就是泛化能力。

4、过拟合和欠拟合

过拟合:

小学生学习四则运算,老师教过1+1=2,那么学生只记住了1+1=2,以后做题的时候碰到1+1知道答案是2,但是碰到10+10就不知道怎么计算答案,学生只是死记硬背1+1的答案是2,没理解四则运算的规律,不会推广到10+10,也就是泛化能力非常低,同时我们也把这种现象叫做过拟合(over-fitting)了。
过拟合是一种分类器会发生的现象,而泛化能力可以理解为对分类器的一种性能的评价,过拟合表现为算法模型的高方差,模型训练时的结果很好,但是在预测时结果不好。
产生过拟合的原因:模型的复杂度太高,比如:网络太深;过多的变量(特征);训练数据非常少。
避免过拟合的方法有很多:(1)尽量减少特征的数量、(2)early stopping、(3)数据集扩增、(4)dropout、(5)正则化包括L1、L2、(6)清洗数据。

欠拟合:

是和过拟合相对的现象,可以说是模型的复杂度较低,没法很好的学习到数据背后的规律。就好像开普勒在总结天体运行规律之前,他的老师第谷记录了很多的运行数据,但是都没法用数据去解释天体运行的规律并预测,这就是在天体运行数据上,人们一直处于欠拟合的状态,只知道记录过的过去是这样运行的,但是不知道道理是什么。
欠拟合指的是模型不够复杂,没有很好地捕捉到数据特征,不能够很好地拟合数据,对应模型的高偏差。
解决欠拟合可以从寻找更好的特征(具有代表性的)和使用更多的特征(增大输入向量的维度)。具体的方法:1、添加更多的特征项(比如上下文特征、位置特征等);2、添加多项式特征(例如将线性模型通过添加二次项或者三次项使模型泛化能力更强);3、减少正则化参数,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。

5、交叉验证

交叉验证(Cross Validation)是在机器学习建立模型和验证模型参数时常用的办法。基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set),首先用训练集对分类器进行训练,在利用验证集来测试训练得到的模型(model),以此来做为评价分类器的性能指标。

二、线性回归的原理

对于给定的训练集{(x1, y1), (x2, y2), (x3, y3)…(xn, yn)}, 试图通过学习,找到最佳w, b的取值, 使得训练集上的数据能够符合或者近似方程Y = WX +b(这个就是我们的模型).

三、线性回归的损失函数、代价函数、目标函数

Yi(Yi = Wxi + b)表示第i个样本通过Y = Wx + b 算出来的值, yi表示第i个样本的标签值, N表示样本的总个数.

1、损失函数

即loss function, ( Yi - yi) ^ 2 ,一般是针对单个样本 i, 这个函数的意思就是在x = xi的情况下(即对于数据xi), 计算出模型推到出的预测值和实际标签值的差值的平方.如果完美预测,我们可以知道Yi = yi, 则( Yi - yi) ^ 2 = 0.所以我们可以得出, 如果 损失函数 值越大, 那么就表示第i个数据的预测值和标签实际值差距越大,也就是拟合误差越大,反之,如果 损失函数 值越小, 那么 第i个数据的预测值和标签实际值就越接近,拟合误差越小.

2、代价函数

即cost function, 1/N * SUM(( Yi - yi) ^ 2) ,一般是针对总体, 即为求全部损失函数加总后的均值.

3、目标函数

即Object function, 1/N * SUM(( Yi - yi) ^ 2) + 正则化项
这个也就是我们最终要求优化的函数, 一般来说也就是通过求使得目标函数达到最小的(W, b)组合,来得到我们需要的线性回归方程.
其中添加的正则化项是为了避免过拟合的情况,如果单单使用代价函数求解,会使得最终的模型十分贴近训练集上的每个数据点,导致泛化能力较差,需要通过添加正则化项,加强泛化能力.

四、优化方法

为了求得使目标函数达到最小的(W, b)组合, 也就是说对目标函数取其 最小值,一般而言我们的目标函数是 凸函数,所以即为对目标函数求导, 求(W,b) 使得其导数为0. 下面优化方法就是针对如何求得(W, b),也就是(W,b)关于目标函数的方程求解(变量不再是x).以下方法均建立在 凸函数 基础上,求全局最优

为什么不直接解方程求导数为0的点,而是用一步一步迭代这么麻烦?
因为程序上直接用解方程求解代价比较大,面对高维的时候求解时间比较慢,还是逐步迭代求解来的快

1、梯度下降法

在目标函数上随机取一个点a,算出此时的f’(a), 若导数大于0表明函数在该点沿着x轴的正方向趋于增加;反之,表明函数在该点沿着x轴的正方向趋于减小.我们需要每次增加一个步长即a+r, 使得函数趋于减小, 也就是沿着负导数的发现增加步长.通过迭代N次,使得最终函数达到导数为0的点。

数学表达:
1.随机取一a点 y = f(xa)
2.算出这一点的导数f’(xa)
3.若f’(xa) = 0, 则为极值点, 由于是凸函数,此极值点就是函数的最值点(全局最优),(W,b)得解.
若f’(xa) > 0 , 则这不是极值点,需要更新a点使得a点往极值点逼近,也就是增加一点步长,并且我们需要沿负导数方向增加,所以更新xa = xa - f’(xa) * r
若f’(xa) < 0 , 则这不是极值点,需要更新a点使得a点往极值点逼近,也就是增加一点步长,并且我们需要沿负导数方向增加,所以更新xa = xa + f’(xa) * r
4.算出更新后a的导数 即f’(xa + r),看导数符号,重复步骤3,直到导数逼近或者等于0,求得(W,b )

批量梯度下降:最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小,但是对于大规模样本问题效率低下。
随机梯度下降:最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近,适用于大规模训练样本情况。

2、牛顿法

牛顿法一般是用来求解 方程 f(x) = 0 的解.比如用牛顿法求上图f(x) = 0的解, 首先我们在坐标轴上随机取一点A, 在A做曲线切线, 与x轴相交于B点, 此时再取点 (B, f(b)) 做曲线切线, 再次与x轴相交,重复上述步骤N次(即迭代N次), 将会得到或是无限逼近 f(x) = 0的点,即解得方程.


数学表达式为:

A点的切线方程为:y = f(XA)+f’(XA) * (x-XA)
B点坐标: f(XA)+f’(XA) * (x-XA) = 0 推出 XB = XA - f(XA) / f’(XA)
B点切线方程: y = f(XB)+f’(XB) * (x-XB)

n点坐标 xn = x(n-1) - f(n-1) / f’(n-1)
现在我们将牛顿法用于求解极值问题,也就是相当于对目标函数的导数求0点.这里就不再赘述, 注意是先写出目标函数导数,在运用牛顿法求解.

牛顿法的优缺点总结:
  优点:二阶收敛,收敛速度快;
  缺点:牛顿法是一种迭代算法,每一步都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂。

3、拟牛顿法

拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度。拟牛顿法和最速下降法一样只要求每一步迭代时知道目标函数的梯度。通过测量梯度的变化,构造一个目标函数的模型使之足以产生超线性收敛性。这类方法大大优于最速下降法,尤其对于困难的问题。另外,因为拟牛顿法不需要二阶导数的信息,所以有时比牛顿法更为有效。如今,优化软件中包含了大量的拟牛顿算法用来解决无约束,约束,和大规模的优化问题。

五、线性回归的评价指标

1、均方误差(mean square error)

2、均方根误差:

3、平均绝对误差

4、R2 score

将预测值跟只使用均值的情况下相比,看能好多少。其区间通常在(0,1)之间.0表示还不如什么都不预测,直接取均值的情况,而1表示所有预测跟真实结果完美匹配的情况,越大越好。

六、sklearn参数详解

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

参数:

1、fit_intercept : 布尔型,默认为true
说明:是否对训练数据进行中心化。如果该变量为false,则表明输入的数据已经进行了中心化,在下面的过程里不进行中心化处理;否则,对输入的训练数据进行中心化处理
2、normalize :布尔型,默认为false
说明:是否对数据进行标准化处理
3、copy_X: 布尔型,默认为true
说明:是否对X复制,如果选择false,则直接对原数据进行覆盖。(即经过中心化,标准化后,是否把新数据覆盖到原数据上)
4、n_jobs : 整型, 默认为1
说明:计算时设置的任务个数(number of jobs)。如果选择-1则代表使用所有的CPU。这一参数的对于目标个>1(n_targets>1)且足够大规模的问题有加速作用。

返回值:

1、coef_ : 数组型变量, 形状为(n_features,)或(n_targets, n_features)
说明:对于线性回归问题计算得到的feature的系数。如果输入的是多目标问题,则返回一个二维数组(n_targets, n_features);如果是单目标问题,返回一个一维数组 (n_features,)。
2、intercept_ : 数组型变量
说明:线性模型中的独立项。
 

参考文献:

https://blog.csdn.net/weixin_44025838/article/details/85101952
https://blog.csdn.net/kun_csdn/article/details/88861398
https://blog.csdn.net/qq_43371456/article/details/88865290#6_44
https://blog.csdn.net/qq_40981899/article/details/88840072#_66

猜你喜欢

转载自blog.csdn.net/qq_35175666/article/details/88901410