解锁机器学习算法 | 线性回归:机器学习的基石
在机器学习的众多算法中,线性回归宛如一块基石,看似质朴无华,却稳稳支撑起诸多复杂模型的架构。它是我们初涉机器学习领域时便会邂逅的算法之一,其原理与应用广泛渗透于各个领域。无论是预测房价走势、剖析股票市场波动,还是钻研生物医学数据、优化工业生产流程,线性回归皆能大显身手。
本质上,线性回归是一种用于构建变量间线性关系的统计模型。它试图寻觅一条最佳拟合直线(或超平面),以使预测值与实际观测值之间的误差降至最低。这般简洁直观的理念,实则蕴含着强大力量,助力我们从海量数据中挖掘宝贵信息,进而做出有效的预测与决策。
接下来,我们将深度探究线性回归的核心概念、算法原理、数学模型以及实际应用,全方位领略这一经典算法的独特魅力。
一、线性回归基础概念
1、定义与公式
线性回归,从名字上就能看出它的核心在于 “线性” 和 “回归”。简单来说,它是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。当只有一个自变量时,我们称之为单变量回归;而多于一个自变量的情况,则叫做多元回归。
单变量回归可以用一个简单的直线方程来表示,其公式为: y = β 0 + β 1 x + ϵ y = \beta_0 + \beta_1x + \epsilon y=β0+β1x+ϵ,其中 y y y是因变量(目标值), x x x是自变量(特征值), β 0 \beta_0 β0是截距,也就是当 x = 0 x = 0 x=0时 y y y的值, β 1 \beta_1 β1是斜率,它表示 x x x每增加一个单位, y y y的变化量, ϵ \epsilon ϵ是误差项,代表了无法被线性模型解释的随机因素。
多元回归则是单变量回归的扩展,用于处理多个自变量的情况。其通用公式为:
h ( w ) = w 1 x 1 + w 2 x 2 + w 3 x 3 + ⋯ + w n x n + b = w T x + b h(w) = w_1x_1 + w_2x_2 + w_3x_3 + \cdots + w_nx_n + b = w^Tx + b h(w)=w1x1+w2x2+w3x3+⋯+wnxn+b=wTx+b
这里 x 1 , x 2 , ⋯ , x n x_1, x_2, \cdots, x_n x1,x2,⋯,xn 是 n n n 个自变量, w 1 , w 2 , ⋯ , w n w_1, w_2, \cdots, w_n w1,w2,⋯,wn 是对应的权重, b b b 是偏置项(类似于单变量回归中的截距), w w w 和 x x x 都可以看作是向量, w T w^T wT 是 w w w 的转置。通过这个公式,我们可以根据自变量的值来预测因变量的值,模型的任务就是找到最合适的 w w w 和 b b b,使得预测值与实际值尽可能接近。
2、特征与目标关系
在线性回归里,特征(自变量)与目标(因变量)的关系是关键。其假设该关系为线性,单变量时可用直线、多变量时能用超平面描述。
单变量线性关系,以房屋面积(自变量 x x x)与房价(因变量 y y y)为例,理想状态下有房价 = 面积×每平米单价 + 基础价格,此为典型单变量线性回归模型,每平米单价即斜率 β 1 \beta_1 β1,基础价格即截距 β 0 \beta_0 β0,收集相关数据并用线性回归算法确定参数,就能依房屋面积预测房价。
多变量线性关系稍复杂,如预测房价时,除房屋面积,房间数量、房龄等也作自变量与房价构成多变量线性关系。房价与房屋面积、房间数量可能正相关,与房龄可能负相关,关系强度由自变量对应权重体现,借助多元线性回归模型可找最佳线性组合以精准预测。
然而实际中,特征与目标并非总呈线性,可能出现非线性关系,像产品销量随时间先快增后平稳,线性回归拟合效果不佳。这时或许要对数据变换,或用多项式回归、神经网络等非线性模型。但线性回归作为基础模型,是理解和处理数据关系的重要开端,为学习复杂模型奠基。
二、线性回归原理剖析
1、模型假设
线性回归模型基于一个重要假设,即因变量(目标值)与自变量(特征值)之间存在线性关系。具体来说,对于单变量线性回归,我们假设 y = β 0 + β 1 x + ϵ y = \beta_0 + \beta_1x + \epsilon y=β0+β1x+ϵ,其中 ϵ \epsilon ϵ是误差项,它代表了模型无法解释的随机因素。在实际应用中,我们通常假设误差项 ϵ \epsilon ϵ 服从均值为 0 的正态分布,即 ϵ ∼ N ( 0 , σ 2 ) \epsilon \sim N(0, \sigma^2) ϵ∼N(0,σ2) 。这一假设具有重要意义,它使得我们能够利用正态分布的性质来进行统计推断和模型评估。
从直观上理解,误差项服从正态分布意味着大部分数据点会集中在回归直线附近,离直线越远的数据点出现的概率越小。例如,在预测房屋价格时,尽管房屋面积与房价之间存在大致的线性关系,但由于诸如房屋装修、周边配套设施等无法完全被面积解释的因素存在,这些因素所导致的误差就体现在误差项中,并且这些误差的分布符合正态分布的特征。
对于多元线性回归,模型假设扩展为: y = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n + ϵ y = \beta_0 + \beta_1x_1 + \beta_2x_2 + \cdots + \beta_nx_n + \epsilon y=β0+β1x1+β2x2+⋯+βnxn+ϵ
同样假设误差项 ϵ \epsilon ϵ 服从均值为 0 的正态分布。在这种情况下,多个自变量共同对因变量产生影响,而误差项则综合了所有未被纳入模型的因素所带来的影响。例如,在分析影响农作物产量的因素时,除了考虑种植面积外,还考虑了施肥量、降雨量等多个因素,而诸如土壤微量元素含量、病虫害等未被考虑的因素所造成的影响就包含在误差项中,且这些误差也被假设为服从正态分布 。
2、目标函数与优化
线性回归的目标是找到一组最优的回归系数(在单变量中是 β 0 \beta_0 β0和 β 1 \beta_1 β1,在多变量中是 β 0 , β 1 , ⋯ , β n \beta_0, \beta_1, \cdots, \beta_n β0,β1,⋯,βn ),使得模型的预测值与实际观测值之间的误差最小。为了实现这一目标,我们需要定义一个目标函数,也称为损失函数。
最常用的目标函数是残差平方和(Residual Sum of Squares,RSS),其计算公式为: R S S = ∑ i = 1 m ( y i − y ^ i ) 2 RSS = \sum_{i=1}^{m}(y_i - \hat{y}_i)^2 RSS=i=1∑m(yi−y^i)2
其中 y i y_i yi是第 i i i个样本的实际观测值, y ^ i \hat{y}_i y^i是模型对第 i i i个样本的预测值, m m m是样本数量。
另一个常用的目标函数是均方误差(Mean Squared Error,MSE),它是 RSS 的平均值,即:
M S E = 1 m ∑ i = 1 m ( y i − y ^ i ) 2 MSE = \frac{1}{m}\sum_{i=1}^{m}(y_i - \hat{y}_i)^2 MSE=m1i=1∑m(yi−y^i)2
MSE 和 RSS 的本质是一样的,都衡量了模型预测值与实际值之间的偏差程度,只不过 MSE 对误差进行了平均,使得不同样本数量的数据集之间的比较更加公平。
以房价预测为例,如果我们有一组房屋面积和对应房价的数据,通过线性回归模型预测出的房价与实际房价之间会存在一定的误差。我们的目标就是调整回归系数,使得这些误差的平方和(或均方误差)最小。因为误差平方和(或均方误差)越小,说明模型的预测值越接近实际值,模型的拟合效果就越好。
优化目标函数的过程就是寻找最优回归系数的过程。在数学上,这是一个最优化问题,我们的任务是找到一组回归系数,使得目标函数取得最小值。下面我们将介绍两种常用的求解方法。
3、求解方法
3.1、普通最小二乘法(OLS)
普通最小二乘法(Ordinary Least Squares,OLS)是求解线性回归模型最常用的解析方法。它的基本思想是通过最小化残差平方和来确定回归系数。从几何意义上讲,就是找到一条直线(或超平面),使得所有数据点到这条直线(或超平面)的垂直距离的平方和最小。
为了更直观地理解,我们以单变量线性回归为例。假设我们有一组数据点 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x m , y m ) (x_1, y_1), (x_2, y_2), \cdots, (x_m, y_m) (x1,y1),(x2,y2),⋯,(xm,ym),我们要找到一条直线 y = β 0 + β 1 x y = \beta_0 + \beta_1x y=β0+β1x,使得这些数据点到该直线的距离平方和最小。对于每个数据点 ( x i , y i ) (x_i, y_i) (xi,yi),它到直线 y = β 0 + β 1 x y = \beta_0 + \beta_1x y=β0+β1x 的垂直距离为 e i = y i − ( β 0 + β 1 x i ) e_i = y_i - (\beta_0 + \beta_1x_i) ei=yi−(β0+β1xi),那么残差平方和
R S S = ∑ i = 1 m e i 2 = ∑ i = 1 m ( y i − β 0 − β 1 x i ) 2 RSS = \sum_{i=1}^{m}e_i^2 = \sum_{i=1}^{m}(y_i - \beta_0 - \beta_1x_i)^2 RSS=i=1∑mei2=i=1∑m(yi−β0−β1xi)2
为了找到使 R S S RSS RSS 最小的 β 0 \beta_0 β0 和 β 1 \beta_1 β1,我们对 R S S RSS RSS 分别关于 β 0 \beta_0 β0 和 β 1 \beta_1 β1 求偏导数,并令偏导数等于 0,得到以下方程组(称为正规方程组):
{ ∂ R S S ∂ β 0 = − 2 ∑ i = 1 m ( y i − β 0 − β 1 x i ) = 0 ∂ R S S ∂ β 1 = − 2 ∑ i = 1 m ( y i − β 0 − β 1 x i ) x i = 0 \begin{cases} \frac{\partial RSS}{\partial \beta_0} = -2\sum_{i=1}^{m}(y_i - \beta_0 - \beta_1x_i) = 0 \\ \frac{\partial RSS}{\partial \beta_1} = -2\sum_{i=1}^{m}(y_i - \beta_0 - \beta_1x_i)x_i = 0 \end{cases} {∂β0∂RSS=−2∑i=1m(yi−β0−β1xi)=0∂β1∂RSS=−2∑i=1m(yi−β0−β1xi)xi=0
通过求解这个方程组,我们可以得到 β 0 \beta_0 β0和 β 1 \beta_1 β1的解析解:
β 1 = ∑ i = 1 m ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 m ( x i − x ˉ ) 2 \beta_1 = \frac{\sum_{i=1}^{m}(x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^{m}(x_i - \bar{x})^2} β1=∑i=1m(xi−xˉ)2∑i=1m(xi−xˉ)(yi−yˉ)
β 0 = y ˉ − β 1 x ˉ \beta_0 = \bar{y} - \beta_1\bar{x} β0=yˉ−β1xˉ
其中 x ˉ \bar{x} xˉ和 y ˉ \bar{y} yˉ分别是 x x x和 y y y的均值。
对于多元线性回归,我们可以将其表示为矩阵形式。设 X X X是包含所有自变量的设计矩阵(每一行代表一个样本,每一列代表一个自变量), y y y是因变量向量, β \beta β是回归系数向量(包括 β 0 \beta_0 β0和 β 1 , ⋯ , β n \beta_1, \cdots, \beta_n β1,⋯,βn),则模型可以表示为 y = X β + ϵ y = X\beta + \epsilon y=Xβ+ϵ。此时,残差平方和 R S S = ( y − X β ) T ( y − X β ) RSS = (y - X\beta)^T(y - X\beta) RSS=(y−Xβ)T(y−Xβ)。同样对 R S S RSS RSS关于 β \beta β求偏导数并令其为 0,得到正规方程 X T X β = X T y X^TX\beta = X^Ty XTXβ=XTy。如果 X T X X^TX XTX是可逆的(即满秩矩阵),则可以直接求解得到回归系数 β = ( X T X ) − 1 X T y \beta = (X^TX)^{-1}X^Ty β=(XTX)−1XTy
普通最小二乘法的优点是计算简单,理论上可以得到全局最优解,并且在满足线性回归模型假设的情况下,具有良好的统计性质。然而,它也有一些局限性,例如当 X T X X^TX XTX接近奇异矩阵(即不可逆或接近不可逆)时,计算逆矩阵会变得非常困难,甚至无法计算,此时普通最小二乘法的效果会很差。此外,它对数据中的异常值比较敏感,因为异常值会对残差平方和产生较大的影响,从而影响回归系数的估计。
3.2、梯度下降法
梯度下降法(Gradient Descent)是一种迭代优化算法,常用于求解目标函数的最小值。它的基本思想是从一个初始点开始,通过不断沿着目标函数的负梯度方向移动,逐步逼近目标函数的最小值点。在每一次迭代中,我们根据当前点的梯度来调整参数的值,使得目标函数的值不断减小。
对于线性回归模型,我们以均方误差(MSE)作为目标函数,其公式为 J ( β ) = 1 2 m ∑ i = 1 m ( y i − y ^ i ) 2 = 1 2 m ∑ i = 1 m ( y i − ( X β ) i ) 2 J(\beta) = \frac{1}{2m}\sum_{i=1}^{m}(y_i - \hat{y}_i)^2 = \frac{1}{2m}\sum_{i=1}^{m}(y_i - (X\beta)_i)^2 J(β)=2m1i=1∑m(yi−y^i)2=2m1i=1∑m(yi−(Xβ)i)2,这里的 X X X是特征矩阵, β \beta β是回归系数向量, m m m是样本数量。目标是找到一组 β \beta β,使得 J ( β ) J(\beta) J(β)最小。
梯度下降法的具体步骤如下:
1. 初始化回归系数: β \beta β,可以随机初始化或者全部初始化为 0。
2. 计算目标函数: J ( β ) J(\beta) J(β) 关于 β \beta β 的梯度: ∇ J ( β ) = 1 m X T ( X β − y ) \nabla J(\beta) = \frac{1}{m}X^T(X\beta - y) ∇J(β)=m1XT(Xβ−y) 这里的梯度表示了目标函数在当前点的变化率和方向,负梯度方向就是目标函数下降最快的方向。
3. 根据梯度更新回归系数: β = β − α ∇ J ( β ) \beta = \beta - \alpha\nabla J(\beta) β=β−α∇J(β)其中 α \alpha α 是学习率(也称为步长),它控制了每次迭代时参数更新的幅度。学习率的选择非常关键,如果学习率过小,算法的收敛速度会很慢,需要进行很多次迭代才能达到较优解;如果学习率过大,可能会导致算法无法收敛,甚至发散,错过最优解。
不断重复步骤 2 和步骤 3,直到目标函数的值收敛到一个足够小的值或者达到最大迭代次数,此时得到的 β \beta β就是我们所估计的回归系数。
在实际应用中,梯度下降法有两种常见的变体:批梯度下降(Batch Gradient Descent,BGD)和 随机梯度下降(Stochastic Gradient Descent,SGD)。
-
批梯度下降(BGD):在每次迭代中,使用整个训练数据集来计算梯度并更新参数。这种方法的优点是每次更新都朝着全局最优解的方向进行,最终能够收敛到全局最优解(如果目标函数是凸函数)。然而,当训练数据集非常大时,计算整个数据集的梯度会非常耗时,内存开销也很大,导致训练效率低下。例如,在处理包含数百万条数据的图像识别数据集时,使用批梯度下降法每次计算梯度都需要遍历所有数据,这会耗费大量的时间和计算资源。
-
随机梯度下降(SGD):与批梯度下降不同,随机梯度下降在每次迭代中,随机选择一个样本(或一小批样本,称为小批量梯度下降 Mini - Batch Gradient Descent)来计算梯度并更新参数。这种方法的优点是计算速度快,因为每次只需要处理一个样本(或小批样本),内存开销小,适用于大规模数据集。而且,由于每次使用的样本不同,它具有一定的随机性,有时能够跳出局部最优解,找到更好的解。但是,由于每次更新只基于一个样本,更新方向可能会比较 “嘈杂”,不是每次都朝着全局最优解的方向,所以收敛过程可能会比较不稳定,需要更多的迭代次数才能收敛。例如,在训练一个大规模的文本分类模型时,使用随机梯度下降可以快速处理大量的文本数据,虽然每次更新的方向可能不太准确,但总体上能够在较短时间内得到一个较好的模型。
除了上述两种方法,还有一些改进的梯度下降算法,如 Adagrad、Adadelta、Adam 等,它们通过自适应地调整学习率等方式,在不同的场景下表现出更好的性能,能够更有效地解决梯度下降过程中的问题,提高算法的收敛速度和稳定性。
三、代码实现与实战
1、准备工作
在实际应用中,我们通常使用 Python 语言结合强大的机器学习库 scikit-learn
(简称 sklearn
)来实现线性回归。首先,确保你已经安装了必要的库。如果尚未安装,可以使用 pip 命令进行安装:
pip install numpy pandas scikit-learn
其中,numpy
用于数值计算,pandas
用于数据处理和分析,scikit-learn
则提供了丰富的机器学习算法和工具,包括线性回归模型。
2、数据加载与预处理
我们以一个简单的房屋价格预测数据集为例,展示线性回归的实战过程。假设数据集存储在一个 CSV 文件中,包含房屋面积、房间数量、房龄等特征以及对应的房价。
2.1、使用 pandas
库读取数据
import pandas as pd# 读取数据data = pd.read_csv('house_prices.csv')
2.2、提取自变量(特征)和因变量(目标值)
假设我们使用房屋面积、房间数量和房龄作为特征来预测房价:
# 提取自变量和因变量X = data[['area','rooms', 'age']]y = data['price']
2.3、划分数据集
为了评估模型的性能,我们需要将数据集划分为训练集和测试集。通常,我们将大部分数据用于训练模型,小部分数据用于测试模型的泛化能力。这里我们使用train_test_split
函数将数据集按照 70% 训练集和 30% 测试集的比例进行划分:
from sklearn.model_selection import train_test_split# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
random_state
参数用于设置随机种子,确保每次运行代码时划分的结果一致,方便调试和比较不同模型的性能。
3、模型训练与预测
在准备好数据后,我们就可以创建线性回归模型并进行训练了。使用 sklearn
中的 LinearRegression
类来实现:
from sklearn.linear\_model import LinearRegression# 创建线性回归模型model = LinearRegression()# 训练模型model.fit(X_train, y_train)
在训练过程中,模型会根据训练数据学习特征与目标值之间的线性关系,确定回归系数。训练完成后,我们可以使用训练好的模型对测试集进行预测:
# 对测试集进行预测y_pred = model.predict(X_test)
y_pred
中存储的就是模型对测试集的预测结果,我们可以将其与实际的房价(y_test
)进行比较,评估模型的性能。
4、模型评估
为了评估线性回归模型的性能,我们需要使用一些评估指标。常用的评估指标有均方误差(MSE)、均方根误差(RMSE)、平均绝对误差(MAE)和决定系数(R²)。
均方误差(MSE):计算预测值与真实值之间误差的平方的平均值,它衡量了模型预测值与真实值之间的平均误差程度,MSE 值越小,说明模型的预测效果越好。计算公式为: M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2 MSE=n1i=1∑n(yi−y^i)2
均方根误差(RMSE):是 MSE 的平方根,它与 MSE 的作用类似,但 RMSE 对大的误差更加敏感,因为它对误差进行了平方和开方操作,使得大的误差在计算中占的比重更大。RMSE 的单位与目标值的单位相同,更直观地反映了预测值与真实值之间的平均误差大小。计算公式为: R M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 RMSE = \sqrt{\frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2} RMSE=n1i=1∑n(yi−y^i)2
平均绝对误差(MAE):计算预测值与真实值之间绝对误差的平均值,它直接反映了预测值与真实值之间的平均偏差程度,MAE 值越小,说明模型的预测值与真实值越接近。计算公式为: M A E = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ MAE = \frac{1}{n}\sum_{i=1}^{n}|y_i - \hat{y}_i| MAE=n1i=1∑n∣yi−y^i∣
决定系数(R²):用于衡量模型对数据的拟合优度,它表示模型能够解释因变量方差的比例,取值范围在 0 到 1 之间。R² 越接近 1,说明模型对数据的拟合效果越好,即模型能够解释大部分因变量的变化;R² 越接近 0,说明模型的拟合效果越差,可能需要考虑其他模型或对数据进行进一步处理。计算公式为: R 2 = 1 − ∑ i = 1 n ( y i − y ^ i ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2 = 1 - \frac{\sum_{i=1}^{n}(y_i - \hat{y}_i)^2}{\sum_{i=1}^{n}(y_i - \bar{y})^2} R2=1−∑i=1n(yi−yˉ)2∑i=1n(yi−y^i)2其中 y ˉ \bar{y} yˉ 是真实值的平均值。
在 sklearn
中,我们可以方便地计算这些评估指标:
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score# 计算均方误差mse = mean_squared_error(y_test, y_pred)# 计算均方根误差rmse = mean_squared_error(y_test, y_pred, squared=False)# 计算平均绝对误差mae = mean_absolute_error(y_test, y_pred)# 计算决定系数r2 = r2_score(y_test, y_pred)print(f"均方误差(MSE): {mse}")print(f"均方根误差(RMSE): {rmse}")print(f"平均绝对误差(MAE): {mae}")print(f"决定系数(R²): {r2}")
通过这些评估指标,我们可以全面了解模型的性能表现,判断模型是否满足实际需求。如果模型性能不理想,可以进一步调整模型参数、增加特征、对数据进行预处理等操作来优化模型。
四、案例应用与分析
1、房价预测案例
在房价预测中,线性回归应用广泛。假设数据集含房屋面积、卧室数量、房龄及对应房价。
- 数据探索:用
matplotlib
和seaborn
库可视化,发现房屋面积与房价强正相关,卧室数量与房价正相关但稍弱,房龄与房价负相关。 - 模型训练:划分数据集为训练集与测试集,训练线性回归模型,确定各特征与房价关系的回归系数,如房屋面积系数大且正,卧室数量系数正但小,房龄系数为负。
- 模型评估:用测试集评估,通过 MSE、RMSE、MAE 和 R² 指标判断。指标优则模型预测精度高、拟合好。线性回归可捕捉房价与特征的线性关系,但实际房价受多种因素影响,可完善数据或用复杂模型提高预测准确性。
2、销售预测案例
商业销售预测中,线性回归可助企业依历史数据预测销售额。假设零售企业数据含销售额、广告投入、促销次数及产品价格。
- 数据预处理与分析:检查处理缺失值和异常值,通过相关性分析发现广告投入、促销次数与销售额正相关,产品价格与销售额负相关。
- 模型构建与训练:以销售额为因变量,其他因素为自变量构建并训练模型,确定各因素对销售额影响的回归系数。
- 模型评估与应用:用测试数据评估模型,指标好则预测可靠。企业依预测结果安排生产、制定策略等。但市场复杂,实际销售额受多种不可预见因素影响,需综合分析预测结果。
五、线性回归的优缺点
1、优点
1. 可解释性强:线性回归模型参数(回归系数)有明确物理意义,能展示自变量对因变量影响程度与方向。如房价预测中房屋面积回归系数,可表明每平米面积增加对应的房价涨幅,利于理解数据关系,对经济、医学等领域研究和决策重要。
2. 运算效率高:算法计算复杂度低,用普通最小二乘法求解速度快,能快速处理大规模数据集,在实时数据分析、快速预测等对时间要求高的场景优势明显,如金融领域可快速支持投资决策。
3. 简单直观:模型公式简洁,单变量的 ( y = β 0 + β 1 x + ϵ ) (y = β_0 + β_1x + ϵ) (y=β0+β1x+ϵ)和多元的 ( h ( w ) = w 1 x 1 + w 2 x 2 + ⋯ + w n x n + b = w T x + b ) (h(w)=w_1x_1 + w_2x_2 + ⋯ + w_nx_n + b = w^Tx + b) (h(w)=w1x1+w2x2+⋯+wnxn+b=wTx+b)都易理解掌握,是初学者踏入机器学习和数据分析领域的好起点,简单场景如分析学生成绩与学习时间关系可轻松建模。
4. 可扩展性强:能通过添加多项式项、交互项扩展,如加自变量平方、立方项成多项式回归,处理曲线关系数据,像分析产品销量与价格关系。还能与正则化等技术结合,提高泛化能力与稳定性。
2、缺点
1. 仅适用于线性关系:核心假设是变量间线性关系,但现实多为非线性,如生物生长速度随时间的非线性变化,此时线性回归无法准确拟合,需用非线性模型或变换数据后建模。
2. 对异常值敏感:常用最小二乘法求解,最小化误差平方和使模型对异常值敏感,一个或几个异常值影响误差平方和,致回归系数估计偏差,影响准确性与稳定性,如房价数据中异常高价豪宅影响普通房价预测,可预处理识别处理异常值或用稳健回归方法。
3. 数据小时易过拟合:数据集小,模型易过度拟合噪声和细节,训练集表现好但测试集或新数据泛化差,如小店铺销售额预测,少量历史数据建模会纳入偶然因素致预测偏差,可增加数据量、正则化或交叉验证避免。
4. 对多重共线性敏感:自变量高度相关(多重共线性)时,系数估计不稳定甚至出错,难以区分自变量单独影响,影响解释性与预测能力,如分析汽车性能纳入高度相关自变量,可计算VIF检测,采取删除变量、主成分分析等解决。
六、总结与展望
线性回归是机器学习领域基础且经典的算法,因简单易懂、可解释性强与计算效率高,在多领域作用关键。本文我们讲述了其概念、原理、代码实现及案例应用,它既是有效预测工具,也是理解机器学习数据关系与模型构建的基石。
实际应用中,线性回归优势显著,可解释性助于决策分析,高运算效率能处理大规模数据。但也有局限,如对非线性关系不敏感、对异常值敏感及小数据易过拟合。
展望未来,大数据与计算能力提升推动线性回归发展创新。它或与深度学习结合,借深度学习强大特征提取能力弥补自身不足,在图像识别等领域提升预测精度与泛化能力。同时,引入正则化项与技术、应用集成学习方法,能优化模型,提高稳定性与准确性,未来还可能出现更高效算法满足大数据处理需求。
对机器学习爱好者与从业者,线性回归值得深入研究。它是入门起点,也是追求更高技术水平的支撑。希望本文能对大家学习机器学习有所帮助,有帮助的话求点点关注。
延伸阅读
深度学习框架探秘|TensorFlow:AI 世界的万能钥匙
深度学习框架探秘|PyTorch:AI 开发的灵动画笔
深度学习框架探秘|TensorFlow vs PyTorch:AI 框架的巅峰对决
深度学习框架探秘|Keras:深度学习的魔法钥匙
相关文章:

解锁机器学习算法 | 线性回归:机器学习的基石
在机器学习的众多算法中,线性回归宛如一块基石,看似质朴无华,却稳稳支撑起诸多复杂模型的架构。它是我们初涉机器学习领域时便会邂逅的算法之一,其原理与应用广泛渗透于各个领域。无论是预测房价走势、剖析股票市场波动࿰…...
如何使用Three.js制作3D月球与星空效果
目录 1. 基本设置2. 创建星空效果3. 创建月球模型4. 添加中文3D文字5. 光照与相机配置6. 动画与控制7. 响应式布局8. 结语 在本文中,我们将一起学习如何利用Three.js实现一个3D月球与星空的效果,并添加一些有趣的元素,比如中文3D文字和互动功…...
SQL语句语法
SQL数据库的结构为 库database 表table 段segment 行row 列column 或field SQL 语句主要分为以下几类: 数据定义语言(DDL):用于定义数据库对象,如数据库、表、视图、索引等。数据操作语言(DML)&…...
github上文件过大无法推送问题
GitHub 对文件大小有限制,超过 100 MB 的文件无法直接推送到仓库中。 解决思路: 使用 Git Large File Storage (Git LFS) 来管理大文件不上传对应的大文件 使用Git LFS: 1. 安装 Git LFS 首先,你需要安装 Git LFS。可以按照以…...
微信小程序的请求函数封装(ts版本,uniapp开发)
主要封装函数代码: interface HttpOptions {url: string;method?: string;headers?: { [key: string]: string };data?: any; }class Http {private timeout: number;private baseUrl: string;public constructor() { this.timeout 60 * 1000;this.baseUrl ht…...

Visual Studio Code支持WSL,直接修改linux/ubuntu中的文件
步骤1 开始通过 WSL 使用 VS Code | Microsoft Learn 点击远程开发扩展包。 步骤2 Remote Development - Visual Studio Marketplace 点击install, 允许打开Visual Studio Code。 步骤3 共有4项,一齐安装。 步骤4 在WSL Linux(Ubuntu)中…...

openAI最新o1模型 推理能力上表现出色 准确性方面提升 API如何接入?
OpenAI o1模型在回答问题前会进行深入思考,并生成一条内部推理链,使其在尝试解决问题时可以识别并纠正错误,将复杂的步骤分解为更简单的部分,并在当前方法无效时尝试不同的途径。据悉,o1不仅数学水平与美国奥林匹克竞赛…...

GC 基础入门
什么是GC(Garbage Collection)? 内存管理方式通常分为两种: 手动内存管理(Manual Memory Management)自动内存管理(Garbage Collection, GC) 手动内存管理 手动内存管理是指开发…...
Go语言协程Goroutine高级用法(一)
什么协程 在Go语言中,协程就是一种轻量的线程,是并发编程的单元,由Go来管理,所以在GO层面的协程会更加的轻量、高效、开销更小,并且更容易实现并发编程。 轻量级线程 Go语言中协程(线程)与传…...

DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件
1 DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件 1.1 背景 AI能力再强,如果不能在企业的自有业务上产生助益,那基本也是一无是处。将企业的自有业务上传到线上训练,那是脑子进水的做法ÿ…...

【鸿蒙HarmonyOS Next实战开发】lottie动画库
简介 lottie是一个适用于OpenHarmony和HarmonyOS的动画库,它可以解析Adobe After Effects软件通过Bodymovin插件导出的json格式的动画,并在移动设备上进行本地渲染。 下载安裝 ohpm install ohos/lottieOpenHarmony ohpm 环境配置等更多内容,…...

PAT乙级真题 — 1084 外观数列(java)
外观数列是指具有以下特点的整数序列: d, d1, d111, d113, d11231, d112213111, ...它从不等于 1 的数字 d 开始,序列的第 n1 项是对第 n 项的描述。比如第 2 项表示第 1 项有 1 个 d,所以就是 d1;第 2 项是 1 个 d(对…...

从 ClickHouse 到 Apache Doris:在网易云音乐日增万亿日志数据场景下的落地
导读:日志数据已成为企业洞察系统状态、监控网络安全及分析业务动态的宝贵资源。网易云音乐引入 Apache Doris 作为日志库新方案,替换了 ClickHouse。解决了 ClickHouse 运维复杂、不支持倒排索引的问题。目前已经稳定运行 3 个季度,规模达到…...

STM32——HAL库开发笔记19(串口中断接收实验)(参考来源:b站铁头山羊)
本实验,我们以中断的方式使得串口发送数据控制LED的闪烁速度,发送1,慢闪;发送2,速度正常;发送3,快闪。 一、电路连接图 二、实现思路&CubeMx配置 1、实现控制LED的闪烁速度 uint32_t bli…...
清影2.0(AI视频生成)技术浅析(二):自然语言处理
清影2.0(AI视频生成)中的自然语言处理(NLP)技术是其核心组件之一,负责将用户输入的自然语言文本转化为机器可以理解的语义表示,从而指导后续的视频生成过程。 一、基本原理 1. 目标 清影2.0的NLP技术旨在将用户输入的自然语言文本转化为机器可以理解的语义表示,从而指…...
Unity序列化多态数组
文档 Json序列化 脚本序列化 问题 Unity序列化数组时,只能存储基类内容,子类内容缺少。 Unity版本 2019.4.40 原因:Unity序列化不支持多态 测试类 将testarray类序列化时,多态列表personlist只转换了基类数据,子类…...
Spring Framework 中文官方文档
spring的部分中文文档。给总结在下面了: 看英文的大佬可以绕路了哈哈哈 一、 历史、设计理念、反馈、入门。 二、 IoC 容器、事件、资源、i18n、验证、数据绑定、类型转换、SpEL、AOP 三、 模拟对象、TestContext 框架、Spring MVC 测试、WebTestClient。 四、 事…...
力扣-二叉树-257 二叉树的所有路径
思路 除去根节点,每一层添加->val,然后使用前序遍历的顺序 代码 class Solution { public:vector<string> res;void getTreePaths(string s, TreeNode* root){s "->";s to_string(root->val);if(root->left nullptr &…...

如何调整 Nginx工作进程数以提升性能
🏡作者主页:点击! Nginx-从零开始的服务器之旅专栏:点击! 🐧Linux高级管理防护和群集专栏:点击! ⏰️创作时间:2025年2月15日14点20分 Nginx 的工作进程数࿰…...
FreeRTOS-rust食用指南
Rust 环境安装 rustup 是 Rust 的安装程序,也是它的版本管理程序,Linux 命令行下使用如下方式安装 # 安装 rustup curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh #更新 rustup rustup update# 版本检查 rustc -V cargo -VFreeRTOS-rust…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...