线性回归 Linear Regression

前言

线性回归是机器学习中有监督学习的解决回归任务的一种算法。

什么是线性回归

回归,是通过学习历史数据,对未来进行预测。

线性,是学习历史数据的过程中,发现的变量之间的一种关系。一个变量,随着另一个变量的变化而呈现线性的变化,如:电脑的耗电量 = 电脑的功率 * 时长,使用时间越长,耗电量就越大。

当然,线性关系不仅仅存在于2个变量之间,还可以存在于3个以上的变量之间。

通常,被预测的变量(如:电脑的耗电量)称为被解释变量,或因变量,其他的变量(如:时长)称为解释变量,或自变量。一个自变量的回归称为简单线性回归,或一元线性回归,两个自变量以上的回归称为多元线性回归。运用这种关系,构建模型,就可以实现对未来的预测。

线性回归的优点和缺点

1.优点

  • 简单易懂:线性回归模型简单,易于理解和实现。
  • 可解释性强:线性回归模型的系数具有明确的物理或经济意义,可以解释自变量对因变量的影响。
  • 易于使用:线性回归模型可以用于预测连续的数值型变量,适用于许多实际问题。
  • 计算速度快:线性回归模型的计算速度较快,适用于大规模数据集。
  • 稳定性:线性回归模型的稳定性较好,即在样本量较大时,模型的预测结果相对稳定。
  • 预测精度:线性回归模型的预测精度通常较高,但在自变量和因变量之间存在非线性关系时,预测精度可能会降低。

2.缺点

  • 假设限制:线性回归模型假设自变量和因变量之间存在线性关系,且误差项服从正态分布,这些假设可能在实际问题中不成立。
  • 容易受异常值影响:线性回归模型对异常值敏感,可能会导致模型的不稳定性和预测结果的不准确性。
  • 多重共线性问题:当自变量之间存在高度相关性时,线性回归模型可能会出现多重共线性问题,导致系数估计不准确。
  • 只能处理线性关系:线性回归模型只能处理自变量和因变量之间的线性关系,无法处理非线性关系。

需要注意的是,在实际应用中,线性回归模型通常会和其他模型结合使用,以提高预测准确率。同时,为了解决模型假设限制和异常值等问题,可以使用正则化方法和异常值检测方法等技术进行优化。

线性回归的应用场景

线性回归模型可以用于预测一个连续的数值型变量,因此适合于以下应用场景:

  • 金融领域:例如预测股票价格、货币汇率等。
  • 经济学:例如预测国内生产总值、通货膨胀率等。
  • 市场营销:例如预测销售额、市场份额等。
  • 工程学:例如预测机器零件的寿命、电力消耗等。
  • 医学研究:例如预测病人的生存率、药物的剂量等。
  • 教育研究:例如预测学生的成绩、教育投入对教育成果的影响等。
  • 社会科学:例如预测人口增长率、失业率等。
  • 环境科学:例如预测气温、降雨量等
  • 计算机科学:例如预测程序的运行时间、网络延迟等。
  • 物流管理:例如预测货物的运输时间、成本等。
  • 生产制造:例如预测生产线的产量、质量等。
  • 农业领域:例如预测作物的产量、生长速度等。

需要注意的是,线性回归模型的前提是自变量和因变量之间存在线性关系,且误差项服从正态分布,因此在应用时需要进行检验。

线性回归模型的评价指标

线性回归的模型评价指标包括:

  • 均方误差(Mean Squared Error,MSE)是预测值与真实值之间差值的平方的平均值,用来衡量模型的预测精度,MSE 越小,说明模型的预测结果越准确。

  • 均方根误差(Root Mean Squared Error,RMSE)是均方误差的平方根,用来衡量模型的预测精度,RMSE 越小,说明模型的预测结果越准确。

  • 平均绝对误差(Mean Absolute Error,MAE)是预测值与真实值之间差值的绝对值的平均值,用来衡量模型的预测精度,MAE 越小,说明模型的预测结果越准确。

  • 决定系数(Coefficient of Determination,R-squared)用来衡量模型对数据的拟合程度,取值范围为0-1,R-squared越接近1,说明模型对数据的拟合程度越好。它的计算公式如下:

    决定系数 = 1 - (残差平方和 / 总平方和)

    其中,残差平方和是模型预测值与实际观测值之间的差异的平方和,总平方和是观测值与观测值均值之间的差异的平方和。

