接着上节讨论,岭回归也是一种用于回归的线性模型,因此它的预测公式与普通的最小二乘法相同。但在岭回归中,对系数(w)的选择不仅要在训练数据上得到好的预测结果,而且要拟合附加约束。同时我们还希望系数尽量小(w的所有元素尽量接近于0),同时仍给出很好的预测结果,这种约束就是所谓的正则化的一个例子。正则化是指对模型做显示的约束,避免过拟合现象。

下面我们来看岭回归在linear_model.Ridge中实现。来看一下他对扩展的波士顿房价数据集的效果,对应代码如下:

import mglearn

from sklearn.model_selection import train_test_split

x, y = mglearn.datasets.load_extended_boston()

x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=0)

from sklearn.linear_model import Ridge #导入岭回归模型

ridge = Ridge().fit(x_train, y_train) #调整训练数据

print("training set score: {:.2f}".format(ridge.score(x_train, y_train)))

print("test set score: {:.2f}".format(ridge.score(x_test, y_test)))

对应运行结果如下:

training set score: 0.89

test set score: 0.75

有上述数据可以看出,虽然训练集的精度下降了,但是测试集的精度却上升了,训练集精度和测试集精度更加接近,这样过拟合现象相对线性回归来说就降低了,更加符合我们的预期。

在上述例子中,我们没有去改变alpha参数(简单性和训练型能二者对于模型的重要程度)的值,而是使用默认的值1.0,下面我们来看下如果改变alpha参数时对训练集和测试集分数的影响,对应代码如下:

from sklearn.linear_model import LinearRegression #导入线性回归模型

import mglearn

from sklearn.model_selection import train_test_split

import matplotlib.pyplot as plt

x, y = mglearn.datasets.load_extended_boston() #导入波士顿房价数据

x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=0)

from sklearn.linear_model import Ridge

ridge = Ridge().fit(x_train, y_train)

lr = LinearRegression().fit(x_train, y_train)

print("training set score: {:.2f}".format(ridge.score(x_train, y_train)))

print("test set score: {:.2f}".format(ridge.score(x_test, y_test)))

ridge10 = Ridge(alpha=10).fit(x_train, y_train)

print("training set score: {:.2f}".format(ridge10.score(x_train, y_train)))

print("test set score: {:.2f}".format(ridge10.score(x_test, y_test)))

ridge01 = Ridge(alpha=0.1).fit(x_train, y_train)

print("training set score: {:.2f}".format(ridge01.score(x_train, y_train)))

print("test set score:{:.2f}".format(ridge01.score(x_test, y_test)))

plt.plot(ridge.coef_, 's', label="Ridge alpha=1")

plt.plot(ridge10.coef_, '^', label="Ridge alpha=10")

plt.plot(ridge01.coef_, 'v', label="Ridge alpha=0.1")

plt.plot(lr.coef_, 'o', label="LinearRegression")

plt.xlabel("Coefficient index")

plt.ylabel("coefficient magnitude")

plt.hlines(0, 0, len(lr.coef_))

plt.ylim(-25, 25)

plt.legend()

运行后结果如下:

