文章目录

  • 线性回归
    • 引入
    • 重要参数
    • 重要属性
    • 重要方法
    • 例子
  • 岭回归
    • 引入
    • 重要参数
    • 重要属性
    • 重要方法
    • 示例
  • Lasso 回归
    • 引入
    • 重要参数
    • 重要属性
    • 重要方法
    • 示例

本文主要讲一些sklearn中回归模型的使用,如果需要了解相关理论,请查阅: 【线性回归】面向新手的基础知识

线性回归

引入

from sklearn.linear_model import LinearRegression
# 默认参数如下:
LinearRegression(fit_intercept=True,normalize=False,copy_X=True,n_jobs=1)

重要参数

1,fit_intercept

bool类型,默认为True,表示是否计算截距(即 y = wx + b 中的 b ),推荐设置为True

2,normalize

bool类型,默认为False,表示是否对各个特征进行标准化(默认方法是:减去均值并除以 l2l_2l2​ 范数),推荐设置为True。如果设置为False,则建议在输入模型之前,手动进行标准化。

标准化的好处:

  1. 加速收敛

  2. 提升精度

注意:fit_intercept 设置为 False 时,将忽略此参数。

3,n_jobs

数值型,默认值为None。表示使用多少个处理器进行运算,当模型有多个回归目标( _targets > 1 )时,加速效果比较明显。推荐设置为 -1 ,此时会调用所有处理器。

重要属性

1,coef_

对应 X 各个特征的系数,绝对值越接近1,表示相关性越强。

2,intercept_

intercept_ 表示模型学习到的截距值。

注意:属性后面有下划线 _

重要方法

1,fit(X, y) ,训练模型

2,predict(X),使用模型进行预测

3,score(X, y),返回 R2R^2R2 值 (确定系数) ,越接近1说明拟合的效果越好。

例子

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score# 载入糖尿病数据集
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)# 只从中抽取一个特征
diabetes_X = diabetes_X[:, np.newaxis, 2]# 划分训练集与测试集
diabetes_X_train = diabetes_X[:-20]
diabetes_y_train = diabetes_y[:-20]
diabetes_X_test = diabetes_X[-20:]
diabetes_y_test = diabetes_y[-20:]# 线性回归模型
regr = linear_model.LinearRegression(fit_intercept=True, normalize=True, n_jobs=-1)
regr.fit(diabetes_X_train, diabetes_y_train)
diabetes_y_pred = regr.predict(diabetes_X_test)
print('系数: \n', regr.coef_)# 结果评估
print('均方误差: %.2f'% mean_squared_error(diabetes_y_test, diabetes_y_pred))
print('确定系数(R^2): %.2f'% r2_score(diabetes_y_test, diabetes_y_pred))# 绘图
plt.scatter(diabetes_X_test, diabetes_y_test,  color='black')
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3)
plt.show()

输出结果:

系数:
[938.23786125]
均方误差: 2548.07
确定系数(R^2): 0.47

岭回归

引入

# 加⼊L2正则化的线性回归
from sklearn.linear_model import Ridge
# 默认参数如下:
Ridge(alpha=1.0, fit_intercept=True, normalize=False, copy_X=True, max_iter=None, \tol=0.001, solver='auto', random_state=None)

重要参数

1,alpha

正则项系数,初始值为1,数值越大,则对复杂模型的惩罚力度越大。

调参方法:

  1. 给定alpha较小的值,例如0.1。
  2. 根据验证集准确率以10倍为单位增大或者减小参数值。
  3. 在找到合适的数量级后,在此数量级上微调。

合适的候选值:[0.001, 0.01, 0.1, 1, 10, 100]

2,fit_intercept

bool类型,默认为True,表示是否计算截距(即 y = wx + b 中的 b ),推荐设置为True

3,normalize

bool类型,默认为False,表示是否对各个特征进行标准化(默认方法是:减去均值并除以 l2l_2l2​ 范数),推荐设置为True。如果设置为False,则建议在输入模型之前,手动进行标准化。

标准化的好处:

  1. 加速收敛

  2. 提升精度

注意:fit_intercept 设置为 False 时,将忽略此参数。

4,solver

求解优化问题的算法,推荐保持默认值’auto’,可以根据数据类型选择最合适的算法。可选的算法有:

  1. ‘svd’,采⽤用奇异值分解的⽅方法来计算
  2. ‘cholesky’,采⽤用scipy.linalg.solve函数求得闭式解。
  3. ‘sparse_cg’,采⽤用scipy.sparse.linalg.cg函数来求取最优解。
  4. ‘lsqr’,使用scipy.sparse.linalg.lsqr 求解,它是最快的。
  5. ‘sag’,使用随机平均梯度下降,当n_samples和n_features都较大时,通常比其他求解器更快。

5,max_iter

数值型,部分求解器需要通过迭代实现,这个参数指定了模型优化的最大迭代次数,推荐保持默认值None

6,random_state

随机数种子,推荐设置一个任意整数,例如0,2020等,好处是模型可以复现。