线性回归建模时的注意事项

  1. 标准的线性回归模型,对数据有严格的假设限制:
  • 因变量和自变量之间存在线性关系
  • 各自变量之间不完全相关
  • 误差项服从正态分布
  1. 特殊处理
  • 在实际的应用中,对于非线性关系,也可以通过对特征变量进行取对数等变换,以实现线性回归建模
  • 对自变量之间的多重共线性问题,可以运用正则化等方法进行应对

python中实现线性回归建模的方法

Python中有多个库可以实现线性回归,以下是其中比较常用的几个库:

  • NumPy:NumPy是Python科学计算的基础包,其中包含了线性代数、随机数生成等功能,可以用于实现线性回归。
  • scikit-learn:scikit-learn是Python中常用的机器学习库,其中包含了多个回归模型,包括线性回归、岭回归、Lasso回归等。
  • statsmodels:statsmodels是Python中的统计分析库,其中包含了多个回归模型,包括线性回归、广义线性回归等。
  • TensorFlow:TensorFlow是Google开发的深度学习框架,其中也包含了线性回归模型。
  • PyTorch:PyTorch是另一个常用的深度学习框架,其中也包含了线性回归模型。
  • Keras:Keras是一个高级神经网络API,可以在多个深度学习框架上运行,其中也包含了线性回归模型。
  • Theano:Theano是另一个深度学习框架,其中也包含了线性回归模型。
  • pandas:pandas是Python中常用的数据处理库,其中也包含了线性回归模型。

以上这些库都提供了丰富的接口和功能,可以满足不同场景下的需求。需要注意的是,在使用这些库时,需要根据具体情况选择合适的模型、参数和评估指标,以获得更好的预测效果。

python实现线性回归建模的示例

Python进行线性回归建模时,可以使用Scikit-learn库提供的SGD、LASSO和Ridge三种线性回归模型。

  1. SGD(随机梯度下降法)线性回归模型:
from sklearn.linear_model import SGDRegressor
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# 假设我们有特征矩阵X和目标变量y

# 数据预处理,标准化特征矩阵
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

# 创建SGDRegressor模型
model = SGDRegressor(max_iter=1000, random_state=42)

# 拟合模型
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 模型评价
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("均方误差(MSE):", mse)
print("决定系数(R^2):", r2)
  1. LASSO(Least Absolute Shrinkage and Selection Operator)线性回归模型:
from sklearn.linear_model import Lasso

# 假设我们有特征矩阵X和目标变量y

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建Lasso模型
model = Lasso(alpha=0.1, random_state=42)

# 拟合模型
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 模型评价
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("均方误差(MSE):", mse)
print("决定系数(R^2):", r2)
  1. Ridge(岭回归)线性回归模型:
from sklearn.linear_model import Ridge

# 假设我们有特征矩阵X和目标变量y

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建Ridge模型
model = Ridge(alpha=0.5, random_state=42)

# 拟合模型
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 模型评价
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("均方误差(MSE):", mse)
print("决定系数(R^2):", r2)

以上是SGD、LASSO和Ridge三种线性回归模型的建模过程和代码,模型评价使用了均方误差(MSE)和决定系数(R^2)。你可以根据具体的数据和需求选择适合的模型,并根据评价指标来判断模型的性能。