图形中,x轴对应coef_的元素(w权重或系数保存在coef_中):x=0对应第一个特征数,x=1对应第二个特征数,以此类推。一直到x=100. 而Y轴表示该系数的具体值。这里需要注意的是,对于alpha=10.,系数大多在-3到3之间。对于alpha=1的ridge模型,系数稍大一些,而对于alpha=0.1,则返回更加大,当alpha=0(没有做正则化限制,那么其范围很多已经超出了图像范围。

从上图可以看出,减小alpha可以让系数收到限制更小,对于非常小的alpha值,系数几乎没有收到限制。这时得到的结果和线性回归类似。当alpha=0.1时,训练精度看上去不错。

还有一种方法可以用来理解正则化的影响,那就是固定的alpha值,但改变训练数据量。我们对波士顿房价数据集做二次抽样,并在数据量增肌的子集上分别对线性回归(LinearRegression)和岭回归(Ridge(alpha

=1))两个模型进行评估(将模型性能作为数据集大小的函数记性绘图,这样的图像叫做学习曲线)。对应的代码为:mglearn.plots.plot_ridge_n_samples(),运行后结果如下:

正如预测的那样,无论是岭回归还是线性回归,所有的数据集大小对应的训练分都要高与测试分数。由于岭回归是正则化的,一次它的训分数要整体低于线性回归,特别是对于较小的数据集(小于400个)。但是当数据集较大时(超过400),岭回归则差不多赶上了线性回归。

不过需要记住的是,如果有足够多的训练数据,正则化变得不那么重要,并且岭回归和西安现行回归具有相同的性能(该例子中,二者相同恰好发生在整个数据集的情况下,这只是一个巧合)。

从这个图还可以看出一种现象,那就是随着添加更多的数据,线性回归训练性能在下降,也就是数据越多,模型更加难以过拟合或记住所有的数据。针对该情况,如果特征很多,但是你认为只有其中几个是重要的,那么可以通过另外一种正则化处理方法——Lasso线性回归,我们将在下节做介绍。

python实现岭回归_python机器学习:岭回归介绍相关推荐

  1. python svr回归_python机器学习库scikit-learn:SVR的基本应用

    scikit-learn是python的第三方机器学习库,里面集成了大量机器学习的常用方法.例如:贝叶斯,svm,knn等. scikit-learn的官网 : http://scikit-learn ...

  2. 用python做逻辑回归_python实现逻辑回归

    首先得明确逻辑回归与线性回归不同,它是一种分类模型.而且是一种二分类模型. 首先我们需要知道sigmoid函数,其公式表达如下: 其函数曲线如下: sigmoid函数有什么性质呢? 1.关于(0,0. ...

  3. python数据预测模型算法_Python机器学习 预测分析核心算法

    第1章关于预测的两类核心算法 1.1为什么这两类算法如此有用 1.2什么是惩罚回归方法 1.3什么是集成方法 1.4算法的选择 1.5构建预测模型的流程 1.5.1构造一个机器学习问题 1.5.2特征 ...

  4. python升维方法_python机器学习12:数据“升维”

    1.向数据集添加交互式特征 在实际应用中,常常会遇到数据集的特征不足的情况,要解决这个问题,就需要对数据集的特征进行扩充.这里我们介绍两种在统计建模中常用的方法---交互式特征(Interaction ...

  5. python分类算法报告_Python机器学习(1)——决策树分类算法

    1.决策树算法 决策树用树形结构对样本的属性进行分类,是最直观的分类算法,而且也可以用于回归.不过对于一些特殊的逻辑分类会有困难.典型的如异或(XOR)逻辑,决策树并不擅长解决此类问题. 决策树的构建 ...

  6. python线性回归算法简介_Python机器学习(二):线性回归算法

    机器学习研究的问题分为分类问题和回归问题.分类问题很好理解,而回归问题就是找到一条曲线,可以最大程度地拟合样本特征和样本输出标记之间的关系.当给算法一个输入时,这条曲线可以计算出相应可能的输出.回归算 ...

  7. python训练模型测试模型_python 机器学习中模型评估和调参

    在做数据处理时,需要用到不同的手法,如特征标准化,主成分分析,等等会重复用到某些参数,sklearn中提供了管道,可以一次性的解决该问题 先展示先通常的做法 import pandas as pd f ...

  8. python学习与数据挖掘_python机器学习与数据挖掘

    爬虫 Python基础.数据分析扩展包Numpy.pandas.matplotlib,Python读取MySQL数据,Python爬虫及Scrapy框架,无监督机器学习算法聚类分析等,以及案例:互联网 ...

  9. python多元线性回归实例_Python机器学习多元线性回归模型 | kTWO-个人博客

    前言 在上一篇文章<机器学习简单线性回归模型>中我们讲解分析了Python机器学习中单输入的线性回归模型,但是在实际生活中,我们遇到的问题都是多个条件决定的问题,在机器学习中我们称之为多元 ...

最新文章

  1. OpenCV-Python,计算机视觉开发利器
  2. 《数字质量手册》新书问答
  3. java投票锁_Java并发编程锁之独占公平锁与非公平锁比较
  4. 开发日记-20190423 关键词 android静态代理类代理方法打断点debug 退出当前activity 闪退
  5. Java基础篇:equals()方法与==的区别
  6. git@github.com: Permission denied (publickey). fatal: Could not read from remote repository.
  7. java的修饰符_java默认的修饰符是什么
  8. 前端基础:call,apply,bind的的理解
  9. Kronecker 定理
  10. 树莓派c语言和笔记本,将树莓派变成笔记本电脑的5种方法
  11. 从计算机网络系统组成看 计算机网络可分为,从计算机网络系统组成的角度看,计算机网络可以分为 子网和资源子网。...
  12. 快上车!薅腾讯羊毛!
  13. 管理分区表:拆分、添加与交换分区
  14. 05.Linux 常用命令-网络命令\关机重启命令
  15. linux mtd 块设备,基于块设备子系统的MTD子系统(2.6.26)
  16. Mac配置item2高亮颜色
  17. 《图像超分辨率研究综述》笔记
  18. JSP SSH校园兼职信息发布平台myeclipse开发mysql数据库MVC模式java编程计算机网页设计
  19. C语言编码黄金螺旋线,阿基米德螺旋线
  20. FKMT--创建凭证模板

热门文章

  1. 一个“断更就封号”的高冷习惯养成类App「念」
  2. python解析flv协议(AMF数据)
  3. Kafka史上最详细的介绍!!!!!!!!
  4. 点滴力量 共创美好生活
  5. 创新社叶筱静受邀主持清华经管区块链前沿探讨
  6. 绕开“死循环”:苹果不靠英特尔处理器也能主导市场
  7. 呼叫中心客服工作心得
  8. 隐藏在手机中的第二个操作系统
  9. 1-性能测试方案与流程剖析
  10. GCC(GNU Compiler Collection,GNU编译器套件)