岭回归

岭回归是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。

使用sklearn.linear_model.Ridge进行岭回归

一个简单的例子

from sklearn.linear_model import Ridge
clf = Ridge(alpha=.5)
X = [[0,0],[0,0],[1,1]]
y = [0,.1,1]
clf.fit(X,y)
print(clf.coef_)
print(clf.intercept_)

运行结果如下:

使用方法

实例化

Ridge类已经设置了一系列默认的参数,因此clf = Ridge()即可以完成实例化。

但是,了解一下它的参数还是有必要的:

  • alpha:正则化项的系数

  • copy_X:是否对X数组进行复制,默认为True,如果选False的话会覆盖原有X数组

  • fit_intercept:是否需要计算截距

  • max_iter:最大的迭代次数,对于sparse_cglsqr而言,默认次数取决于scipy.sparse.linalg,对于sag而言,则默认为1000次。

  • normalize:标准化X的开关,默认为False

  • solver:在计算过程中选择的解决器

    • auto:自动选择
    • svd:奇异值分解法,比cholesky更适合计算奇异矩阵
    • cholesky:使用标准的scipy.linalg.solve方法
    • sparse_cg:共轭梯度法,scipy.sparse.linalg.cg,适合大数据的计算
    • lsqr:最小二乘法,scipy.sparse.linalg.lsqr
    • sag:随机平均梯度下降法,在大数据下表现良好。

    注:后四个方法都支持稀疏和密集数据,而sag仅在fit_intercept为True时支持密集数据。

  • tol:精度

  • random_statesag的伪随机种子

以上就是所有的初始化参数,当然,初始化后还可以通过set_params方法重新进行设定。

回归分析

在实例化Ridge类以后,就可以直接使用Ridge中集成的方法来进行回归了,与绝大多数的sklearn类一样,Ridge使用fit方法执行计算

  • fit(X,y,sample\_weight=None)X是一个array类型,这是特征矩阵,包含着数据集每一条记录的特征值(N*M),y是结果矩阵,同样是array类型,可以是N*1的形状,也可以是N*K的形状,sample_weight代表着权重,可以是一个实数,也可以给每一条记录分配一个值(array类型)。

得到回归函数后,我们可以通过predict来使用回归函数。

  • predict(X)X测试数据集,此方法将返回回归后的结果

对于模型的好坏,Ridge当然提供了评价的方法——score

  • score(X,y,sample_weight=None):X为测试数据,y是测试数据的实际值,类型与fit中的相同,sample是权重

在sklearn中并没有提供直接的查看回归方程的函数,因此查看的时候需要自己转化一下。其实,sklearn就是把相关系数和残差分开保存了,因此,查看的时候要调用coef_intercept_两个属性。

  • coef_:相关系数(array类型)
  • intercept_:截距,在fit_intercept=False的时候,将会返回0

可能有用的方法

这些方法在sklearn的基类中就已经集成,但在一般情况下,通常不会用到。

  • get_params(deep=True):这是获取Ridge实例属性取值的方法,可以忽略
  • set_params(**params):与get_params方法相对,是设置属性值,在岭回归中还是比较重要的,毕竟岭回归的alpha值在一开始可能并不知道,需要在一个范围内进行尝试,因此,利用这个方法来设置alpha值还是比较有用的。

以上就是Ridge的总体介绍,在现实生活中,一般不会想上面的实例中的直接使用定值来计算,下面是一个更实际一点的例子:

# Author: Fabian Pedregosa -- <fabian.pedregosa@inria.fr>
# License: BSD 3 clause import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model # X is the 10x10 Hilbert matrix
X = 1. / (np.arange(1, 11) + np.arange(0, 10)[:, np.newaxis])
y = np.ones(10) ###############################################################################
# Compute paths n_alphas = 200
alphas = np.logspace(-10, -2, n_alphas)
clf = linear_model.Ridge(fit_intercept=False) coefs = []
for a in alphas:
clf.set_params(alpha=a)
clf.fit(X, y)
coefs.append(clf.coef_) ###############################################################################
# Display results ax = plt.gca()
ax.set_color_cycle(['b', 'r', 'g', 'c', 'k', 'y', 'm']) ax.plot(alphas, coefs)
ax.set_xscale('log')
ax.set_xlim(ax.get_xlim()[::-1]) # reverse axis
plt.xlabel('alpha')
plt.ylabel('weights')
plt.title('Ridge coefficients as a function of the regularization')
plt.axis('tight')
plt.show()

这个例子中,alpha为1e-10~1e-2,以对数值等分,对每一个aplha进行一次计算,最后画出岭迹图。岭迹图的样子如下:

