文章目录

  • 一、从本文起学会快速阅读和学习
  • 二、线性回归的原理回顾及官方文档
  • 三、官方文档的分析
  • 四、举一反三
  • 五、小结
一、从本文起学会快速阅读和学习

本来是想把关于快速阅读的说明写在前一节,但最后还是觉得放在这个例子里面更加妥当。

首先要明确一点:快速阅读绝不等于读得快!真正的快速阅读实际上是明确阅读的要点,把最多的精力放在最重要的地方去细读;同时果断地减少甚至舍弃对不重要的点的阅读。比如有的文档可能有2000个单词,但实际上真正有用的部分就只有200词。如果只给你10分钟的时间,你去搞明白这200词的内容实际上并不困难。但如果每个点都想看明白,估计10分钟连这2000个词都还没认全时间就已经过去了。

那么与之对应的快速学习也是同样的道理。尤其在初学的时候,一定要把精力放在主干的知识框架上,而那些细枝末节的东西有空了或者遇到了再去慢慢看。相反如果一来就想一口气把所有的细节都弄清楚,那么很有可能掌握正确学习方法的同学已经在用sklearn做项目了,而你还在纠结线性回归的实现。

废话不多说,我们直接进入正题。

二、线性回归的原理回顾及官方文档

线性回归的公式非常简单:
y^(w,x)=w0+w1x1+...+wpxp\hat{y}(w, x) = w_0 + w_1 x_1 + ... + w_p x_p y^​(w,x)=w0​+w1​x1​+...+wp​xp​
这里 xix_ixi​ 代表输入向量的第 iii 维,wiw_iwi​则是参数的第 iii维, y^\hat{y}y^​ 是输出值。从原理上我们其实只关心两个问题:如何根据现有的数据算出它的参数?参数求出之后我们怎么用它来预测?

官方很直接地先给出了这样一段代码:

>>> import numpy as np
>>> from sklearn.linear_model import LinearRegression
>>> X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
>>> # y = 1 * x_0 + 2 * x_1 + 3
>>> y = np.dot(X, np.array([1, 2])) + 3
>>> reg = LinearRegression().fit(X, y)>>> reg.coef_
array([1., 2.])
>>> reg.intercept_
3.0000...
>>> reg.predict(np.array([[3, 5]]))
array([16.])

注意,上述叙述过程其实就是我们通常的学习新模型的方式。先看看原理,再直接粘代码。这种方式其实就是最简单直接的方式。但如果只是这样去复制粘贴,很显然是不行的。因为如果没有理解代码的涵义,那么遇到变化时就完全不知所措,到时候又得回来老老实实看原理,很显然这就很浪费时间。

回顾本文开头所讲,我们是要细读那些最重要的地方,很显然,这段代码就是我们要去细读的地方。

三、官方文档的分析

这段代码中前2行的代码只是导入对应的Numpy库和LinearRegression模块,可以忽略,要用的时候照着样子照抄即可,顶多注意一下这里把numpy取了一个别名叫np.

接下来3-5行是在生成原始数据。这里我们仔细观察一下。首先变量X很显然是输入变量,而注释中也很清楚地说明了输出变量的值是由公式 y=1∗x0+2∗x1+3y = 1 * x_0 + 2 * x_1 + 3y=1∗x0​+2∗x1​+3 得到的。那么这里我们仔细看一下两个变量的结构。我们将Xy分别输出:

Xarray([[1, 1],[1, 2],[2, 2],[2, 3]])
yarray([ 6,  8,  9, 11])

这里注意到,X 是一个5×25\times 25×2 的数组(和矩阵稍有不同,但形状完全一样),而y是一个一维的数组。由此可见,我们要用来拟合的数据,其输入变量必须是列向量,而输出的这个变量则相对自由(注意,这也是sklearn相对比较坑的一点;官方的说法是为了节省内存开销,但如果熟悉Matlab、R等相对更加专业的计算类程序的人容易觉得不适应)。那么明白了这一点,我们要输入怎样的数据就完全明确了。那么如果我们想换上自己的数据不外乎也就是把Xy 按照同样的格式输入即可。

接下来第6行就很有意思了。首先它是直接调用LinearRegression类的方法fit(X,y),直接实例化了一个线性回归模型,并且用上面生成的数据进行了拟合。看到这里就能够明白了,原来只需要把数据按照格式输入,就可以完成模型的拟合。事实上这段代码也可以改成以下形式:

