代码实现:

 # -*- coding: utf-8 -*-
"""
Created on Mon Jul 16 09:08:09 2018 @author: zhen
""" from sklearn.linear_model import LinearRegression, Ridge, Lasso
import mglearn
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import numpy as np
# 线性回归
x, y = mglearn.datasets.load_extended_boston()
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=0) linear_reg = LinearRegression()
lr = linear_reg.fit(x_train, y_train) print("lr.coef_:{}".format(lr.coef_)) # 斜率
print("lr.intercept_:{}".format(lr.intercept_)) # 截距 print("="*25+"线性回归"+"="*25)
print("Training set score:{:.2f}".format(lr.score(x_train, y_train)))
print("Rest set score:{:.2f}".format(lr.score(x_test, y_test))) """
总结:
训练集和测试集上的分数非常接近,这说明可能存在欠耦合。
训练集和测试集之间的显著性能差异是过拟合的明显标志。解决方式是使用岭回归!
"""
print("="*25+"岭回归(默认值1.0)"+"="*25)
# 岭回归
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))) print("="*25+"岭回归(alpha=10)"+"="*25)
# 岭回归
ridge_10 = Ridge(alpha=10).fit(x_train, y_train) print("Training set score:{:.2f}".format(ridge_10.score(x_train, y_train)))
print("Test set score:{:.2f}".format(ridge_10.score(x_test, y_test))) print("="*25+"岭回归(alpha=0.1)"+"="*25)
# 岭回归
ridge_01 = Ridge(alpha=0.1).fit(x_train, y_train) print("Training set score:{:.2f}".format(ridge_01.score(x_train, y_train)))
print("Test set score:{:.2f}".format(ridge_01.score(x_test, y_test))) # 可视化
fig = plt.figure(10)
plt.subplots_adjust(wspace =0, hspace =0.6)#调整子图间距
ax1 = plt.subplot(2, 1, 1) ax2 = plt.subplot(2, 1, 2) ax1.plot(ridge_01.coef_, 'v', label="Ridge alpha=0.1")
ax1.plot(ridge.coef_, 's', label="Ridge alpha=1")
ax1.plot(ridge_10.coef_, '^', label="Ridge alpha=10") ax1.plot(lr.coef_, 'o', label="LinearRegression") ax1.set_ylabel("Cofficient magnitude")
ax1.set_ylim(-25,25)
ax1.hlines(0, 0, len(lr.coef_))
ax1.legend(ncol=2, loc=(0.1, 1.05)) print("="*25+"Lasso回归(默认配置)"+"="*25)
lasso = Lasso().fit(x_train, y_train) print("Training set score:{:.2f}".format(lasso.score(x_train, y_train)))
print("Test set score:{:.2f}".format(lasso.score(x_test, y_test)))
print("Number of features used:{}".format(np.sum(lasso.coef_ != 0))) print("="*25+"Lasso回归(aplpha=0.01)"+"="*25)
lasso_001 = Lasso(alpha=0.01, max_iter=1000).fit(x_train, y_train) print("Training set score:{:.2f}".format(lasso_001.score(x_train, y_train)))
print("Test set score:{:.2f}".format(lasso_001.score(x_test, y_test)))
print("Number of features used:{}".format(np.sum(lasso_001.coef_ != 0))) print("="*15+"Lasso回归(aplpha=0.0001)太小可能会过拟合"+"="*15)
lasso_00001 = Lasso(alpha=0.0001, max_iter=1000).fit(x_train, y_train) print("Training set score:{:.2f}".format(lasso_00001.score(x_train, y_train)))
print("Test set score:{:.2f}".format(lasso_00001.score(x_test, y_test)))
print("Number of features used:{}".format(np.sum(lasso_00001.coef_ != 0))) # 可视化
ax2.plot(ridge_01.coef_, 'o', label="Ridge alpha=0.1")
ax2.plot(lasso.coef_, 's', label="lasso alpha=1")
ax2.plot(lasso_001.coef_, '^', label="lasso alpha=0.001")
ax2.plot(lasso_00001.coef_, 'v', label="lasso alpha=0.00001") ax2.set_ylabel("Cofficient magnitude")
ax2.set_xlabel("Coefficient index")
ax2.set_ylim(-25,25)
ax2.legend(ncol=2, loc=(0.1, 1))

结果:

总结:各回归算法在相同的测试数据中表现差距很多,且算法内的配置参数调整对自身算法的效果影响也是巨大的,

  因此合理挑选合适的算法和配置合适的配置参数是使用算法的关键!

