sklearn学习笔记之岭回归
岭回归
岭回归是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。
使用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_cg和lsqr而言,默认次数取决于scipy.sparse.linalg,对于sag而言,则默认为1000次。normalize:标准化X的开关,默认为Falsesolver:在计算过程中选择的解决器auto:自动选择svd:奇异值分解法,比cholesky更适合计算奇异矩阵cholesky:使用标准的scipy.linalg.solve方法sparse_cg:共轭梯度法,scipy.sparse.linalg.cg,适合大数据的计算lsqr:最小二乘法,scipy.sparse.linalg.lsqrsag:随机平均梯度下降法,在大数据下表现良好。
注:后四个方法都支持稀疏和密集数据,而
sag仅在fit_intercept为True时支持密集数据。tol:精度random_state:sag的伪随机种子
以上就是所有的初始化参数,当然,初始化后还可以通过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学习笔记之岭回归的更多相关文章
- 机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归
机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归 关键字:Logistic回归.python.源码解析.测试作者:米仓山下时间:2018- ...
- sklearn学习笔记
用Bagging优化模型的过程:1.对于要使用的弱模型(比如线性分类器.岭回归),通过交叉验证的方式找到弱模型本身的最好超参数:2.然后用这个带着最好超参数的弱模型去构建强模型:3.对强模型也是通过交 ...
- sklearn学习笔记之简单线性回归
简单线性回归 线性回归是数据挖掘中的基础算法之一,从某种意义上来说,在学习函数的时候已经开始接触线性回归了,只不过那时候并没有涉及到误差项.线性回归的思想其实就是解一组方程,得到回归函数,不过在出现误 ...
- sklearn学习笔记(一)——数据预处理 sklearn.preprocessing
https://blog.csdn.net/zhangyang10d/article/details/53418227 数据预处理 sklearn.preprocessing 标准化 (Standar ...
- sklearn学习笔记之开始
简介 自2007年发布以来,scikit-learn已经成为Python重要的机器学习库了.scikit-learn简称sklearn,支持包括分类.回归.降维和聚类四大机器学习算法.还包含了特征 ...
- sklearn学习笔记3
Explaining Titanic hypothesis with decision trees decision trees are very simple yet powerful superv ...
- sklearn学习笔记2
Text classifcation with Naïve Bayes In this section we will try to classify newsgroup messages using ...
- sklearn学习笔记1
Image recognition with Support Vector Machines #our dataset is provided within scikit-learn #let's s ...
- Machine Learning 学习笔记 (3) —— 泊松回归与Softmax回归
本系列文章允许转载,转载请保留全文! [请先阅读][说明&总目录]http://www.cnblogs.com/tbcaaa8/p/4415055.html 1. 泊松回归 (Poisson ...
随机推荐
- Scala学习之For、Function、Lazy(4)
1.for的使用 for的使用在各种编程语言中是最常见的,这里只是聊聊for在Scala中的表现形式,由于Scala语言是完全面向对象的,所以直接导致for的不同呈现,下面举几个例子说明一下 obje ...
- jquery ajax 传数据到后台乱码的处理方法
前台页面先对中文进行编码,如下红色字体: function saveCommentTemplate() { $.ajax({ cache : false, type:'get', dataType:' ...
- mysql 数据库表名大小写问题
lower_case_table_names=1 原来Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:1.用root登录,修改 /usr/my.cnf: ...
- 3.php数据类型中NULL,"",0的比较
<?php //赋值 $some1 = NULL; $some2 = 0; $some3 = ""; //0与NULL比较 echo $some1==$some2; echo ...
- PC京东登录页分析 curl
w 正确的组合,没有显示新页面的数据. <!doctype html> <html> <head> </head> <?php include(' ...
- java中集合的扩容
对于Java中的各种集合类,根据底层的具体实现,小结了一下大致有3种扩容的方式: 1.对于以散列表为底层数据结构实现的,(譬如hashset,hashmap,hashtable等),扩容方式为当链表数 ...
- Linux学习笔记(13)linux软件安装rpm与yum--理论篇
该文章linux知识点如下 1.linux中 软件包介绍 2.linux源码软件安装 3.linux二进制软件安装 4.linux rpm软件包管理 5.linux yum软件包管理 1.linux中 ...
- android 6 (API 23) 及更高版本 面向 NDK 开发者的 Android 变更
Android N 已经出来,有了好大的变化,对于我们开发者来说,最大的影响莫过于**NDK**相关东西. 以下是在中国谷歌开发者社区看到的.里面有好多的变化,欢迎大家来讨论. 发布人:开发顾问 Dm ...
- 有趣的Linux命令,让终端炫起来
10条真心有趣的Linux命令 动画演示10个有趣但毫无用处的Linux命令 11个无用而有趣的Linux终端彩蛋 lolcat :一个在 Linux 终端中输出彩虹特效的命令行工具
- SpringMVC学习大纲
PartA: 1.SpringMVC介绍 2.入门程序 3.SpringMVC架构讲解 a) 框架结构 b) 组件说明 4.SpringMVC整合MyBatis 5.参数绑定 a) SpringMVC ...