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

因为机器学习库scikit-learn的普遍流行,经常使用的方法是从该库中调用linear_model来拟合数据。虽然这能够提供机器学习的其余流水线特征(例如:数据归一化,模型系数正则化,将线性模型传递到另外一个下游模型)的其余优势,可是当一个数据分析师须要快速而简便地肯定回归系数(和一些基本相关统计量)时,这一般不是最快速简便的方法。算法

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

8种方法实现线性回归数组

方法一:Scipy.polyfit( ) or numpy.polyfit( )机器学习

0?wx_fmt=jpeg

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

方法二:Stats.linregress( )学习

0?wx_fmt=jpeg


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

方法三:Optimize.curve_fit( )大数据

0?wx_fmt=jpeg


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

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

方法四:numpy.linalg.lstsq

0?wx_fmt=jpeg

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

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

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

方法五:Statsmodels.OLS ( )

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

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

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

0?wx_fmt=jpeg

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

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

0?wx_fmt=jpeg

这里有两个选择:

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

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

方法八:sklearn.linear_model.LinearRegression( )

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

八种方法效率比拼

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

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

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

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------