回归算法比较(线性回归,Ridge回归,Lasso回归)的更多相关文章

  1. 线性回归大结局(岭(Ridge)、 Lasso回归原理、公式推导),你想要的这里都有

    本文已参与「新人创作礼」活动,一起开启掘金创作之路. 线性模型简介 所谓线性模型就是通过数据的线性组合来拟合一个数据,比如对于一个数据 \(X\) \[X = (x_1, x_2, x_3, ..., ...

  2. Lasso回归算法: 坐标轴下降法与最小角回归法小结

    前面的文章对线性回归做了一个小结,文章在这: 线性回归原理小结.里面对线程回归的正则化也做了一个初步的介绍.提到了线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归.但是对 ...

  3. 多元线性回归模型的特征压缩:岭回归和Lasso回归

    多元线性回归模型中,如果所有特征一起上,容易造成过拟合使测试数据误差方差过大:因此减少不必要的特征,简化模型是减小方差的一个重要步骤.除了直接对特征筛选,来也可以进行特征压缩,减少某些不重要的特征系数 ...

  4. SparkMLlib学习分类算法之逻辑回归算法

    SparkMLlib学习分类算法之逻辑回归算法 (一),逻辑回归算法的概念(参考网址:http://blog.csdn.net/sinat_33761963/article/details/51693 ...

  5. SparkMLlib分类算法之逻辑回归算法

    SparkMLlib分类算法之逻辑回归算法 (一),逻辑回归算法的概念(参考网址:http://blog.csdn.net/sinat_33761963/article/details/5169383 ...

  6. LASSO回归与L1正则化 西瓜书

    LASSO回归与L1正则化 西瓜书 2018年04月23日 19:29:57 BIT_666 阅读数 2968更多 分类专栏: 机器学习 机器学习数学原理 西瓜书   版权声明:本文为博主原创文章,遵 ...

  7. 线性回归——lasso回归和岭回归(ridge regression)

    目录 线性回归--最小二乘 Lasso回归和岭回归 为什么 lasso 更容易使部分权重变为 0 而 ridge 不行? References 线性回归很简单,用线性函数拟合数据,用 mean squ ...

  8. Spark MLlib回归算法------线性回归、逻辑回归、SVM和ALS

    Spark MLlib回归算法------线性回归.逻辑回归.SVM和ALS 1.线性回归: (1)模型的建立: 回归正则化方法(Lasso,Ridge和ElasticNet)在高维和数据集变量之间多 ...

  9. 【机器学习】正则化的线性回归 —— 岭回归与Lasso回归

    注:正则化是用来防止过拟合的方法.在最开始学习机器学习的课程时,只是觉得这个方法就像某种魔法一样非常神奇的改变了模型的参数.但是一直也无法对其基本原理有一个透彻.直观的理解.直到最近再次接触到这个概念 ...

随机推荐

  1. java基础( 九)-----深入分析Java的序列化与反序列化

    序列化是一种对象持久化的手段.普遍应用在网络传输.RMI等场景中.本文通过分析ArrayList的序列化来介绍Java序列化的相关内容.主要涉及到以下几个问题: 怎么实现Java的序列化 为什么实现了 ...

  2. Visual Studio 2019 发布活动 - 2019 年 4 月 2 日

    Visual Studio 2019 发布活动 2019 年 4 月 2 日,星期二 | 上午 9:00 (PT) 围观: https://visualstudio.microsoft.com/zh- ...

  3. 『vue踩坑日常』 在index.html中引入静态文件不生效

    Vue日常踩坑日常 -- 在index.html中引入静态文件不生效问题 本文针对的是Vue小白,不喜勿喷,谢谢 出现该问题的标志如下 控制台warning(Resource interpreted ...

  4. Android音视频之AudioRecord录音(一)

    在音视频开发中,录音当然是必不可少的.首先我们要学会单独的录音功能,当然这里说的录音是指用AudioRecord来录音,读取录音原始数据,读到的就是所谓的PCM数据.对于录音来说,最重要的几个参数要搞 ...

  5. 一目了然呀的VS2017 Live Test

    刚刚试用了一下VS2017中的单元测试,发现,这一次,覆盖测试会自动标记出来.不用像以前一样要他细检查了.这次会自动帮你全部标记出来. 新建单元测试,使用MS的单元测试方案(VSTS使用的时候方便.) ...

  6. WPF软件开发系统之三——自助购票取票、自助选座系统

    本系统使用.Net WPF开发,运行于Windows操作系统,电脑或者触摸屏设备(包括竖屏). 本系统开发背景:景点.影院.或商场的自助购票.取票系统. 图书馆.自习室的选座.占座系统. 功能包括:选 ...

  7. 深入理解 new 操作符

    和其他高级语言一样 JavaScript 也有 new 操作符,我们知道 new 可以用来实例化一个类,从而在内存中分配一个实例对象. 但在 JavaScript 中,万物皆对象,为什么还要通过 ne ...

  8. Scala的类层级讲解

    Scala的类层级 Scala里,每个类都继承自通用的名为Any的超类. 因为所有的类都是Any的子类,所以定义在Any中的方法就是"共同的"方法:它们可以被任何对象调用. Sca ...

  9. java常用工具(jps等)说明

    Java为我们提供了大量的工具辅助我们进行开发,位于jdk目录下的bin目录里,本篇博客将会随时更新相关工具的使用说明. jps 获取当前运行的java应用 lgj@lgj-Lenovo-G470:~ ...

  10. Vs 中关于项目中的某 NuGet 程序包还原失败:找不到“xxx”版本的程序包“xxx”

    问题:     首先出现这个bug的是在我的vs2017社区版的ide上,这两天使用了出现了一个非常神奇的问题,就是我程序中的nuget包总提示找不到源文件,并且我点击Nuget还原的话还一直提示着一 ...