线性回归算法梳理

线性回归算法梳理

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正则等
正则化一般具有如下形式:
min \frac{1}{N} \sum_{i=1}^{N} L(y_i,f(x_i)) + \lambda J(f)
其中\lambda J(f) 是正则化项, \lambda \ge 0,\lambda为正则项系数
(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||_2最小,可以使得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销量
模型推导
h_\theta(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2
h_\theta(x) = \sum_{i=0}^{n} \theta_i x_i = \theta^T x
我们主要就是得到这些\theta_i
\theta_i x_i则代表着模型的结构;
x_i代表着数据集的不同特征的值,是模型的输入;
h_\theta(x)则代码我们的模型的输出,是预测值。
线性回归试图学得:
h_\theta(x_i) \simeq y_i ,其中y_i是真实值

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

我们要得到w_i,那我们怎么判断w_i是最优的呢?
这里就采用了损失函数去判断我们得到的h_\theta (x_i)y_i之间的差别

损失函数 (代价函数)

是用来度量预测错误的程度,损失函数是f(X)Y的非负实值函数,记作L(Y,f(X))
统计学习中常用的损失函数有以下几种:
(1) 0-1 损失函数(0-1) loss function:
L(Y,f(X)) = \begin{cases} 1 & Y \neq f(X)\\ 0 & Y = f(X) \end{cases}
(2) 平方损失函数
L(Y,f(X)) = (Y - f(X))^2
(3)绝对损失函数
L(Y,f(X)) = |Y- f(X)|
(4)对数损失函数或对数似然损失函数
L(Y,P(Y|X))= -logP(Y|X)
均方差是回归任务中常用的性能度量
argmin J(x)
J(x) = \sum_{i=1}^{n}(f(x_i) - y_i)^2
表示每一个训练点 (x_i ,y_i) 到拟合直线 y_i=\theta x_i的竖直距离的平方和,并且这个和是最小的,通过最小化上面的损失函数可以求得拟合直线的最佳参数\theta
为了求导方便:
J(x) = \frac{1}{2m}\sum_{i=1}^{m}(h(x_i) -y_i)^2 其中\frac{1}{2}是为了方便求导

4. 优化方法(梯度下降法、牛顿法、拟牛顿法等)

参考:https://zhuanlan.zhihu.com/p/37524275
预测模型:f(x) = w_0 +w_1x_1+...+w_nx_n
我们可能去穷举所有的线性回归函数,然后挑选最小的;通常我们是先随机产生W的值然后在这个基础上改进参数。这里改进方法就是优化方法

4.1 梯度下降(可以单独一章)

初始化w为一个任意值,在迭代过程中不断的更新w使得J(x)更小,直到收敛为止(可以认为J(x)不再改变)。
w_j = w_j - \eta \frac{\partial(J(x))}{w_j}, 其中 j = 0,1,2,...,n
\eta是学习率,是一个超参数,一般是人为设置的

4.2 牛顿法(未完待续————理解)

一般来说,牛顿法主要应用在两个方面,1:求方程的根;2:最优化
并不是所有的方程都有求根公式,或者求根公式很复杂,导致求解困难。利用牛顿法,可以迭代求解
原理是利用泰勒公式,在 x_0处展开,且展开到一阶, 即 f(x)=f(x_0)+f'(x_0)(x-x_0)
求解方程 f(x)=0 ,等价于f(x_0)+f'(x_0)(x-x_0)=0
求解 x=x_1=x_0-\frac{f(x_0)}{f'(x_0)}。因为这是利用泰勒公式的一阶展开,f(x)=f(x_0)+f'(x_0)(x-x_0)处并不是完全相等,而是近似相等,这里求得的x_1 并不能让 f(x)=0,只能说 f(x_1) 的值比f(x_0) 的值更接近于0,于是迭代的想法就很自然了,可以进而推出 x_{n+1}=x_{n}-\frac{f(x_n)}{f'(x_{n})},通过迭代,这个式子必然在 f(x^*)=0的时候收敛。

5、线性回归的评估指标

用来评价模型与真实值之间的差距,线性回归中用到的性能度量(评价指标)是“均方差” (mean squared erro MSE)
E(f;D) = \frac{1}{m}\sum_{i=0}^{m}(f(x_i) -y_i)^2 其中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:样本权重

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容