【IT168 资讯】对于无数的数据科学家来说,线性回归是许多统计建模和预测分析项目的起点。拟合的重要性,无论是准确的还是快速的,对于大数据集的线性模型都不能被夸大。
随着Python迅速成为实际的编程语言的一大选择,关键是数据科学家必须意识到他或她可以使用的各种方法来快速将线性模型拟合到一个相当大的数据集,并评估每个特征在过程、结果中的重要性。
所以,在多种可用选项的情况下,您如何选择最有效的方法?
由于scikit-learn是一种免费的机器学习库,它具有回归、分类、聚类、模型选择和降维等功能,所以常用的方法是从该库调用线性模型类并拟合数据。虽然这可以为应用机器学习的其他流水线特性(例如数据规范化,模型系数正则化,将线性模型提供给另一个下游模型)提供额外的优势,但这通常不是确定回归系数(和一些基本的相关统计)最快或最干净、简单的方法。
下面是其他7种更快更清洁的方法,但它们并不都具备相同数量的信息或建模灵活性。下面将简要讨论每种方法。
1.方法:Scipy.polyfit()或numpy.polyfit()
这是一个相当普遍的最小二乘多项式拟合函数,它接受数据集和任何度数的多项式函数(由用户指定),并返回一组使系数误差平方最小化的系数。这里给出了该功能的详细描述。对于简单线性回归,可以选择1级。如果要拟合更高级别的模型,则可以从线性特征数据中构建多项式特征并拟合模型。
2.方法:Stats.linregress()
这是一个高度专业化的线性回归函数,可以在Scipy的统计模块中找到。它的灵活性受到相当的限制,因为它被优化为仅计算两组测量的线性最小二乘回归。因此,你不能用广义线性模型或多变量回归来拟合。但是,由于其特殊性,它是简单线性回归中速度最快的方法之一。除了拟合系数和截距项之外,它还返回基本统计数据,如R2系数和标准误差。
3.方法:Optimize.curve_fit()
这与Polyfit方法相同,但本质上更一般。 scipy.optimize模块这个强大的功能可以通过最小二乘法最小化来将任何用户定义的函数适用于数据集。
对于简单线性回归,可以只写一个线性mx + c函数并调用这个估计器。毫无疑问,这也适用于多元回归。该方法返回一个函数参数数组,最小二乘法和相关的协方差矩阵被最小化。
4.方法:numpy.linalg.lstsq
这是通过矩阵分解计算线性方程组的最小二乘解的基本方法。它来自numpy包的线性代数模块。在引擎盖下,它通过计算一个向量x来解决方程ax = b,这个向量x最小化了欧几里得2-norm || ba ??一个x | |2。
该方程可以是低于好的或高于确定的(即a的线性独立行的数目可以小于,等于或大于其线性独立列的数目)。如果a是正方形且满秩,那么x(但是对于舍入误差)是方程的“精确”解。
您可以对此进行简单或多元回归,并找回计算出的系数和残差。一个小窍门是,在调用这个函数之前,你必须在x数据后加上一列1来计算截距项。事实证明,这是尝试线性回归问题的更快方法之一。
5.方法:Statsmodels.OLS()
Statsmodels是一个很棒的小型Python软件包,它提供了用于评估不同统计模型的类和函数,还提供了统计测试和统计数据探索。每个估算器都有一个结果统计的广泛列表。对照现有统计软件包对结果进行测试以确保正确性。
对于线性回归,可以使用该包中的OLS或普通最小二乘函数,并获得有关估计过程的完整统计信息。
要记住的一个小技巧是,您必须手动添加一个常数到x数据来计算截距,否则默认情况下它只会报告系数。以下是OLS模型的完整结果摘要的快照。正如你所看到的,它和R或Julia等功能统计语言一样丰富。
6.方法:使用逆矩阵方法的解析解
对于条件良好的线性回归问题(至少在#个数据点>#个特征中),存在一个简单的闭式矩阵解法来计算保证最小二乘最小化的系数。
这里讨论关于这个解决方案的详细推导和讨论。
这里有两个选择:
(a)使用简单的乘法矩阵求逆
(b)计算x数据的Moore-Penrose广义伪矩阵,然后用y数据取一个点积。因为第二个过程涉及奇异值分解(SVD),所以它速度较慢,但对于没有良好条件的数据集运行良好。
7.方法:sklearn.linear_model.LinearRegression()
这是大多数机器学习工程师和数据科学家使用的典型方法。当然,对于现实世界的问题,它通常被交叉验证和正则化算法取代,如Lasso回归或Ridge回归。然而,这些高级功能的基本核心在于这种模式。
测量这些方法的速度和时间复杂性
作为一名数据科学家,应该始终寻找准确而快速的方法或功能来完成数据建模工作。如果方法本身很慢,那么它会为大数据集创建一个执行瓶颈。
确定可伸缩性的一个好方法是运行模型以增加数据集大小,提取所有运行的执行时间并绘制趋势图。
这就是结果。由于它们的简单性,stats.linregress和简单的逆矩阵方法执行速度最快,甚至高达1000万个数据点。
总结
在本文中,我们讨论了执行简单线性回归的7种有效方法。它们中的大多数都可以扩展到更一般化的多变量和多项式回归建模。我们没有列出适合这些方法的R2,因为它们都非常接近1。
对于具有数百万个人工生成的数据点的单变量回归,回归系数估计得非常好。
本文的目标主要是讨论这些方法的相对速度/计算复杂性。我们通过在一个合成的数据集上进行测试(高达1000万个样本)来显示每个计算复杂性度量。令人惊讶的是,与scikit-learn广泛使用的线性模型相比,简单逆矩阵解析解决方案的工作速度非常快。