微信号:QunarTL

介绍:Qunar技术沙龙是去哪儿网工程师小伙伴以及业界小伙伴们的学习交流平台.我们会分享Qunar和业界最前沿的热门技术趋势和话题;为中高端技术同学提供一个自由的技术交流和学习分享平台.

机器学习之 scikit-learn 开发入门(3)

2018-10-09 08:00 曹华

机器学习之 scikit-learn 开发入门 - 

监督学习 - Ridge 回归介绍


曹华


个人介绍:曹华,2018 年加入去哪儿网技术团队。目前在火车票事业部/技术部小组。个人对图像处理、数据挖掘、图论、VR 等有浓厚兴趣。

一、概要

本文主要讲解 Ridge 回归的实践与原理,主要内容包括:

  1. Ridge 回归的介绍

  2. Ridge 回归算法类库介绍

  3. Ridge 回归应用示例

  4. Ridge 回归的原理

  5. 总结

通过文本的介绍,希望大家可以掌握 Ridge 回归的使用与了解 Ridge 回归的原理。

二、Ridge 回归的介绍

Ridge 回归简称岭回归、脊回归、吉洪诺夫正则化,它属于 L2 正则化方案,和一般线性回归的区别是在损失函数上增加了一个 L2 正则化的项。这里损失函数就是我们第一期提到的最小二乘法。那么为什么要加入 L2 正则化的项呢?在机器学习中如何才能确定算法判定的结果的优劣呢?其实机器学习中存在着两个词语是来说明模型的优劣的,即过拟合和欠拟合。

2.1 过拟合和欠拟合的介绍

过拟合:机器学习模型训练的过于复杂,导致在验证数据集中表现不佳。 欠拟合:机器学习模型训练的不够复杂,导致在验证数据集中表现不佳。

这里我们会有疑问,过于简单的模型会表现不佳,但是过于复杂为何会表现不佳呢? 打个比喻我要建立一个识别狗的模型,我需要对这个模型进行训练。恰好,我训练样本中的所有训练图片都是二哈,那么经过多次迭代训练之后,模型训练好了,并且在训练集中表现得很好。基本上二哈身上的所有特点都涵括进去,那么问题来了!假如我的测试样本是一只金毛呢?将一只金毛的测试样本放进模型中,很有可能模型最后输出的结果就是金毛不是一条狗(因为这个模型基本上是按照二哈的特征去打造的)。所以这样就造成了模型过拟合,虽然在训练集上表现得很好,但是在测试集中表现得恰好相反。

2.2 偏差、方差与欠拟合和过拟合的关系

  1. 偏差是预测结果与真实值的距离大小;

  2. 方差是预测结果是否扎堆;

  3. 低偏差低方差时,是我们所追求的效果,此时预测值正中靶心(最接近真实值),且比较集中(方差小);

  4. 低偏差高方差时,预测值基本落在真实值周围,但很分散,此时方差较大,说明模型的稳定性不够好;

  5. 高偏差低方差时,预测值与真实值有较大距离,但此时值很集中,方差小,模型的稳定性较好,但预测准确率不高;

  6. 高偏差高方差时,是我们最不想看到的结果,此时模型不仅预测不准确,而且还不稳定,每次预测的值都差别比较大。

一言以蔽之,过拟合大多方差比较高,欠拟合大多偏差比较高。 欠拟合就不多说了,下面主要介绍过拟合的情况。

2.3 过拟合的常见原因

  1. 建模样本选取有误,如样本数量太少,选样方法错误,样本标签错误等,导致选取的样本数据不足以代表预定的分类规则;

  2. 样本噪音干扰过大,使得机器将部分噪音认为是特征从而扰乱了预设的分类规则;

  3. 假设的模型无法合理存在,或者说是假设成立的条件实际并不成立;

  4. 参数太多,模型复杂度过高。

2.4 常见的解决方法

  1. 选取合适的停止训练标准,使对机器的训练在合适的程度;

  2. 保留验证数据集,对训练成果进行验证;

  3. 获取额外数据进行交叉验证;

  4. 正则化,即在进行目标函数或代价函数优化时,在目标函数或代价函数后面加上一个正则项,一般有 L1 正则与 L2 正则等。

