今天,让我们来谈谈线性回归。没错,作为数据科学界元老级的模型,线性回归几乎是所有数据科学家的入门必修课。抛开涉及大量数统的模型分析和检验不说,你真的就能熟练应用线性回归了么?未必!

“宝刀不老”的线性回归

时至今日,深度学习早已成为数据科学的新宠。即便往前推10年,SVM、boosting等算法也能在准确率上完爆线性回归。

为什么我们还需要线性回归呢?

一方面,线性回归所能够模拟的关系其实远不止线性关系。线性回归中的“线性”指的是系数的线性,而通过对特征的非线性变换,以及广义线性模型的推广,输出和特征之间的函数关系可以是高度非线性的。另一方面,也是更为重要的一点,线性模型的易解释性使得它在物理学、经济学、商学等领域中占据了难以取代的地位。

那么,如何用Python来实现线性回归呢?

由于机器学习库scikit-learn的广泛流行,常用的方法是从该库中调用linear_model来拟合数据。虽然这可以提供机器学习的其他流水线特征(例如:数据归一化,模型系数正则化,将线性模型传递到另一个下游模型)的其他优点,但是当一个数据分析师需要快速而简便地确定回归系数(和一些基本相关统计量)时,这通常不是最快速简便的方法。

下面,我将介绍一些更快更简洁的方法,但是它们所提供信息量和建模的灵活性不尽相同。

8种方法实现线性回归

方法一:Scipy.polyfit( ) or numpy.polyfit( )

这是一个最基本的最小二乘多项式拟合函数(least squares polynomial fit function),接受数据集和任何维度的多项式函数(由用户指定),并返回一组使平方误差最小的系数。这里给出函数的详细描述。对于简单的线性回归来说,可以选择1维函数。但是如果你想拟合更高维的模型,则可以从线性特征数据中构建多项式特征并拟合模型。

方法二:Stats.linregress( )

这是一个高度专业化的线性回归函数,可以在SciPy的统计模块中找到。然而因为它仅被用来优化计算两组测量数据的最小二乘回归,所以其灵活性相当受限。因此,不能使用它进行广义线性模型和多元回归拟合。但是,由于其特殊性,它是简单线性回归中最快速的方法之一。除了拟合的系数和截距项之外,它还返回基本统计量,如R2系数和标准差。

方法三:Optimize.curve_fit( )

这与Polyfit方法是一致的,但本质上更具一般性。这个强大的函数来自scipy.optimize模块,可以通过最小二乘最小化将任意的用户自定义函数拟合到数据集上。

对于简单的线性回归来说,可以只写一个线性的mx + c函数并调用这个估计函数。不言而喻,它也适用于多元回归,并返回最小二乘度量最小的函数参数数组以及协方差矩阵。

方法四:numpy.linalg.lstsq

这是通过矩阵分解计算线性方程组的最小二乘解的基本方法。来自numpy包的简便线性代数模块。在该方法中,通过计算欧几里德2-范数||b-ax||2最小化的向量x来求解等式ax = b。

该方程可能有无数解、唯一解或无解。如果a是方阵且满秩,则x(四舍五入)是方程的“精确”解。

你可以使用这个方法做一元或多元线性回归来得到计算的系数和残差。一个小诀窍是,在调用函数之前必须在x数据后加一列1来计算截距项。这被证明是更快速地解决线性回归问题的方法之一。

方法五:Statsmodels.OLS ( )

Statsmodels是一个小型的Python包,它为许多不同的统计模型估计提供了类和函数,还提供了用于统计测试和统计数据探索的类和函数。每个估计对应一个泛结果列表。可根据现有的统计包进行测试,从而确保统计结果的正确性。

对于线性回归,可以使用该包中的OLS或一般最小二乘函数来获得估计过程中的完整的统计信息。

一个需要牢记的小技巧是,必须手动给数据x添加一个常数来计算截距,否则默认情况下只会得到系数。以下是OLS模型的完整汇总结果的截图。结果中与R或Julia等统计语言一样具有丰富的内容。

方法六和七:使用矩阵的逆求解析解

对于条件良好的线性回归问题(其中,至少满足数据点个数>特征数量),系数求解等价于存在一个简单的闭式矩阵解,使得最小二乘最小化。由下式给出:

这里有两个选择:

(a)使用简单的乘法求矩阵的逆

(b)首先计算x的Moore-Penrose广义伪逆矩阵,然后与y取点积。由于第二个过程涉及奇异值分解(SVD),所以它比较慢,但是它可以很好地适用于没有良好条件的数据集。

方法八:sklearn.linear_model.LinearRegression( )

这是大多数机器学习工程师和数据科学家使用的典型方法。当然,对于现实世界中的问题,它可能被交叉验证和正则化的算法如Lasso回归和Ridge回归所取代,而不被过多使用,但是这些高级函数的核心正是这个模型本身。

八种方法效率比拼

作为一名数据科学家,应该一直寻找准确且快速的方法或函数来完成数据建模工作。如果模型本来就很慢,那么会对大数据集造成执行瓶颈。

简单矩阵逆求解的方案更快

作为数据科学家,我们必须一直探索多种解决方案来对相同的任务进行分析和建模,并为特定问题选择最佳方案。

在本文中,我们讨论了8种简单线性回归的方法。大多数都可以扩展到更一般化的多元和多项式回归建模中。