到此,岭回归的内容就结束了,我是sklearn的小小搬运工^_^/

sklearn学习笔记之岭回归的更多相关文章

  1. 机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归

    机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归 关键字:Logistic回归.python.源码解析.测试作者:米仓山下时间:2018- ...

  2. sklearn学习笔记

    用Bagging优化模型的过程:1.对于要使用的弱模型(比如线性分类器.岭回归),通过交叉验证的方式找到弱模型本身的最好超参数:2.然后用这个带着最好超参数的弱模型去构建强模型:3.对强模型也是通过交 ...

  3. sklearn学习笔记之简单线性回归

    简单线性回归 线性回归是数据挖掘中的基础算法之一,从某种意义上来说,在学习函数的时候已经开始接触线性回归了,只不过那时候并没有涉及到误差项.线性回归的思想其实就是解一组方程,得到回归函数,不过在出现误 ...

  4. sklearn学习笔记(一)——数据预处理 sklearn.preprocessing

    https://blog.csdn.net/zhangyang10d/article/details/53418227 数据预处理 sklearn.preprocessing 标准化 (Standar ...

  5. sklearn学习笔记之开始

    简介   自2007年发布以来,scikit-learn已经成为Python重要的机器学习库了.scikit-learn简称sklearn,支持包括分类.回归.降维和聚类四大机器学习算法.还包含了特征 ...

  6. sklearn学习笔记3

    Explaining Titanic hypothesis with decision trees decision trees are very simple yet powerful superv ...

  7. sklearn学习笔记2

    Text classifcation with Naïve Bayes In this section we will try to classify newsgroup messages using ...

  8. sklearn学习笔记1

    Image recognition with Support Vector Machines #our dataset is provided within scikit-learn #let's s ...

  9. Machine Learning 学习笔记 (3) —— 泊松回归与Softmax回归

    本系列文章允许转载,转载请保留全文! [请先阅读][说明&总目录]http://www.cnblogs.com/tbcaaa8/p/4415055.html 1. 泊松回归 (Poisson ...

随机推荐

  1. Scala学习之For、Function、Lazy(4)

    1.for的使用 for的使用在各种编程语言中是最常见的,这里只是聊聊for在Scala中的表现形式,由于Scala语言是完全面向对象的,所以直接导致for的不同呈现,下面举几个例子说明一下 obje ...

  2. jquery ajax 传数据到后台乱码的处理方法

    前台页面先对中文进行编码,如下红色字体: function saveCommentTemplate() { $.ajax({ cache : false, type:'get', dataType:' ...

  3. mysql 数据库表名大小写问题

    lower_case_table_names=1 原来Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:1.用root登录,修改 /usr/my.cnf: ...

  4. 3.php数据类型中NULL,"",0的比较

    <?php //赋值 $some1 = NULL; $some2 = 0; $some3 = ""; //0与NULL比较 echo $some1==$some2; echo ...

  5. PC京东登录页分析 curl

    w 正确的组合,没有显示新页面的数据. <!doctype html> <html> <head> </head> <?php include(' ...

  6. java中集合的扩容

    对于Java中的各种集合类,根据底层的具体实现,小结了一下大致有3种扩容的方式: 1.对于以散列表为底层数据结构实现的,(譬如hashset,hashmap,hashtable等),扩容方式为当链表数 ...

  7. Linux学习笔记(13)linux软件安装rpm与yum--理论篇

    该文章linux知识点如下 1.linux中 软件包介绍 2.linux源码软件安装 3.linux二进制软件安装 4.linux rpm软件包管理 5.linux yum软件包管理 1.linux中 ...

  8. android 6 (API 23) 及更高版本 面向 NDK 开发者的 Android 变更

    Android N 已经出来,有了好大的变化,对于我们开发者来说,最大的影响莫过于**NDK**相关东西. 以下是在中国谷歌开发者社区看到的.里面有好多的变化,欢迎大家来讨论. 发布人:开发顾问 Dm ...

  9. 有趣的Linux命令,让终端炫起来

    10条真心有趣的Linux命令 动画演示10个有趣但毫无用处的Linux命令 11个无用而有趣的Linux终端彩蛋 lolcat :一个在 Linux 终端中输出彩虹特效的命令行工具

  10. SpringMVC学习大纲

    PartA: 1.SpringMVC介绍 2.入门程序 3.SpringMVC架构讲解 a) 框架结构 b) 组件说明 4.SpringMVC整合MyBatis 5.参数绑定 a) SpringMVC ...