reg = LinearRegression()
reg.fit(X, y)

因为fit()方法返回值其实是模型本身self,所以在初始化reg之后只需要直接调用fit(),它自己对应的系数值(属性)就被成功赋值。这种写法个人更为推荐,因为它虽然看起来多出一行,但整个运行的机制则显得更加清晰。

第9,11行就是系数和偏差值的展示。上面提到,注释中已经说明了数据就是由方程y=1∗x0+2∗x1+3y = 1 * x_0 + 2 * x_1 + 3y=1∗x0​+2∗x1​+3生成的,而这时我们看到系数值分别等于 1,2而偏差值是3,和理论模型完全一致。

重点在第13行,此时它调用了LinearRegression类的predict()方法。那么显然,这个方法就是利用拟合好的线性回归模型来计算新输入值对应的输出值。这里新输入值仍然和拟合时的格式保持一致。

那么小结一下,根据官方文档,要拟合一个线性回归模型并且预测出新值的话,其实只需要进行四个步骤:

  • 格式化数据,输入为n*d的数组,其中n表示数据的个数,d是维度;输出值是一维数组。
  • 初始化模型LinearReregression()
  • 拟合fit(X,y)
  • 预测predict(X_test)
四、举一反三

注意,到这里还并没有结束。一个成功的调包侠工程师,在看懂一段代码过后一定要进一步对其进行探索,那么这里我们容易想到几个问题:

  • 很显然上述的生成数据的方式太低效,我想用点随机的数据行不行?或者我想用更大一点的数据行不行?
  • 模型预测虽然可以做了,但想要评估一下预测结果行不行?
  • 我想把结果画出来行不行?

当然都可以。再当然,要实现这些方法就要用到其它的一些库和方法。

比如,上述例子只给了5个点,我想试一试 X={1,2,...,100}X = \left\{1,2,...,100 \right\}X={1,2,...,100}, y=0.3∗X+1y = 0.3*X+1y=0.3∗X+1,那么这里就涉及到numpy的应用了。比如我们可以用这种方法:

import numpy as np
X = np.reshape(np.arange(100),[-1,1])
y = 0.3*X + 1
reg.fit(X,y)

这段代码同样可以运行。但是注意到这里我们用到了另一个方法 np.reshape(),这是为了保证X满足fit函数的数据结构要求。如果去掉这个方法则会报错。

另外模型评估可以直接用reg.score(X,y),或者再去查询其它的模型评估方法。如果要画图则需要用到matplotlib

当然,后面两个问题就是在已经理解和掌握了LinearRegression()之后的扩展内容。实际上在完成了第1个问题时,我们就已经学会了如何使用这个方法了。

五、小结

本文详细讲解了sklearn中的线性回归模型LinearRegression()的使用。相信这会你已经发现我们并没有讲太多的原理,而是直接根据模型的功能去查询方的代码。再通过代码的内容详细分析了其中的关键点,即数据的结构(我们也可以更直接地叫它shape)。相信看完这篇文章顶多也花不了10分钟,但你已经掌握了LinearRegression的用法。至于更深的理论,更多花哨的用法,就在你具体的项目、研究中再去查询就好。

其它的模型,我们也会用类似的方法加以讲解。有兴趣的同学也可以试试用上述的方式去看看其它的模型,说不定会有意想不到的效果。

参考内容:

[1] LinearRegression类官方说明
[2]: LinearRegression官方示例

  • sklearn快速入门教程:(一)准备工作
  • sklearn快速入门教程:(三)机器学习的通用模式及实现方法
  • sklearn快速入门教程:(四)模型自动调参
  • sklearn快速入门教程:(五)集成学习