三、scikit-learn Ridge 回归算法类库介绍

scikit-learn 逻辑回归算法类库对应的是 Ridge。下面就对 Ridge 的重要参数做一个总结。

参数名称 参数类型 参数默认值 说明
alpha float 1.0 当 alpha 为 0 时算法等同于普通最小二乘法
max_iter int 1000 最大循环次数

四、Ridge 回归应用示例

4.1 导入头文件

 
           
  1. #coding=utf-8

  2. import matplotlib.pyplot as plt

  3. import pandas as pd

  4. from sklearn.cross_validation import train_test_split

  5. from sklearn.linear_model import Ridge, RidgeCV

4.2 样本数据

数据是一个循环发电场的数据,共有 9568 个样本数据,每个数据有 5 列,分别是:AT(温度), V(压力), AP(湿度), RH(压强), PE(输出电力)。下载地址:

http://archive.ics.uci.edu/ml/machine-learning-databases/00294/

 
           
  1. data = pd.read_csv('..\\Folds5x2_pp.csv')

  2. X = data[['AT', 'V', 'AP', 'RH']]

  3. Y = data[['PE']]

  4. X_TRAIN, X_TEST, Y_TRAIN, Y_TEST = train_test_split(X, Y, random_state=1)

4.3 训练模型

 
           
  1. ridge = Ridge(alpha=1)

  2. ridge.fit(X_TRAIN, Y_TRAIN)

4.4 预测验证

 
           
  1. Y_PRED = ridge.predict(X_TEST)

4.5 训练得到的 Ridge 模型

 
           
  1. print ridge.coef_

  2. print ridge.intercept_

[[-1.96862642 -0.23930532 0.05685793 -0.15860993]] [460.04983649]

可知 Ridge 模型为:

PE = -1.96862642 * AT + -0.23930532 * V + 0.05685793 * AP + -0.15860993 * RH + 460.04983649

4.6 获取最优的 alpha

 
           
  1. ridgecv = RidgeCV(alphas=[0.01, 0.1, 0.5, 1, 3, 5, 7, 10, 20, 100])

  2. ridgecv.fit(X_TRAIN, Y_TRAIN)

  3. //获得alpha的值

  4. print lassocv.alpha_

  4.7 画出预测值与真实值的线形图
    
 
           
  1. fig, ax = plt.subplots()

  2. ax.scatter(Y_TEST, Y_PRED)

  3. ax.plot([Y_TEST.min(), Y_TEST.max()], [Y_TEST.min(), Y_TEST.max()], 'k--', lw=4)

  4. ax.set_xlabel('Measured')

  5. ax.set_ylabel('Predicted')

  6. plt.show()

五、Ridge 回归的原理

首先我们回顾下线性回归的标准方程:

我们需要求得 w 和 b 的值。在线性回归中我们利用最小二乘法求得 w 和 b,但是最小二乘法没有对特征的罚分机制,很容易过拟合,所以 Ridge 在线性回归的基础上增加了正则化项为 w 指定罚分机制,标准函数如下:

其中α为常数系数,可以通过它来调优。

为 L2 范数。这里的 α 近似于应用示例中的 alpha。 Ridge 回归主要还是使用最小二乘法。推倒公式详见第一期线性回归。 令 J(θ) 的导数为 0,得到下式:

整理即可得到最后的 θ 的结果:

其中 E 为单位矩阵。 从求导后公式可以看到 α 越大,得到回归系数 θ 就越小,最终趋近于 0。而如果 α 越小,即正则化项越小,那么回归系数 θ 就越来越接近于普通的线性回归系数。

六、总结

Ridge 解决了线性回归中最小二乘法的过拟合问题。

 
Qunar技术沙龙 更多文章 一百行 python 代码告诉你国庆哪些景点爆满 AJAX 跨域请求方案详细介绍 第四届 Hackathon 大赛 CodeCode 小组 JSON java 泛型解析 从人肉到智能,阿里运维体系经历了哪些变迁?
猜您喜欢 PHP语言基础简单整理 谷歌I/O大会发布的新品都在这儿 亮点不止是VR 应用层容错与分层设计 U.E.D企业家能力拓展日——汽车O2O创业的机会与挑战 Android O新特性和行为变更总结