欢迎大家来到IT世界,在知识的湖畔探索吧!
机器学习的线性回归模型:全面指南
介绍
线性回归是一个关键的数据科学工具,用于预测连续结果。 本指南解释了其原理、用途以及如何使用真实数据在Python中实现它。 它涵盖了简单线性回归和多元线性回归,强调了它们的重要性、局限性和实际示例。
在本文中,我们将探讨什么是线性回归,重点介绍简单线性回归及其在线性回归统计中的重要性。我们还将讨论线性回归模型及其在机器学习中的应用,为线性回归在机器学习中的解释提供全面的说明。
学习目标
- 理解线性回归的原理和应用。
- 区分简单线性回归和多元线性回归。
- 学习如何在Python中实现简单线性回归。
- 理解梯度下降的概念及其在优化线性回归中的应用。
- 探索评估回归模型的评价指标。
- 识别线性回归中的假设和潜在陷阱,如过拟合和多重共线性。
目录
- 什么是线性回归?
- 简单线性回归
- 最佳拟合线是什么?
- 线性回归的成本函数
- 线性回归的梯度下降
- 线性回归为何重要?
- 线性回归的评估指标
- 决定系数或 R-平方 (R2)
- 均方根误差
- 线性回归的假设
- 线性回归中的假设
- 评估模型拟合
- 多重线性回归
- 多重线性回归的考虑
- 多重共线性
- 线性回归中的过拟合与欠拟合
- 偏差方差权衡
- 过拟合
- 欠拟合
- 动手编码:线性回归模型
- 步骤 1:导入 Python 库
- 步骤 2:加载数据集
- 步骤 3: 可视化
- 步骤 4:执行简单线性回归
- 步骤 5:对测试集进行预测
- 结论
什么是线性回归?
线性回归预测两个变量之间的关系,假设它们有一个直线连接。它找到最佳线,以最小化预测值和实际值之间的差异。线性回归在经济和金融等领域得到应用,帮助分析和预测数据趋势。线性 回归 也可以涉及多个变量(多元线性回归)或适用于是/否问题(逻辑回归)。
简单线性回归
在简单线性回归中,有一个自变量和一个因变量。模型估计最佳拟合线的斜率和截距,该线表示变量之间的关系。斜率表示因变量随着自变量每单位变化的变化量,而截距表示当自变量为零时因变量的预测值。
线性回归是一种安静且最简单的统计回归技术,常用于机器学习中的预测分析。它显示了自变量(预测变量),即X轴与因变量(输出变量),即Y轴之间的线性关系,这被称为线性回归。如果只有一个输入变量X(自变量),则这种线性回归称为简单线性回归。
上面的图表展示了输出(y)和预测(X)变量之间的线性关系。蓝色线条被称为最佳拟合直线。根据给定的数据点,我们试图绘制一条最能适应这些点的线。
简单回归计算
为了计算最佳拟合线,线性回归使用传统的斜率-截距形式,如下所示,
Y i = β 0 + β 1 X i
其中 Y i = 因变量, β 0 = 常数/截距, β 1 = 斜率/截距, X i = 自变量.
这个算法解释了因变量(输出变量)y与自变量(预测变量)X之间的线性关系,使用一条直线 Y= B 0 + B 1 X。
但是回归是如何找出最佳拟合线的呢?
线性回归算法的目标是获得B 0 和 B 1 的最佳值以找到最佳拟合线。最佳拟合线是一条误差最小的直线,这意味着预测值与实际值之间的误差应该是最小的。
但是线性回归是如何找出最佳拟合线的呢?
线性回归算法的目标是获取 B0 和 B1 的最佳值 以找到最佳拟合线。最佳拟合线是一条误差最小的线,这意味着预测值和实际值之间的误差应最小。
随机误差(残差)
在回归中,因变量的观察值(y i )与预测值(predicted)之间的差异称为残差。
ε i = 预测的 y – y i
其中 y 预测 = B 0 + B 1 X i
什么是最佳拟合线?
简单来说,最佳拟合线是最适合给定散点图的一条线。从数学上讲,通过最小化残差平方和(RSS)来获得最佳拟合线。
线性回归的成本函数
成本函数帮助计算 B0 和 B1 的最优值,从而为数据点提供最佳拟合线。
在线性回归中,通常使用均方误差 (MSE) 成本函数,它是预测y与真实y之间发生的平均平方误差。
我们使用简单线性方程 y=mx+b 来计算均方误差 (MSE):
使用MSE函数,我们将更新B 0 和B 1 的值,以便MSE值达到最小值。这些参数可以通过梯度下降法确定,以使成本函数的值最小。
线性回归的梯度下降
梯度下降是优化算法之一,用于优化成本函数(目标函数),以达到最佳最小解。为了找到最佳解,我们需要降低所有数据点的成本函数(均方误差 MSE)。这通过反复更新斜率系数(B1\)和常数系数(B0\)的值,直到我们得到线性函数的最佳解。
回归模型通过优化梯度下降算法来更新直线的系数,通过随机选择系数值并迭代更新系数值,以达到最小化成本函数。
梯度下降示例
让我们来举一个例子以理解这个问题。想象一个U型的坑。你正站在坑的最上面,你的目标是到达坑的底部。假设底部有一个宝藏,你只能采取离散的步骤才能到达底部。如果你选择一次迈出一步,最终你会到达坑的底部,但这会花费更长的时间。如果你决定每次迈出更大的一步,你可能会更早到达底部,但也有可能超出坑的底部,甚至完全没有接近底部。在梯度下降算法中,你所采取的步骤数可以视为学习率,这决定了算法收敛到最小值的速度。
要更新 B 0 和 B 1,我们从成本函数中获取梯度。为了找到这些梯度,我们对 B 0 和 B 1 进行偏导数计算。
\ 我们需要最小化成本函数 J。实现这一目标的方式之一是应用批量梯度下降算法。在批量梯度下降中,值在每次迭代中更新。(最后两个方程显示了值的更新)
偏导数是梯度,它们用于更新 B 0 和 B 1 的值。Alpha 是学习率。
为什么线性回归很重要?
线性回归重要有几个原因:
- 简单性和可解释性: 这是一个相对容易理解和应用的概念。得到的简单线性回归模型是一个直观的方程,展示了一个变量如何影响另一个变量。这使得与更复杂的模型相比,更容易解释和信任结果。
- 预测: 线性回归使您能够根据现有数据预测未来值。例如,您可以利用它根据市场支出预测销售额或根据建筑面积预测房价。
- 其他技术的基础: 它作为许多其他数据科学和机器学习方法的基石。即使是复杂的算法,通常也会将线性回归作为起点或比较的基础。
- 广泛的适用性: 线性回归可以应用于各个领域,从金融和经济学到科学和社会科学。它是揭示许多现实世界场景中变量之间关系的多功能工具。
本质上,线性回归为理解数据和进行预测提供了坚实的基础。它是一种基石技术,为更高级的数据分析方法铺平了道路。
线性回归的评估指标
任何线性回归模型的强度可以通过各种评估指标来评估。这些评估指标通常提供了一种衡量模型生成观察到的输出效果的方式。
最常用的指标是,
- 决定系数或R平方(R2)
- 均方根误差 (RSME) 和残差标准误差 (RSE)
决定系数或R平方 (R2)
R-squared 是一个数字,用于解释所开发模型所解释/捕获的变异量。它的范围始终在 0 和 1 之间。总体而言,R-squared 的值越高,模型对数据的拟合越好。
在数学上可以表示为,
R2 = 1 – ( RSS/TSS )
- 残差平方和 (RSS) 被定义为图表/数据中每个数据点的残差平方和。它是期望输出和实际观测输出之间差异的度量。
- 总平方和 (TSS) 被定义为数据点与响应变量均值之间的误差总和。从数学上讲,TSS 是,
其中 y 带帽是样本数据点的均值。
R平方的重要性通过以下数字体现,
均方根误差
均方根误差是残差方差的平方根。它指定了模型对数据的绝对拟合度,即观察到的数据点与预测值的接近程度。从数学上讲,可以表示为,
为了使这个估计无偏,必须将平方残差的总和除以自由度,而不是模型中数据点的总数。这个术语被称为残差标准误差(RSE)。在数学上可以表示为,
R-平方是比RSME更好的衡量标准。因为均方根误差的值取决于变量的单位(即它不是一个标准化的衡量),它可以随着变量单位的变化而变化。
线性回归的假设
回归是一种参数方法,这意味着它对数据进行分析时会做出假设。为了成功进行回归分析,验证以下假设至关重要。
- 残差的线性: 因变量和自变量之间需要有线性关系。
2. 残差的独立性: 误差项之间不应相互依赖(例如在时间序列数据中,下一个值依赖于上一个值)。残差项之间应没有相关性。缺少这种现象被称为自相关。
错误项中不应有任何可见的模式。
3. 残差的正态分布: 残差的均值应遵循正态分布,均值等于零或接近零。这是为了检查所选的线是否为最佳拟合线。如果误差项呈非正态分布,则表明存在一些异常数据点,需要仔细研究以建立更好的模型。
\ 4. 残差的等方差性:误差项必须具有恒定方差。这种现象被称为同方差性。误差项中存在不恒定方差被称为异方差性。通常,不恒定方差是在存在离群值或极端杠杆值的情况下产生的。
线性回归中的假设
一旦你在数据上拟合了一条直线,你需要问:“这条直线是否对数据有显著的拟合?”或者“这个 β系数是否解释了绘制数据的方差?”这就是对β系数进行假设检验的想法。在这种情况下,原假设和备择假设为:
H 0 : B 1 = 0
H A : B 1 ≠ 0
为了检验这个假设,我们使用**t检验,**beta系数的检验统计量如下所示,
评估模型拟合
一些其他评估模型的参数是:
- t 统计量: 它用于确定 p 值,因此帮助判断系数是否显著
- F 统计量:它用于评估整体模型拟合是否显著。通常,F 统计量的值越高,模型的显著性就越强。
多元线性回归
多元线性回归是一种理解单个因变量与多个自变量之间关系的技术。
多元线性回归的公式也类似于简单线性回归,具有
小变化是,现在将不再只有一个beta变量,而是会为所有使用的变量提供betas。公式如下:
Y = B0 + B1X1 + B2X2 + … + BpXp + ε
多个线性回归的考虑事项
对于多元线性回归,之前为简单线性回归做出的所有四个假设仍然成立,并添加了一些新的假设。
- 过拟合:当越来越多的变量被添加到模型中时,模型可能变得过于复杂,通常最终会记住训练集中的所有数据点。这种现象被称为模型的过拟合。这通常导致高训练准确率和非常低的测试准确率。
- 多重共线性:这是一个现象,其中一个包含多个自变量的模型,可能会存在某些变量相互关联。
- 特征选择: 随着变量数量的增加,从给定特征池中选择最佳预测变量集(其中许多可能是冗余的)成为构建相关和更好模型的重要任务。
多重共线性
由于多重共线性使得很难找出哪个变量对响应变量的预测有贡献,因此可能会得出错误的结论,认为某个变量对目标变量的影响。尽管它并不影响模型预测的精度,但正确检测和处理模型中存在的多重共线性是至关重要的,因为随机去除这些相关变量中的任何一个会导致系数值剧烈波动,甚至改变符号。
多重共线性可以通过以下方法检测。
- 成对相关性: 检查不同独立变量之间的成对相关性可以提供有关检测多重共线性的有用见解。
- 方差膨胀因子(VIF): 成对相关性可能并不总是有用,因为仅有一个变量可能无法完全解释另一个变量,但一些变量的组合可能能够做到这一点。因此,为了检查变量之间的这种关系,可以使用VIF。VIF解释了一个自变量与所有其他自变量之间的关系。VIF的计算公式为,
其中 i 指代第 i* 个变量,该变量被表示为其他独立变量的线性组合。
通常遵循的启发式规则是,如果 VIF > 10,则该值较高,应当删除。如果 VIF = 5,则可能是有效的,但应首先检查。如果 VIF < 5,则被认为是良好的 VIF 值。
线性回归中的过拟合与欠拟合
在训练数据上表现良好但在测试数据上表现不佳的情况一直存在。在数据集上训练模型时,过拟合和欠拟合是人们面临的最常见问题。
在理解过拟合和欠拟合之前,必须了解偏差和方差。
偏差
偏差是衡量模型对未来未见数据的预测准确度的指标。复杂模型,在假设有足够的训练数据的情况下,可以做出准确的模型预测。而过于简单的模型,很可能在模型预测方面表现不佳。简单来说,偏差是训练数据所产生的错误。
通常,线性算法具有较高的偏差,这使得它们更快地学习和更易于理解,但通常灵活性较差。这意味着在复杂问题上,预测性能较低,无法满足预期结果。
方差
方差是模型对训练数据的敏感性,即它量化了当输入数据发生变化时模型的反应程度。
理想情况下,模型从一个训练数据集到下一个训练数据集不应该变化太大,这意味着算法擅长找出输入变量与输出变量之间的隐藏潜在模式。
理想情况下,一个模型应该具有较低的方差,这意味着模型在更改训练数据后不会发生剧烈变化(它是可泛化的)。具有较高方差将导致即使在训练数据集的小变化下,模型也会发生剧烈变化。
让我们了解什么是偏差-方差权衡。
偏差方差权衡
在追求最佳性能的过程中,监督学习算法试图在低偏差和低方差之间取得平衡,以增强稳健性。
在机器学习领域,偏差和方差之间存在一种固有关系,具有反向相关的特征。
- 增加的偏差导致方差降低。
- 相反,提高方差会导致偏差减小。
在偏差和方差之间寻找平衡是至关重要的,算法必须在这个权衡中找到最佳结果。
在实践中,由于潜在目标函数的未知特性,计算精确的偏差和方差误差项是具有挑战性的。
现在,让我们深入探讨过拟合和欠拟合的细微差别。
过拟合
当一个模型学习到数据中的每一个模式和噪声,以至于影响了模型在未见未来数据集上的表现,这被称为过拟合。模型对数据的拟合太好,以至于将噪声解释为数据中的模式。
当一个模型具有低偏差和高方差时,它最终会记住数据并导致过拟合。过拟合使得模型变得特定而不是通用。这通常会导致高训练准确率和非常低的测试准确率。
检测过拟合是有用的,但它并不能解决实际问题。有几种方法可以防止过拟合,以下是这些方法:
- 交叉验证
- 如果训练数据太小,可以添加更多相关且清洁的数据。
- 如果训练数据太大,请进行特征选择并移除不必要的特征。
- 正则化
欠拟合
欠拟合通常没有过拟合讨论得多。当模型未能从训练数据集中学习并且也无法对测试数据集进行泛化时,称之为欠拟合。这种问题很容易通过性能指标来检测。
当模型具有高偏差和低方差时,它最终无法对数据进行泛化,导致欠拟合。它无法找到数据中隐藏的潜在模式。这通常会导致低训练准确率和非常低的测试准确率。防止欠拟合的方法如下,
- 增加模型复杂性
- 增加训练数据中的特征数量
- 从数据中移除噪声。
实操编码:线性回归模型
这是您将了解如何在Python中执行回归的部分。我们将使用广告销售渠道预测数据。您可以在这里访问数据。
电视 |
广播 |
报纸 |
销售 |
230.1 |
37.8 |
69.2 |
22.1 |
44.5 |
39.3 |
45.1 |
10.4 |
17.2 |
45.9 |
69.3 |
12.0 |
151.5 |
41.3 |
58.5 |
16.5 |
180.8 |
10.8 |
58.4 |
17.9 |
8.7 |
48.9 |
75.0 |
7.2 |
57.5 |
32.8 |
23.5 |
11.8 |
**‘Sales’**是需要预测的目标变量。现在,基于这些数据,我们的目标是创建一个预测模型,根据在不同营销平台上花费的金额来预测销售。
让我们直接开始一些实际的编码来完成这个预测。如果你没有Python经验,请不要感到被忽视。学习的最佳方式就是通过解决一个问题来实践——就像我们正在做的这个问题。
第一步:导入Python库
第一步是启动你的 Jupyter Notebook,并在其中加载所有所需的库。以下是我们在进行线性回归时需要的重要库。
- NumPy(用于执行某些数学运算)
- pandas(将数据存储在pandas数据框中)
- matplotlib.pyplot (你将使用matplotlib来绘制数据)
为了加载这些,只需在您的第一个单元格中开始输入以下几行代码:
# 导入所有必要的库 import numpy as np import pandas as pd import matplotlib.pyplot as plt # 抑制警告 import warnings warnings.filterwarnings('ignore')
欢迎大家来到IT世界,在知识的湖畔探索吧!
最后一行代码帮助抑制不必要的警告。
步骤 2:加载数据集
现在让我们将数据导入到DataFrame中。DataFrame是Python中的一种数据类型。最简单的理解方式是,它以表格形式存储您所有的数据。
欢迎大家来到IT世界,在知识的湖畔探索吧!#读取给定的CSV文件,并查看一些示例记录 advertising = pd.read_csv( "advertising.csv" ) advertising.head()
第3步:可视化
让我们在一个图中绘制目标变量与预测变量的散点图,以便获取直觉。同时,为所有变量绘制热图,
# 导入seaborn库以进行可视化 import seaborn as sns
欢迎大家来到IT世界,在知识的湖畔探索吧!#在单个图中绘制所有散点图 sns.pairplot(advertising, x_vars=[ 'TV', ' Newspaper.,'Radio' ], y_vars = 'Sales', size = 4, kind = 'scatter' ) plt.show()
# 绘制热图以寻找相关性 sns.heamap( advertising.corr(), cmap = 'YlGnBl', annot = True ) plt.show()
从散点图和热图中,我们可以观察到“销售”和“电视”的相关性高于其他变量,因为它们在散点图中显示了线性模式,并且相关性为0.9。
您可以继续进行可视化操作,并从数据中发现有趣的洞察。
步骤 4:执行简单线性回归
这里,由于电视和销售之间的相关性较高,我们将对这些变量执行简单线性回归。
我们可以使用sklearn或statsmodels来应用线性回归。因此我们将继续使用statmodels。
我们首先将特征变量 `TV` 在这个案例中分配给变量 `X`,将响应变量 `Sales` 分配给变量 `y`。
X = advertising[ '电视' ] y = advertising[ '销量' ]
在分配变量后,您需要将我们的变量拆分为训练集和测试集。您可以通过从 sklearn.model_selection 库中导入 train_test_split 来执行此操作。通常最好将70%的数据保留在训练数据集中,其余30%保留在测试数据集中。
从sklearn.model_selection导入train_test_split X_train, X_test, y_train, y_test = train_test_split( X, y, train_size = 0.7, test_size = 0.3, random_state = 100 )
通过这种方式,您可以将数据分成训练集和测试集。
可以使用以下代码检查训练集和测试集的形状,
print( X_train.shape ) print( X_test.shape ) print( y_train.shape ) print( y_test.shape )
导入statmodels库以进行线性回归
import statsmodels.api as sm
默认情况下,statsmodels库在数据集上拟合一条经过原点的线。但为了有一个截距,你需要手动使用statsmodels的add_constant属性。一旦你将常数添加到你的X_train数据集,就可以继续使用statsmodels的OLS(普通最小二乘法)属性拟合回归线,如下所示,
# 添加一个常数以获得截距 X_train_sm = sm.add_constant(X_train) # 使用 'OLS' 拟合回归线 lr = sm.OLS(y_train, X_train_sm).fit()
可以使用以下代码查看 beta 值,
# 打印参数,即获得的回归线的截距和斜率 lr.params
这里,6.948 是截距,0.0545 是变量 TV 的斜率。
现在,让我们看看这个线性回归操作的评估指标。您可以使用以下代码简单查看摘要,
# 执行一个汇总操作,列出拟合回归线的所有不同参数 print(lr.summary())
摘要
正如您所看到的,这段代码为您提供了线性回归的简要摘要。以下是摘要中的一些关键统计信息:
- TV的系数为0.054,p值非常低。这个系数在统计上是显著的。因此,这种关联并不是纯粹偶然的。
- R – 平方 是 0.816 这意味着 `Sales` 的 81.6% 的方差是由 `TV` 解释的。这是一个不错的 R-平方值。
- F-统计量 的 p-值非常低(实际上很低)。这意味着模型拟合在统计上是显著的,解释的方差并非完全出于偶然。
第5步:在测试集上进行预测
现在您已经在训练数据集上简单地拟合了一条回归线,是时候对测试数据进行一些预测了。为此,您首先需要像对X_train一样向X_test数据添加一个常数,然后您可以继续使用拟合的回归线的predict属性来预测与X_test对应的y值。
# 向 X_test 添加一个常量 X_test_sm = sm.add_constant(X_test) # 预测与 X_test_sm 相对应的 y 值 y_pred = lr.predict(X_test_sm)
您可以使用以下代码查看预测值,
y_pred.head()
为了检查测试数据上值的预测效果,我们将使用sklearn库检查一些评估指标。
# 导入库 from sklearn.metrics import mean_squared_error from sklearn.metrics import r2_score
#RMSE值 print( "RMSE: ",np.sqrt( mean_squared_error( y_test, y_pred ) ) #R²值 print( "R-squared: ",r2_score( y_test, y_pred ) )
我们在训练集和测试集上都得到了不错的分数。
除了 `statsmodels`,还有另一个包叫做 `sklearn`,可以用于执行线性回归。我们将使用 `sklearn` 中的 `linear_model` 库来构建模型。由于我们已经进行了训练-测试划分,因此不需要再进行一次。
不过我们需要添加一个小步骤。当只有一个特征时,我们需要添加一个额外的列,以便成功执行线性回归拟合。代码如下,
X_train_lm = X_train_lm.values.reshape(-1,1) X_test_lm = X_test_lm.values.reshape(-1,1)
可以检查上述数据框的形状变化。
print(X_train_lm.shape) # 打印训练数据的形状 print(X_train_lm.shape) # 打印训练数据的形状
为了拟合模型,请编写以下代码,
from sklearn.linear_model import LinearRegression #将LinearRegression表示为lr(创建LinearRegression对象) lr = LinearRegression() #使用lr.fit()拟合模型 lr.fit( X_train_lm , y_train_lm )
您可以使用以下代码通过sklearn获得截距和斜率值,
# 获取截距 print( lr.intercept_ ) # 获取斜率 print( lr.coef_ )
这就是我们如何执行简单线性回归的方法。
结论
这是我们如何执行简单线性回归。
总之,线性回归是数据科学的基石,提供了一个强大的框架用于预测连续结果。当我们揭示其复杂性和应用时,显而易见线性回归统计是一种具有广泛影响的多功能工具。本文是从其在建模关系中的作用到在Python中的现实世界实现的全面指南。
希望您觉得这个线性回归的概述信息丰富,从中对简单线性回归、其在机器学习中的应用,以及线性回归统计背后的基本概念有更清晰的理解。
关键要点
- 线性回归通过拟合一条最小化预测误差的线来预测变量之间的关系。
- 简单线性回归涉及一个预测变量和一个结果变量,而多元线性回归包括多个预测变量。
- 成本函数,通常通过梯度下降法最小化,用于确定线性回归中的最佳拟合线。
- 评估指标如 R-平方和 RMSE 衡量模型的性能和拟合程度。
- 线性、独立性、正态分布和残差常数方差等假设对于有效的回归分析至关重要。
- 恰当的特征选择和验证技术有助于减轻回归模型中的过拟合和多重共线性。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/73343.html