7,n_jobs

数值型,默认值为None。表示使用多少个处理器进行运算,当模型有多个回归目标( _targets > 1 )时,加速效果比较明显。推荐设置为 -1 ,此时会调用所有处理器。

重要属性

1,coef_

对应 X 各个特征的系数,绝对值越接近1,表示相关性越强。

2,intercept_

intercept_ 表示模型学习到的截距值。

注意:属性后面有下划线 _

重要方法

1,fit(X, y) ,训练模型

2,predict(X),使用模型进行预测

3,score(X, y),返回 R2R^2R2 值 (确定系数) ,越接近1说明拟合的效果越好。

示例

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score# 载入糖尿病数据集
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)# 划分训练集与测试集
diabetes_X_train = diabetes_X[:-20]
diabetes_y_train = diabetes_y[:-20]
diabetes_X_test = diabetes_X[-20:]
diabetes_y_test = diabetes_y[-20:]# 岭回归模型
regr = linear_model.Ridge(alpha=0.001, fit_intercept=True, normalize=True, random_state=0)
regr.fit(diabetes_X_train, diabetes_y_train)
diabetes_y_pred = regr.predict(diabetes_X_test)
print('系数: \n', regr.coef_)# 结果评估
print('均方误差: %.2f'% mean_squared_error(diabetes_y_test, diabetes_y_pred))
print('确定系数(R^2): %.2f'% r2_score(diabetes_y_test, diabetes_y_pred))

输出:

系数:
[ 0.79171416 -236.95051097 511.18477367 327.22355517 -734.56024578
429.87194777 67.40320158 174.60152289 713.22832241 76.6722493 ]
均方误差: 2003.26
确定系数(R^2): 0.59

Lasso 回归

引入

from sklearn.linear_model import Lasso
Lasso(alpha=1.0, fit_intercept=True, normalize=False, precompute=False,
copy_X=True, max_iter=1000,tol=1e-4, warm_start=False,
positive=False,random_state=None,selection='cyclic')

重要参数

1,alpha

正则项系数,初始值为1,数值越大,则对复杂模型的惩罚力度越大。

调参方法:

  1. 给定alpha较小的值,例如0.1。
  2. 根据验证集准确率以10倍为单位增大或者减小参数值。
  3. 在找到合适的数量级后,在此数量级上微调。

合适的候选值:[0.001, 0.01, 0.1, 1, 10, 100]

2,fit_intercept

bool类型,默认为True,表示是否计算截距(即 y = wx + b 中的 b ),推荐设置为True

3,normalize

bool类型,默认为False,表示是否对各个特征进行标准化(默认方法是:减去均值并除以 l2l_2l2​ 范数),推荐设置为True。如果设置为False,则建议在输入模型之前,手动进行标准化。

标准化的好处:

  1. 加速收敛

  2. 提升精度

注意:fit_intercept 设置为 False 时,将忽略此参数。

4,precompute

bool 类型,默认值为False,决定是否提前计算Gram矩阵来加速计算。

5,max_iter

数值型,部分求解器需要通过迭代实现,这个参数指定了模型优化的最大迭代次数,推荐保持默认值None

6,warm_start

bool类型,默认值为False。如果为True,那么使⽤用前⼀次训练结果继续训练。否则从头开始训练。

7,positive

bool类型,默认值为False。如果为True,那么强制要求权重向量的分量都为正数。

9,selection

字符串,默认值为"cyclic"。它指定了了当每轮迭代的时候,选择权重向量的哪个分量来更新:

(1) “random”: 更新的时候,随机选择权重向量的⼀个分量来更更新。

(2) “cyclic”: 更新的时候,从前向后依次选择权重向量的⼀个分量来更新。

10,random_state

随机数种子,推荐设置一个任意整数,例如0,2020等,好处是模型可以复现。

11,n_jobs

数值型,默认值为None。表示使用多少个处理器进行运算,当模型有多个回归目标( _targets > 1 )时,加速效果比较明显。推荐设置为 -1 ,此时会调用所有处理器。

重要属性

1,coef_

对应 X 各个特征的系数,绝对值越接近1,表示相关性越强。

2,intercept_

intercept_ 表示模型学习到的截距值。

注意:属性后面有下划线 _

重要方法

1,fit(X, y) ,训练模型

2,predict(X),使用模型进行预测

3,score(X, y),返回 R2R^2R2 值 (确定系数) ,越接近1说明拟合的效果越好。

示例

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score# 载入糖尿病数据集
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)# 划分训练集与测试集
diabetes_X_train = diabetes_X[:-20]
diabetes_y_train = diabetes_y[:-20]
diabetes_X_test = diabetes_X[-20:]
diabetes_y_test = diabetes_y[-20:]# LASSO回归模型
regr = linear_model.Lasso(alpha=0.08, fit_intercept=True, normalize=True, \precompute=False,  copy_X=True, max_iter=1000,tol=1e-4, \warm_start=False, positive=False, random_state=None,\selection='cyclic')
regr.fit(diabetes_X_train, diabetes_y_train)
diabetes_y_pred = regr.predict(diabetes_X_test)
print('系数: \n', regr.coef_)# 结果评估
print('均方误差: %.2f'% mean_squared_error(diabetes_y_test, diabetes_y_pred))
print('确定系数(R^2): %.2f'% r2_score(diabetes_y_test, diabetes_y_pred))