线性模型的参数

  1. SGDRegressor()的常用参数:
  • loss:用于指定损失函数,可选值包括"‘squared_loss"(默认)、“huber”、“epsilon_insensitive"和”‘squared_epsilon_insensitive"。
  • penalty:用于指定正则化项,可选值包括"l2"(默认)和"l1"。
  • alpha:正则化项的系数,默认为0.0001。
  • learning_rate:学习率的调整方式,可选值包括"constant"(常数学习率)、“optimal”(自适应学习率)和"inverse_scaling"(逆比例学习率)。
  • eta0:常数学习率的初始值,默认为0.0。
  • power_t:逆比例学习率的指数,默认为0.5。
  • max_iter:最大迭代次数,默认为1000。
  • tol:迭代停止的容忍度,默认为1e-3。
  • epsilon:epsilon-insensitive损失函数中的epsilon值,默认为0.1。
  • random_state:随机数生成器的种子值,用于控制随机性。
  1. Ridge()的常用参数:
  • alpha:正则化项的系数,默认为1.0。当alpha越大时,模型的复杂度越低,对训练数据的拟合程度越低,但泛化能力可能会更好。
  • fit_intercept:用于指定是否需要计算截距,即是否需要在回归方程中加上常数项,默认为True。
  • normalize:用于指定是否对数据进行标准化处理,默认为False。如果设置为True,则会对每个特征进行标准化处理,即将每个特征减去均值并除以标准差。
  • solver:用于指定求解方法,可选值包括"auto"(自动选择)、“svd”(奇异值分解)和"cholesky"(使用逆矩阵计算)。默认为"auto",在样本数量小于特征数量或使用L1正则化时会自动选择"svd"求解方法,否则选择"cholesky"方法。
  • max_iter:最大迭代次数,默认为None。如果设置为None,则会根据求解方法自动选择最大迭代次数。
  • random_state:随机数生成器的种子值,用于控制随机性。
  1. Lasso()的常用参数:
  • alpha:正则化项的系数,默认为1.0。当alpha越大时,模型的复杂度越低,对训练数据的拟合程度越低,但泛化能力可能会更好。
  • fit_intercept:用于指定是否需要计算截距,即是否需要在回归方程中加上常数项,默认为True。
  • normalize:用于指定是否对数据进行标准化处理,默认为False。如果设置为True,则会对每个特征进行标准化处理,即将每个特征减去均值并除以标准差。
  • precompute:用于指定是否预先计算Gram矩阵(即特征间内积矩阵)以加速求解,默认为False。当样本数量很大时不建议开启该选项。
  • max_iter:最大迭代次数,默认为1000。
  • tol:迭代停止的容忍度,默认为1e-4。
  • warm_start:用于指定是否使用前一次训练结果作为初始值继续训练。默认为False。
  • positive:用于指定系数是否应该限制为正值,默认为False。如果设置为True,则会强制所有系数都为正值。
  • selection:用于指定路径的求解方法,可选值包括"cyclic"(默认)和"random"。如果选择"cyclic",则会按照顺序依次更新每个系数;如果选择"random",则会随机选择一个系数进行更新。

SGD,LASSO,RIDGE三种模型的比较

模型名称描述优势局限性常用参数
SGDSGD (Stochastic Gradient Descent)是一种基于随机梯度下降的线性回归模型。它通过随机选择样本来进行参数更新,从而加快模型训练速度。- 训练速度快,特别适用于大规模数据集。
- 可以在线学习,适用于动态数据。
- 可以处理高维数据。
- 对于稀疏数据和噪声较大的数据,可能会收敛到局部最优解。
- 对于非凸损失函数,可能会陷入局部最优解。
- 对于参数调整敏感,需要进行调参。
- learning_rate: 学习率。
- max_iter: 最大迭代次数。
- penalty: 正则化项,可选参数包括’l1’和’l2’。
- alpha: 正则化强度。
LASSOLASSO (Least Absolute Shrinkage and Selection Operator)是一种线性回归模型,通过加入L1正则化项来进行特征选择。LASSO模型可以将某些特征的系数压缩为0,从而实现特征选择的效果。- 可以进行特征选择,剔除对目标变量影响较小的特征。
- 可以处理高维数据,减少过拟合的风险。
- 可以通过调整正则化强度来控制模型的稀疏性。
- 对于高度相关的特征,可能会随机选择其中一个特征而忽略其他特征。
- 对于参数调整敏感,需要进行调参。
- alpha: 正则化强度。
- max_iter: 最大迭代次数。
RIDGERIDGE (Ridge Regression)是一种线性回归模型,通过加入L2正则化项来控制模型的复杂度。RIDGE模型可以减小特征系数的大小,从而降低过拟合的风险。- 可以减小特征系数的大小,降低过拟合的风险。
- 可以处理高维数据。
- 对于高度相关的特征,可以分配较小的系数,减少特征间的共线性。
- 对于特征选择方面的效果不如LASSO模型。
- 对于参数调整敏感,需要进行调参。
- alpha: 正则化强度。
- max_iter: 最大迭代次数。

总结

本文主要简单介绍了线性回归的基本概念,优缺点,应用场景,建模过程中的注意事项,实现方法,以及SGD回归,LASSO回归,RIDGE回归的建模过程和常用参数的解读等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值