02-05 scikit-learn库之线性回归
- scikit-learn库之线性回归
- 一、LinearRegression
- 二、ARDRegression
- 三、BayesianRidge
- 四、ElasticNet
- 五、ElasticNetCV
- 六、Lasso
- 七、LassoCV
- 八、LassoLars
- 九、LassoLarsCV
- 十、LassoLarsIC
- 十一、MutilTaskLasso
- 十二、MutilTaskElasticNet
- 十三、MutilTaskLassoCV
- 十四、MutilTaskElasticNetCV
- 十五、OrthogonalMatchingPursuit
- 十六、OrthogonalMatchingPursuitCV
- 十七、RANSACRegressor
- 十八、Ridge
- 十九、RidgeCV
更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html
scikit-learn库之线性回归
由于scikit-learn库中sclearn.linear_model
提供了多种支持线性回归分析的类,本文主要总结一些常用的线性回归的类,并且由于是从官方文档翻译而来,翻译会略有偏颇,如果有兴趣想了解其他类的使用方法的同学也可以去scikit-learn官方文档查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.linear_model
在讲线性回归理论的时候讲到了,线性回归的目的是找到一个线性回归系数向量\(\omega\),使得输入特征\(X\)和输出向量\(Y\)之间有一个
\]
的映射关系,接下来的线性回归模型和线性回归模型的思想类似。假设一个数据集有\(m\)实例,每个实例有\(n\)个特征,则其中\(Y\)的维度是\(m*1\),\(X\)的维度是\(m*n\),\(\omega\)的维度是\(n*1\)。
使用线性回归的目的就是找到一个合适的线性回归系数\(\omega\)能够最小化我们定义的目标函数,又由于最小化目标函数的优化方法的不同,会有不同的线性回归算法。
由于其他版本的线性回归模型的参数类似于LinearRegression
,即其他类型的线性回归模型的参数详解都会跳过,只会讲解它与LinearRegression
的不同之处。我们接下来的目的就是为了给大家介绍scikit-learn库中常用的线性回归模型。
一、LinearRegression
1.1 使用场景
LinearRegression
回归模型,即我们在线性回归中讲到的普通线性回归,该普通线性回归可以处理一元线性回归,也可以处理多元线性回归,但是该类使用的优化方法是最小二乘法。
通常情况下该类是我们使用线性回归处理线性问题的首选方法,因为它的目标函数较其他线性回归简单,计算量小,如果它拟合数据出现过拟合问题则可以考虑使用正则化形式的线性回归。
1.2 代码
import numpy as np
from sklearn.linear_model import LinearRegression
X = np.array([[2, 0], [1, 9], [6, 6], [8, 8]])
# y = 1 * x_0 + 2 * x_1 + 3
y = np.dot(X, np.array([6, 8])) + 3
reg = LinearRegression()
reg.fit(X, y)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,
normalize=False)
reg.score(X, y)
1.0
reg.coef_
array([6., 8.])
reg.intercept_
2.999999999999986
reg.predict(np.array([[8, 6]]))
array([99.])
1.3 参数详解
- fit_intercept:截距(偏置单元),bool类型。是否存在截距或者偏置单元。如果使用中心化的数据(中心点为0的数据),可以考虑设置fit_intercept=False。默认为True。
- normalize:标准化数据,bool类型。当fit_intercept=False的时候,这个参数会被自动忽略;如果fit_intercept=True,回归器会标准化输入数据,该标准化方式为:减去平均值,并且除以相应的二范数。建议在使用fit()训练模型之前使用sklearn.preprocessing.StandardScaler对数据标准化,同时设置normalize=False。默认为False。
- copy_X:复制数据,bool类型。如果copy_X=False,可能会因为对数据中心化把原始X数据覆盖。默认为True。
- n_jobs:并行数,int类型。n_jobs=1使用1个cpu运行程序;n_jobs=2,使用2个cpu运行程序;n_jobs=-1,使用所有cpu运行程序。默认为1。
1.4 属性
- coef_:array类型,线性回归系数。
- intercept_:array类型,截距。
1.5 方法
- fit(X,y,sample_weight=None):把数据放入模型中训练模型,其中sample_weight=None是array类型可以对训练集中实例添加权重,即对训练集中不同的数据增加不同的权重。
- get_params([deep]):返回模型的参数,例如可以用于Pipeline中。
from sklearn.pipeline import Pipeline
p =Pipeline([
('poly', PolynomialFeatures()),
('linear', LinearRegression(fit_intercept=False))])
lin = p.get_params('linear')['linear']
print(lin.coef_)
- predict(X):通过样本X得到X对应的预测值。
- score(X, y[, sample_weight]):基于报告决定系数\(R^2\)评估模型。
- set_prams(**params):创建模型参数。
1.5.1 报告决定系数
报告决定系数\((R^2)\),可以理解成MSE的标准版,\(R^2\)的公式为
\]
其中\(\mu_{(y)}\)是\(y\)的平均值,即\({{\frac{1}{n}}\sum_{i=1}^n(y^{(i)}-\mu_{(y)})^2}\)为\(y\)的方差,公式可以写成
\]
\(R^2\)的取值范围在\(0-1\)之间,如果\(R^2=1\),则均方误差\(MSE=0\),即模型完美的拟合数据。
二、ARDRegression
当数据集中有很多缺失值或异常值时使用ARDRegression
模型,该模型属于贝叶斯回归模型。该模型会对模型输出\(Y\)和模型参数\(\omega\)作出分布假设,并且正则化参数alpha也会从数据中估计得到,虽然该模型对异常值鲁棒性很好,但由于该模型计算量大,耗时,一般情况不推荐使用,此处不多赘述。
三、BayesianRidge
该模型类似于ARDRegression
模型,两者都属于贝叶斯回归,不同之处在于对\(\omega\)的分布假设不同。由于该模型的目标函数类似于Ridge
模型的目标函数,因此取名BayesianRidge
。但由于该模型同样计算量大,耗时,一般情况下也不推荐使用,此处不多赘述。
四、ElasticNet
ElasticNet
模型的优化方法是坐标轴下降法,该模型由L1正则化和L2正则化的加权得到,如果使用L1正则化和L2正则化都不行的时候,可以考虑使用该模型。
该模型由于增加了参数alpha和l1_ratio,需要手动调参,通常使用接下来的LassoCV
。
五、ElasticNetCV
ElasticNetCV
模型在目标函数和优化方式类似于ElasticNet
,但是可以自己手动输入10组、100组参数alpha和l1_ratio,该模型会通过交叉验证后给你这组参数中最优模型。
六、Lasso
Lasso
模型的优化方法是坐标轴下降法,该模型即线性回归L1正则化,该。如果数据集的特征维度较高,可以使用该模型,该模型可以把一些较小的回归系数直接变为\(0\),由于减少了数据集的特征维度,也会间接的减轻模型过拟合问题,增强模型的泛化能力。
该模型由于会把一些较小的回归系数变为\(0\),既可以找出重要的特征,对数据集的解释能力强。
该模型由于增加了参数alpha,需要手动调参,通常使用接下来的LassoCV
。
七、LassoCV
LassoCV
模型在目标函数和优化方式类似于Lasso
,但是可以自己手动输入10组、100组参数alpha,该模型会通过交叉验证后给你这组参数中最优模型。
八、LassoLars
LassoLars
模型的优化方法是最小角回归法,该模型类似于Lasso
模型,但是该模型优化方法为。
该模型由于增加了参数alpha,需要手动调参,通常使用接下来的LassoLarsCV
。
九、LassoLarsCV
LassoLarsCV
模型在目标函数和优化方式类似于LassoLars
,但是可以自己手动输入10组、100组参数alpha,该模型会通过交叉验证后给你这组参数中最优模型。
十、LassoLarsIC
LassoLarsIC
模型类似于Lasso
模型,不同之处在于它并不使用交叉验证的方式得到最优模型。它基于AIC和BIC准则,一轮就可以找到找到一个最优alpha和最优模型,而交叉验证如果使用\(k\)折交叉验证,则需要\(k-1\)次才能找到最优模型。
该模型从上述讲述看起来是很完美的,但是该模型要求数据集是由某个假设的模型产生的,并且如果当特征数量大于实例数量的时候该模型可能会成为一个较差的模型,所以在工业上一般不推荐使用。
十一、MutilTaskLasso
MutilTaskLasso
模型的优化方法是坐标轴下降法,模型中的MutilTask可以理解成“多个”而不是“多进程”,即一次性使用多个L1正则化线性回归模型拟合数据,有时候也称之为共享特征协同回归。
普通线性回归的模型是
\]
其中假设一个数据集有\(m\)实例,每个实例有\(n\)个特征,则其中\(Y\)的维度是\(m*1\),\(X\)的维度是\(m*n\),\(\omega\)的维度是\(n*1\)。
该模型去掉正则化项是
\]
其中假设一个数据集有\(m\)实例,每个实例有\(n\)个特征,则其中\(Y\)的维度是\(m*k\),\(X\)的维度是\(m*n\),\(W\)的维度是\(n*k\),其中\(k\)为回归模型的个数,即该模型的fit()方法可以传入\(k\)维的特征。
该模型由于增加了参数alpha和\(k\),需要手动调参,通常使用接下来的MutilTaskLassoCV
。
十二、MutilTaskElasticNet
MutilTaskElasticNet
模型的优化方法是坐标轴下降法,该模型类似于MutilTaskLasso
模型,只是在正则化项上前者使用了L1正则项,后者使用了弹性网络正则项。
该模型由于增加了参数alpha和l1_ratio,需要手动调参,通常使用接下来的LassoCV
。
十三、MutilTaskLassoCV
MutilTaskLassoCV
模型在目标函数和优化方式类似于MutilTaskLasso
,但是可以自己手动输入10组、100组参数alpha,该模型会通过交叉验证后给你这组参数中最优模型。
十四、MutilTaskElasticNetCV
该模型在目标函数和优化方式类似于Lasso
,但是可以自己手动输入10组、100组参数alpha和l1_ratio,该模型会通过交叉验证后给你这组参数中最优模型。
十五、OrthogonalMatchingPursuit
OrthogonalMatchingPursuit
模型优化方法是前向选择算法,优化方法速度虽然快,但是精确度较低。
该模型使用参数n_nonzero_coefs限制模型参数\(\omega\)向量中元素非\(0\)的个数,由于该特征可以用于稀疏特征模型的特征选择上,这一点类似于Lasso
模型,但是由于优化方法前向选择算法,一般不推荐使用。
该模型由于增加了参数n_nonzero_coefs,需要手动调参,通常使用接下来的LassoCV
。
十六、OrthogonalMatchingPursuitCV
OrthogonalMatchingPursuitCV
模型在目标函数和优化方式类似于OrthogonalMatchingPursuitCV
,但是可以自己手动输入10组、100组参数n_nonzero_coefs,该模型会通过交叉验证后给你这组参数中最优模型。
十七、RANSACRegressor
RANSACRegressor
模型使用的优化算法是RANSACR算法,该算法可以控制使用部分区域的数据集训练模型。
可以参考《RANSAC算法线性回归(波斯顿房价预测)》。
十八、Ridge
Ridge
模型的优化方法是最小二乘法,该模型即线性回归L2正则化,一般使用LinearRegression
模型时模型过拟合时可以使用该方法。
由于额外增加了alpha参数,一般情况下需要自己手动调参,所以可以在自己测试的时候使用,一般工业上使用较多的是接下来的RidgeCV
。
十九、RidgeCV
RidgeCV
模型在目标函数和优化方式类似于Ridge
,但是可以自己手动输入10组、100组参数alpha,该模型会通过交叉验证后给你这组参数中最优模型。
02-05 scikit-learn库之线性回归的更多相关文章
- (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探
一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...
- Scikit Learn: 在python中机器学习
转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...
- scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)
scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...
- 【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用
[网络爬虫入门02]HTTP客户端库Requests的基本原理与基础应用 广东职业技术学院 欧浩源 1.引言 实现网络爬虫的第一步就是要建立网络连接并向服务器或网页等网络资源发起请求.urllib是 ...
- (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探
目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...
- 怎样用Python的Scikit-Learn库实现线性回归?
来源商业新知号网,原标题:用Python的Scikit-Learn库实现线性回归 回归和分类是两种 监督 机器 学习算法, 前者预测连续值输出,而后者预测离散输出. 例如,用美元预测房屋的价格是回归问 ...
- Scikit Learn
Scikit Learn Scikit-Learn简称sklearn,基于 Python 语言的,简单高效的数据挖掘和数据分析工具,建立在 NumPy,SciPy 和 matplotlib 上.
- python进阶05 常用问题库(1)json os os.path模块
python进阶05 常用问题库(1)json os os.path模块 一.json模块(数据交互) web开发和爬虫开发都离不开数据交互,web开发是做网站后台的,要跟网站前端进行数据交互 1.什 ...
- 使用TensorFlow v2库实现线性回归
使用TensorFlow v2库实现线性回归 此示例使用简单方法来更好地理解训练过程背后的所有机制 from __future__ import absolute_import, division, ...
随机推荐
- webpack4.0 babel配置遇到的问题
babel配置 babel版本升级到8.x之后发现出现了很多问题.首先需要安装 "@babel/core": "^7.1.2", "@babel/pl ...
- spring boot使用AOP切面编程
spring boot使用AOP 1.在pom文件中添加依赖: <!--spring boot aop切面--> <dependency> <groupId>org ...
- JDBC进行批处理Batch
在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. JDBC实现批处理有两种方式:statement和pr ...
- 《即时消息技术剖析与实战》学习笔记7——IM系统的消息未读
一.什么是消息未读 消息未读包括会话未读和总未读.前者指的是当前用户和某一聊天方的未读消息数,后者指的是当前用户的所有未读消息数,也就是所有会话未读的和.比如用户A收到用户B的2条消息,还收到用户C的 ...
- linux无法用root账号ssh登录(putty)
解决方法: 在kali打开终端,修改ssh配置文件. vi /etc/ssh/sshd_config 将PermitRootLogin, 改成PermitRootLogin yes.(允许用root登 ...
- CSS——设置背景
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Promise.all结合数组Map用法
Promise.all(iterable) 方法返回一个 Promise 实例,此实例在 iterable 参数内所有的 promise 都“完成(resolved)”或参数中不包含 promise ...
- 【linux】【Fabric】Centos7搭建Fabric运行环境
1.安装jdk1.8配置环境变量 参考:https://www.cnblogs.com/jxd283465/p/11541506.html 2.安装git yum -y install git 3.安 ...
- 【linux】【jenkins】自动化运维二 安装插件
gitlab安装教程参考:https://www.cnblogs.com/jxd283465/p/11525629.html 1.Maven Integration Plugins Jenkins安装 ...
- Rsync 服务部署与参数详解
Rsync 简介 rsync 是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.Rsync软件适用于unix/linux/windows等多种操作系统平台. 传统的 ...