本文的目标主要是讨论这些方法的相对运行速度和计算复杂度。我们在一个数据量持续增加的合成数据集(最多达1000万个样本)上进行测试,并给出每种方法的运算时间。

令人惊讶的是,与广泛被使用的scikit-learnlinear_model相比,简单矩阵的逆求解的方案反而更加快速。

干货丨8种用Python实现线性回归的方法相关推荐

  1. python 线性回归函数_8种用Python实现线性回归的方法,究竟哪个方法最高效?

    大数据文摘作品 作者:TirthajyotiSarkar 编译:丁慧.katherine Hou.钱天培 说到如何用Python执行线性回归,大部分人会立刻想到用sklearn的linear_mode ...

  2. python检索论文_一种基于Python的音乐检索方法的研究

    应用技术 0 前言 最近两年,人们对于流行音乐的追求与需求量日益增 加,但如何保证用户能在不知歌名只知歌词的情况下,完成 自己的全方面多种类的听歌需求呢?于是,电脑工程师就推 出了"听歌识曲 ...

  3. 电气simulink常用模块_干货丨16种常用模块电路分析,工程师的必备~

    电路图一大张,看似复杂,但也都是由一小块一小块的功能模块组成的.因此要根据大的功能先划分成块,再在块里面看是通过什么电路形式实现的,有些起辅助作用,有些起主要作用.下面小编给大家整理了16种常用的模块 ...

  4. 如何解决json中携带的反斜杠_【经验分享】python干货:5种反扒机制的解决方法...

    前言 反爬虫是网站为了维护自己的核心安全而采取的抑制爬虫的手段,反爬虫的手段有很多种,一般情况下除了百度等网站,反扒机制会常常更新以外.为了保持网站运行的高效,网站采取的反扒机制并不是太多,今天分享几 ...

  5. 电平通讯速度_飞凌干货丨几种常见的电平转换电路分析及应用

    在电路设计过程中,输入输出信号电平不匹配问题很常见,这时就需要设计人员对信号进行电平转换.常见的电平转换电路有以下几种: 1.由二极管构成的单向电平转换电路 图1中RX为3.3V TTL电平与485驱 ...

  6. 8种方法用Python实现线性回归,为你解析最高效选择

    来源:大数据文摘 编译:丁慧.katherine Hou.钱天培 作者:TirthajyotiSarkar 本文共1856字,建议阅读6分钟. 本文为大家对比了8种用Python实现线性回归的方法哪个 ...

  7. 独家 | 6种让Python程序变慢的坏习惯

    作者: Christopher Tao 翻译:王可汗 校对:王雨桐本文约1800字,建议阅读5分钟 本文总结了Python代码中经常被忽略的影响代码的运行速度常见问题. 随着Python的流行,用户数 ...

  8. python变量pi和pi被看作相同的变量_python分享pi的方法 两种用python分享p

    两种用python分享pi的方法,必须按照两种计算方def pisum(n): pi=3 sign=1 for i in range(1,n+1): pi+=sign*4.0/((i+1)*(i+2) ...

  9. 干货丨从线性回归到无监督学习,数据科学家需要掌握的十大统计技术

    不管你对数据科学持什么态度,都不可能忽略分析.组织和梳理数据的重要性.Glassdoor 网站根据大量雇主和员工的反馈数据制作了「美国最好的 25 个职位」榜单,其中第一名就是数据科学家.尽管排名已经 ...

最新文章

  1. 树的基本操作的非递归实现
  2. 调驱动 一定注意 cache 表的
  3. mysql 操作xm_mysql基本命令使用
  4. JAVA入门级教学之(方法-题-3)
  5. axios获取图片显示_Vue.js+axios图片预览以及上传显示进度
  6. css3 下拉缩放显示定位导航
  7. R语言相关关系可视化函数梳理
  8. redis JAVA hmset_Spring boot 连接Redis实现HMSET操作
  9. c语言输出语句形式,c语言输出语句是什么
  10. 在线证件照一键美化换底色,制作所属自己的证件照
  11. 工程数学 傅里叶变换 狄拉克函数
  12. Leetcode之Teemo Attacking 问题
  13. 10月24日程序员HTML5,【通知】10月24日程序员节放假1天
  14. oracle数据泵PARALLEL,EXPDP的parallel参数
  15. 丁二烯橡胶的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  16. java产品经理_产品经理必懂的技术那点事儿:成为全栈产品经理
  17. 海康威视硬件对接介绍
  18. ReactNative进阶(三十一): IoC 框架 InversifyJS 解读
  19. 爬取大众点评黄焖鸡米饭的数据
  20. 四层高速dsp开发板制作1——原理图设计

热门文章

  1. 《强化学习周刊》第2期:多智能体强化学习(MARL)赋能“AI智能时代”
  2. 活动报名 | 启元星际AI顶级职业选手挑战赛周日开赛,邀您在线见证!
  3. Kotlin应用开发初体验
  4. 拥抱iPhone,拥抱软件开发的未来
  5. 在Ubuntu上编写一个开机自启动的Python脚本
  6. Tensorflow 可视化 TensorBoard 尝试~
  7. 基于深度学习的交互式问答研究综述
  8. 贾扬清、Alex Smola、Julia创始人等大咖齐聚,WAIC开发者日共话AI未来
  9. 独家 | 送你5本机器学习必备的免费电子书!(附链接)
  10. 原创Python图文详解,堪称「最强文档」还有自动化办公、爬虫pdf速下!