python实现岭回归_python机器学习:岭回归介绍
接着上节讨论,岭回归也是一种用于回归的线性模型,因此它的预测公式与普通的最小二乘法相同。但在岭回归中,对系数(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机器学习:岭回归介绍相关推荐
- python svr回归_python机器学习库scikit-learn:SVR的基本应用
scikit-learn是python的第三方机器学习库,里面集成了大量机器学习的常用方法.例如:贝叶斯,svm,knn等. scikit-learn的官网 : http://scikit-learn ...
- 用python做逻辑回归_python实现逻辑回归
首先得明确逻辑回归与线性回归不同,它是一种分类模型.而且是一种二分类模型. 首先我们需要知道sigmoid函数,其公式表达如下: 其函数曲线如下: sigmoid函数有什么性质呢? 1.关于(0,0. ...
- python数据预测模型算法_Python机器学习 预测分析核心算法
第1章关于预测的两类核心算法 1.1为什么这两类算法如此有用 1.2什么是惩罚回归方法 1.3什么是集成方法 1.4算法的选择 1.5构建预测模型的流程 1.5.1构造一个机器学习问题 1.5.2特征 ...
- python升维方法_python机器学习12:数据“升维”
1.向数据集添加交互式特征 在实际应用中,常常会遇到数据集的特征不足的情况,要解决这个问题,就需要对数据集的特征进行扩充.这里我们介绍两种在统计建模中常用的方法---交互式特征(Interaction ...
- python分类算法报告_Python机器学习(1)——决策树分类算法
1.决策树算法 决策树用树形结构对样本的属性进行分类,是最直观的分类算法,而且也可以用于回归.不过对于一些特殊的逻辑分类会有困难.典型的如异或(XOR)逻辑,决策树并不擅长解决此类问题. 决策树的构建 ...
- python线性回归算法简介_Python机器学习(二):线性回归算法
机器学习研究的问题分为分类问题和回归问题.分类问题很好理解,而回归问题就是找到一条曲线,可以最大程度地拟合样本特征和样本输出标记之间的关系.当给算法一个输入时,这条曲线可以计算出相应可能的输出.回归算 ...
- python训练模型测试模型_python 机器学习中模型评估和调参
在做数据处理时,需要用到不同的手法,如特征标准化,主成分分析,等等会重复用到某些参数,sklearn中提供了管道,可以一次性的解决该问题 先展示先通常的做法 import pandas as pd f ...
- python学习与数据挖掘_python机器学习与数据挖掘
爬虫 Python基础.数据分析扩展包Numpy.pandas.matplotlib,Python读取MySQL数据,Python爬虫及Scrapy框架,无监督机器学习算法聚类分析等,以及案例:互联网 ...
- python多元线性回归实例_Python机器学习多元线性回归模型 | kTWO-个人博客
前言 在上一篇文章<机器学习简单线性回归模型>中我们讲解分析了Python机器学习中单输入的线性回归模型,但是在实际生活中,我们遇到的问题都是多个条件决定的问题,在机器学习中我们称之为多元 ...
最新文章
- OpenCV-Python,计算机视觉开发利器
- 《数字质量手册》新书问答
- java投票锁_Java并发编程锁之独占公平锁与非公平锁比较
- 开发日记-20190423 关键词 android静态代理类代理方法打断点debug 退出当前activity 闪退
- Java基础篇:equals()方法与==的区别
- git@github.com: Permission denied (publickey). fatal: Could not read from remote repository.
- java的修饰符_java默认的修饰符是什么
- 前端基础:call,apply,bind的的理解
- Kronecker 定理
- 树莓派c语言和笔记本,将树莓派变成笔记本电脑的5种方法
- 从计算机网络系统组成看 计算机网络可分为,从计算机网络系统组成的角度看,计算机网络可以分为 子网和资源子网。...
- 快上车!薅腾讯羊毛!
- 管理分区表:拆分、添加与交换分区
- 05.Linux 常用命令-网络命令\关机重启命令
- linux mtd 块设备,基于块设备子系统的MTD子系统(2.6.26)
- Mac配置item2高亮颜色
- 《图像超分辨率研究综述》笔记
- JSP SSH校园兼职信息发布平台myeclipse开发mysql数据库MVC模式java编程计算机网页设计
- C语言编码黄金螺旋线,阿基米德螺旋线
- FKMT--创建凭证模板