线性回归算法梳理
1. 机器学习的一些概念
1.1 有监督(supervised learning)和无监督
1.1.1 有监督:
训练数据集必须是有标记,然后通过给定的训练数据和特定的算法去构造一个模型。
1.1.2 无监督:
训练数据集没有标记,去寻找训练数据中隐藏的模式或者是对数据进行分组。
1.1.3比喻
例如学英语。有监督学习是先读几篇中英文对照的文章,从而学会阅读纯英语文章。无监督学习是直接阅读大量纯英文文章,当数量达到一定程度,虽然不能完全理解文章,但也会发现一些词组的固定搭配,句式等等。
1.2 泛化能力(generalization ability)、过拟合、欠拟合(方差和偏差以及各自解决办法)、:
1.2.1 概念
泛化能力是指机器学习模型对从未见过的新样本的识别能力。
例如:
通过学习,小学生就可以熟练的掌握加减法,那么他们是怎么做到的呢?第一步学生们先感性的知道了在有一个苹果的基础上再拿来一个苹果的话就是一种加法,第二步知道个数可以用阿拉伯数字抽象的表示,到了0到9这十个数字和他们的抽象含义,第三步学习十以内的加减法,第四步推广到了多位数的加减法。
[图片上传失败...(image-865c6b-1554004046163)]
过拟合(over-fitting)
就是模型的对训练数据集的拟合程度非常好,但是在测试集上的预测效果非常差
欠拟合(under-fitting)
得到的模型在训练集上的效果不好,在测试集上的效果也差。
Bais 和 Variance
[图片上传失败...(image-61bfbc-1554004046163)]
准:bias描述的是根据样本拟合出的模型的输出预测结果的期望与样本真实结果的差距,简单讲,就是在样本上拟合的好不好。要想在bias上表现好,low bias,就得复杂化模型,增加模型的参数,但这样容易过拟合 (overfitting),过拟合对应上图是high variance,点很分散。low bias对应就是点都打在靶心附近,所以瞄的是准的,但手不一定稳。
Bias是 “用所有可能的训练数据集训练出的所有模型的输出的平均值” 与 “真实模型”的输出值之间的差异;
确:varience描述的是样本上训练出来的模型在测试集上的表现,要想在variance上表现好,low varience,就要简化模型,减少模型的参数,但这样容易欠拟合(unfitting),欠拟合对应上图是high bias,点偏离中心。low variance对应就是点都打的很集中,但不一定是靶心附近,手很稳,但是瞄的不准。
Variance则是“不同的训练数据集训练出的模型”的输出值之间的差异。
1.2.2 常用解决办法
(1)解决欠拟合的方法:
1、增加新特征,可以考虑加入进特征组合、高次特征,来增大假设空间;
2、尝试非线性模型,比如核SVM 、决策树、DNN等模型;
3、如果有正则项可以较小正则项参数 $\lambda$;
4、Boosting ,Boosting 往往会有较小的 Bias,比如 Gradient Boosting 等.
(2)解决过拟合的方法:
1、交叉检验,通过交叉检验得到较优的模型参数;
2、特征选择,减少特征数或使用较少的特征组合,对于按区间离散化的特征,增大划分的区间;
3、正则化,常用的有 L1、L2 正则。而且 L1正则还可以自动进行特征选择;
4、如果有正则项则可以考虑增大正则项参数 $\lambda$;
5、增加训练数据可以有限的避免过拟合;
6、Bagging ,将多个弱学习器Bagging 一下效果会好很多,比如随机森林等.
1.3 正则化
正则化方法是指在进行目标函数或代价函数优化时,在目标函数或代价函数后面加上一个正则项,一般有L1正则与L2正则等
正则化一般具有如下形式:
其中
(1) L1正则项会产生稀疏解。
(2) L2正则项会产生比较小的解。
核心:L2对大数,对outlier更敏感!
1.3.1 L0范数与L1范数
参考:https://blog.csdn.net/zouxy09/article/details/24971995
L0范数是指向量中非0的元素的个数。如果我们用L0范数来规则化一个参数矩阵W的话,就是希望W的大部分元素都是0。L1范数是指向量中各个元素绝对值之和。L1正则是基于L1范数。
稀疏都是通过L1范数来实现 问什么?
- L1是L0范数的最优凸近似
- 任何的规则化算子,如果他在Wi=0的地方不可微,并且可以分解为一个“求和”的形式,那么这个规则化算子就可以实现稀疏
- 总结:L1范数和L0范数可以实现稀疏,L1因具有比L0更好的优化求解特性而被广泛应用
参数稀疏的好处
1)特征选择(Feature Selection):
xi的大部分元素(也就是特征)都是和最终的输出yi没有关系或者不提供任何信息的,在最小化目标函数的时候考虑xi这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了对正确yi的预测。稀疏规则化算子的引入就是为了完成特征自动选择的光荣使命,它会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。
2)可解释性(Interpretability):
例如患某种病的概率是y,然后我们收集到的数据x是1000维的,也就是我们需要寻找这1000种因素到底是怎么影响患上这种病的概率的。假设我们这个是个回归模型:y=w1x1+w2x2+…+w1000x1000+b(当然了,为了让y限定在[0,1]的范围,一般还得加个Logistic函数)。通过学习,如果最后学习到的w就只有很少的非零元素,例如只有5个非零的wi,那么我们就有理由相信,这些对应的特征在患病分析上面提供的信息是巨大的,决策性的。也就是说,患不患这种病只和这5个因素有关,那医生就好分析多了。
1.3.2 L2正则
“岭回归”(Ridge Regression),有人也叫它“权值衰减weight decay”
改善机器学习里面一个非常重要的问题:过拟合
L2范数是指向量各元素的平方和然后求平方根。 我们让L2范数的规则项最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0,这里是有很大的区别的哦。而越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象。
[图片上传失败...(image-aaaaa4-1554004046163)]
1.4 交叉验证(cross vailidation)
作用:
在数据集很小的时候防止over-fitting
找到合适的模型参数
适用情况:
数据集较小时
ps:一般做深度学习跑标准数据集的时候用不到
1 简单交叉验证
在保留交叉验证(hand-out cross validation)中,随机将训练样本集分成训练集(training set)和交叉验证集(cross validation set),比如分别占70%,30%。然后使用模型在训练集上学习得到假设。最后使用交叉验证集对假设进行验证,看预测的是否准确,选择具有误差小的模型。
2 S折交叉验证
S折交叉验证(S-fold cross validation),就是把样本集S分成k份,分别使用其中的(k-1)份作为训练集,剩下的1份作为交叉验证集,最后取最后的平均误差,来评估这个模型。
3 留一交叉验证
留一法(leave one out, LOO)就是m-fold cross validation,m是样本集的大小,就是只留下一个样本来验证模型的准确性
2. 线性回归的原理
ps:回归 时专指模型的输出是连续值
定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。
简单的例子:我们假设一个线性方程 Y=2x+1, x变量为商品的大小,y代表为销售量;当月份x =5时,我们就能根据线性模型预测出 y =11销量
模型推导
我们主要就是得到这些;
则代表着模型的结构;
代表着数据集的不同特征的值,是模型的输入;
则代码我们的模型的输出,是预测值。
线性回归试图学得:
,其中是真实值
3. 线性回归损失函数、代价函数、目标函数
我们要得到,那我们怎么判断是最优的呢?
这里就采用了损失函数去判断我们得到的与之间的差别
损失函数 (代价函数)
是用来度量预测错误的程度,损失函数是和的非负实值函数,记作
统计学习中常用的损失函数有以下几种:
(1) 0-1 损失函数(0-1) loss function:
(2) 平方损失函数
(3)绝对损失函数
(4)对数损失函数或对数似然损失函数
均方差是回归任务中常用的性能度量
表示每一个训练点 到拟合直线 的竖直距离的平方和,并且这个和是最小的,通过最小化上面的损失函数可以求得拟合直线的最佳参数
为了求导方便:
其中是为了方便求导
4. 优化方法(梯度下降法、牛顿法、拟牛顿法等)
参考:https://zhuanlan.zhihu.com/p/37524275
预测模型:
我们可能去穷举所有的线性回归函数,然后挑选最小的;通常我们是先随机产生W的值然后在这个基础上改进参数。这里改进方法就是优化方法
4.1 梯度下降(可以单独一章)
初始化为一个任意值,在迭代过程中不断的更新使得更小,直到收敛为止(可以认为不再改变)。
是学习率,是一个超参数,一般是人为设置的
4.2 牛顿法(未完待续————理解)
一般来说,牛顿法主要应用在两个方面,1:求方程的根;2:最优化
并不是所有的方程都有求根公式,或者求根公式很复杂,导致求解困难。利用牛顿法,可以迭代求解
原理是利用泰勒公式,在 处展开,且展开到一阶, 即 。
求解方程 ,等价于 ,
求解 。因为这是利用泰勒公式的一阶展开,处并不是完全相等,而是近似相等,这里求得的 并不能让 ,只能说 的值比 的值更接近于0,于是迭代的想法就很自然了,可以进而推出 ,通过迭代,这个式子必然在 的时候收敛。
5、线性回归的评估指标
用来评价模型与真实值之间的差距,线性回归中用到的性能度量(评价指标)是“均方差” (mean squared erro MSE)
其中m是样本容量
6、sklearn参数详解
sklearn.linear_model.LinearRegression
简单例子
from sklearn import linear_model
clf = linear_model.LinearRegression()
X = [[0,0],[1,1],[2,2]]
y = [0,1,2]
clf.fit(X,y)
print(clf.coef_ ) # [ 0.5 0.5]
print(clf.intercept_) #1.11022302463e-16
参考:https://blog.csdn.net/jingyi130705008/article/details/78163955
1.模型定义
sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False,copy_X=True, n_jobs=1)
-
fit_intercept:布尔类型,可选参数;设置模型是否计算截距,false表示不使用截距。
-
normalize:布尔类型,可选参数,默认值为false;设置为true之前,解释变量x将在回归前进行标准化。
-
copy_X:布尔类型,可选参数,默认值为true;如果为true,x将被复制;否则被重写。
-
n_jobs:int类型,可选参数,默认值为1;如果设为1,将启动所有CPU。
2.几个常用的函数
fit(X,y, [sample_weight]) # 拟合线性模型
-
X:训练数据,形状如 [n_samples,n_features]
-
y:函数值,形状如 [n_samples, n_targets]
-
sample_weight: 每个样本的个体权重,形状如[n_samples]
get_params([deep]) # 获取参数估计量
set_params(**params) # 设置参数估计量
predict(X) # 利用训练好的模型进行预测,返回预测的函数值
- X:预测数据集,形状如 (n_samples, n_features)
score(X, y, [sample_weight]) # 返回预测的决定系数R^2
-
X;训练数据,形状如 [n_samples,n_features]
-
y;关于X的真实函数值,形状如 (n_samples) or (n_samples, n_outputs)
-
sample_weight:样本权重
网友评论