输出:

系数:
[ 0. -170.70972431 510.82478065 290.22047462 -71.2270991
-0. -226.56455408 0. 480.30488212 54.40099876]
均方误差: 2004.60
确定系数(R^2): 0.59

可以看到有些系数为0,这也说明Lasso回归具有特征选择的作用。

参考文章:

sklearn.linear_model.LinearRegression

sklearn.linear_model.Ridge

sklearn.linear_model.Lasso

sklearn常用机器学习算法参数详解

sklearn 中的线性回归、岭回归、Lasso回归参数配置及示例相关推荐

  1. sklearn中的线性回归大家族

    1 概述 1.1 线性回归大家族 回归是一种应用广泛的预测建模技术,这种技术的核心在于预测的结果是连续型变量.决策树.随机森林.支持向量机的分类器等分类算法的预测标签是分类变量,多以{0,1}来表示, ...

  2. 机器学习(七)线性回归与岭回归Lasso回归与弹性网络与正则化

    机器学习(七) 线性回归 最小二乘法(Least Squares Method,简记为LSE)是一个比较古老的方法,源于天文学和测地学上的应用需要.在早期数理统计方法的发展中,这两门科学起了很大的作用 ...

  3. 普通线性回归/岭回归/lasso回归[x.T/np.dot/lrg.coef_/lrg.intercept_/Xw = y/r2_score]

    基础运算 导包 import numpy as np 随机产生数据集 a = np.random.randint(0,10,size = (2,3)) a Out: array([[2, 8, 2], ...

  4. 机器学习Sklearn实战——其他线性回归模型、逻辑回归

    线性回归岭回归套索回归比较 import numpy as np from sklearn.linear_model import LinearRegression,Ridge,Lasso#50样本, ...

  5. 岭回归Lasso回归

    转自:https://blog.csdn.net/dang_boy/article/details/78504258 https://www.cnblogs.com/Belter/p/8536939. ...

  6. 笔记︱范数正则化L0、L1、L2-岭回归Lasso回归(稀疏与特征工程)

    机器学习中的范数规则化之(一)L0.L1与L2范数 博客的学习笔记,对一些要点进行摘录.规则化也有其他名称,比如统计学术中比较多的叫做增加惩罚项:还有现在比较多的正则化. -------------- ...

  7. sklearn中的线性回归

    以前使用spss做数据分析,现在使用sklearn做回归并且计算R方,实验代码如下: import csv import pandas as pd import numpy as np from sk ...

  8. 2021-06-19 sklearn中的线性回归模型

    import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression ...

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

    python风控评分卡建模和风控常识(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005214003&am ...

最新文章

  1. 网关 0.0.0.0_久违的升级——全新米家智能多模网关
  2. 长江存储推消费级固态硬盘,Xtacking技术加持
  3. 通过CertEnroll在CA上(1创建证书请求2得到证书3安装证书)
  4. # EXP8 Web基础
  5. 便捷式计算机无线功能按钮,TP-Link TL-MR13U便携式无线路由器Client模式设置
  6. nuget 包管理器
  7. 【状压dp】AC Challenge
  8. 阿里云windows 2012服务器部署java web程序教程
  9. 【linux系统学习笔记】运行startx后Ubuntu密码正确进不去的问题
  10. python 指定时间内_python获取指定时间段内的随机不重复的时间点
  11. 搭建kafaka集群
  12. 在Django中使用F()函数
  13. K3C使用校园网折腾之路
  14. spring 实现小程序抖音去水印后台
  15. iOS开发-学习规划及阶段性目标,学习方法整理
  16. 微信小程序的wx.chooseImage如何把图片传给后端
  17. 数值分析Matlab三维数据网格图
  18. a标签,相对地址,绝对地址,锚点技术
  19. springboot实现高并发红包系统(java 全网最全包括语音口令 文字口令 普通 拼手气)
  20. Microsoft Mathematics(微软数学软件)

热门文章

  1. kaggle 相关知识汇总(转载+自己整理)
  2. 牛顿法中为何出现hessian矩阵
  3. 5.12 QR分解的阻尼倒数法和正则化方法区别
  4. mysql 全局select授权_MySQL的用户设置与授权
  5. java 类无法实例_Java无法从类实例访问类方法
  6. oracle11g 数据库导出报“ EXP-00003: 未找到段 (0,0) 的存储定义”错误的解决方案
  7. Docker发布应用程序指南
  8. SpringBoot2.x开发案例之整合Quartz任务管理系统
  9. 404错误,500错误页面的代表意思
  10. (转)Three challenges you’re going to face when building a chatbot