sklearn快速入门教程:(二)线性回归相关推荐

  1. sklearn快速入门教程:(五)集成学习

    sklearn快速入门教程–(五)集成学习 一.集成学习简述 集成学习是目前各类竞赛和工程中应用最广泛的模型提升方法.比如在kaggle中就有关于集成学习的介绍(Kaggle模型融合原文).这里所谓的 ...

  2. sklearn快速入门教程:(四)模型自动调参

    上个教程中我们已经看到在sklearn中调用机器学习模型其实非常简单.但要获得较好的预测效果则需要选取合适的超参数.在实际的项目中其实也有不少参数是由工程师借助其经验手动调整的,但在许多场景下这种方式 ...

  3. sklearn快速入门教程:(三)机器学习的通用模式及实现方法

    一.从线性回归总结机器学习的通用模式 从上篇博客我们详细讲述了线性回归的实现方式.线性回归的调用方式实际上是sklearn的典型方式,在掌握这个方法之后我们继续进一步深入,探索其它的模型的使用. 回顾 ...

  4. sklearn快速入门教程:(一)准备工作

    sklearn快速入门教程 – 准备工作 1. 前言 sklearn全称 scikit-learn,它是一个集成了目前市面上最常用的机器学习模型的库,使用起来非常轻松简单,因此获得了广泛的应用. 从官 ...

  5. sklearn快速入门教程:补充内容 -- sklearn模型评价指标汇总(聚类、分类、回归)

    sklearn集成了大多数模型评价指标,这可以很大程度上方便我们的使用,尤其在对进行进行自动调参时可以方便我们进行选择. 做下这个笔记主要是为了补充之前的内容:sklearn快速入门教程:(四)模型自 ...

  6. c语言类似于 n的标识符,C语言快速入门教程(二)

    C语言快速入门教程(二) C语言的基本语法 本节学习路线图: 引言: C语言,顾名思义就是一门语言,可以类比一下英语; 你要说出一个英语的句子需要: 单词 + 语法! 将单词按照一定的语法拼凑起来就成 ...

  7. sklearn 快速入门教程

    本教程使用于对理论知识具有一定的了解但编码能力稍弱且对sklearn不太了解的同学 本文为转载文章,原文地址:https://www.cnblogs.com/lianyingteng/p/781112 ...

  8. sklearn快速入门教程 -- 机器学习工具的快速入门指引

    本系列教程旨在提供一个直观.快速的入门指引,从应用的角度进行阐述,提供框架性的理解方式. 全程共5篇教程.若抛开下载和安装的过程,应在2小时左右全部阅读和动手测试完成. (一)准备工作 (二)线性回归 ...

  9. ThinkPHP3快速入门教程二:数据CURD

    CURD(创建[Create].更新[Updata].读取[Read].删除[Delete]),定义了用于处理数据的基本原子操作. CURD在具体的应用中并非一定使用create.updata.rea ...

最新文章

  1. 设置显示VSCode的修改历史Local History,方便多人开发的时候快速查看谁修改了代码(也可以防止误删代码文件)
  2. Mycat源码中的单例模式
  3. 实践lnmpde 的安装
  4. 【Web安全】Web开发中常见的安全误区
  5. linux(windows)之svn重定向地址
  6. linux数据泵恢复,Oracle Linux环境中使用数据泵的形式还原Oracle数据库
  7. sql server browser启动不了_沐浴书香,润泽童年 | 读书月启动仪式
  8. vim 使用、设置笔记
  9. android编译的错误日志,android编译遇到错误
  10. ubuntu16.04下ROS操作系统学习笔记(八)机器人SLAM与 Gmapping-Hector_slam-Cartographer--ORB_SLAM
  11. JS下载地图离线数据,前端下载谷歌离线地图
  12. 项目经理必备的基本职责
  13. Archlinux 安装软件(更新系统)报错
  14. 我承认 IDEA 2021.3 有点强!
  15. 次佛锅_上海理工大学2022天梯选拔
  16. iphone4s蜂窝数据连不上解决方案
  17. [ vulhub漏洞复现篇 ] Tiki Wiki CMS Groupware 认证绕过漏洞CVE-2020-15906
  18. 求模 和 求余 的区别
  19. C#中Dev配色修改
  20. Xmanager安装与使用攻略

热门文章

  1. MySQL数据库使用(二):配置、连接远端数据库
  2. 第五章:条件、循环以及其他语句(上)
  3. 183. Customers Who Never Order
  4. 3.4_函数_Function_Part_2
  5. Linux中chown和chmod的区别和用法(转)
  6. @MappedSuperclass注解的使用说明
  7. sql 把多列内容合并
  8. android7.1.2 user版本打开usb调试功能
  9. Android 5.1 添加硬件抽象层(HAL)和JNI接口总结
  10. Linux下触摸屏驱动程序分析