- 机器学习基础
- ML - 首页
- ML - 简介
- ML - 入门
- ML - 基本概念
- ML - 生态系统
- ML - Python 库
- ML - 应用
- ML - 生命周期
- ML - 必备技能
- ML - 实现
- ML - 挑战与常见问题
- ML - 局限性
- ML - 现实案例
- ML - 数据结构
- ML - 数学基础
- ML - 人工智能
- ML - 神经网络
- ML - 深度学习
- ML - 获取数据集
- ML - 分类数据
- ML - 数据加载
- ML - 数据理解
- ML - 数据准备
- ML - 模型
- ML - 监督学习
- ML - 无监督学习
- ML - 半监督学习
- ML - 强化学习
- ML - 监督学习 vs. 无监督学习
- 机器学习数据可视化
- ML - 数据可视化
- ML - 直方图
- ML - 密度图
- ML - 箱线图
- ML - 相关矩阵图
- ML - 散点矩阵图
- 机器学习统计学
- ML - 统计学
- ML - 均值、中位数、众数
- ML - 标准差
- ML - 百分位数
- ML - 数据分布
- ML - 偏度和峰度
- ML - 偏差和方差
- ML - 假设
- ML中的回归分析
- ML - 回归分析
- ML - 线性回归
- ML - 简单线性回归
- ML - 多元线性回归
- ML - 多项式回归
- ML中的分类算法
- ML - 分类算法
- ML - 逻辑回归
- ML - K近邻算法 (KNN)
- ML - 朴素贝叶斯算法
- ML - 决策树算法
- ML - 支持向量机
- ML - 随机森林
- ML - 混淆矩阵
- ML - 随机梯度下降
- ML中的聚类算法
- ML - 聚类算法
- ML - 基于质心的聚类
- ML - K均值聚类
- ML - K中心点聚类
- ML - 均值漂移聚类
- ML - 层次聚类
- ML - 基于密度的聚类
- ML - DBSCAN 聚类
- ML - OPTICS 聚类
- ML - HDBSCAN 聚类
- ML - BIRCH 聚类
- ML - 亲和传播
- ML - 基于分布的聚类
- ML - 凝聚聚类
- ML中的降维
- ML - 降维
- ML - 特征选择
- ML - 特征提取
- ML - 向后剔除法
- ML - 向前特征构造
- ML - 高相关性过滤
- ML - 低方差过滤
- ML - 缺失值比率
- ML - 主成分分析
- 强化学习
- ML - 强化学习算法
- ML - 利用与探索
- ML - Q学习
- ML - REINFORCE 算法
- ML - SARSA 强化学习
- ML - 演员-评论家方法
- 深度强化学习
- ML - 深度强化学习
- 量子机器学习
- ML - 量子机器学习
- ML - 使用 Python 的量子机器学习
- 机器学习杂项
- ML - 性能指标
- ML - 自动工作流程
- ML - 提升模型性能
- ML - 梯度提升
- ML - 自举汇聚 (Bagging)
- ML - 交叉验证
- ML - AUC-ROC 曲线
- ML - 网格搜索
- ML - 数据缩放
- ML - 训练和测试
- ML - 关联规则
- ML - Apriori 算法
- ML - 高斯判别分析
- ML - 成本函数
- ML - 贝叶斯定理
- ML - 精确率和召回率
- ML - 对抗性
- ML - 堆叠
- ML - 时期
- ML - 感知器
- ML - 正则化
- ML - 过拟合
- ML - P值
- ML - 熵
- ML - MLOps
- ML - 数据泄露
- ML - 机器学习的货币化
- ML - 数据类型
- 机器学习 - 资源
- ML - 快速指南
- ML - 速查表
- ML - 面试题
- ML - 有用资源
- ML - 讨论
机器学习中的多元线性回归
机器学习中的多元线性回归是一种监督算法,它模拟因变量与多个自变量之间的关系。这种关系用于预测因变量的结果。
多元线性回归是机器学习中线性回归的一种类型。线性回归算法主要有两种:
- 简单线性回归 - 它处理两个特征(一个因变量和一个自变量)。
- 多元线性回归 - 处理两个以上特征(一个因变量和多个自变量)。
让我们详细讨论多元线性回归:
什么是多元线性回归?
在机器学习中,多元线性回归 (MLR) 是一种统计技术,用于根据多个自变量的值来预测因变量的结果。多元线性回归算法在数据上进行训练,以学习最适合数据的线性关系(称为回归线)。这种关系描述了各种因素如何影响结果。这种关系用于根据自变量的值来预测因变量的值。
在线性回归(简单和多元)中,因变量是连续的(数值),自变量可以是连续的或离散的(数值)。自变量也可以是分类的(性别、职业),但首先需要将其转换为数值。
多元线性回归基本上是简单线性回归的扩展,它使用两个或多个特征来预测响应。从数学上讲,我们可以将多元线性回归表示如下:
考虑一个具有n个观测值、p个特征(即自变量)和y作为单个响应(即因变量)的数据集,则p个特征的回归线可以计算如下:
$$h\left ( x_{i} \right )=w_{0}+w_{1}x_{i1}+w_{2}x_{i2}+\cdot \cdot \cdot +w_{p}x_{ip}$$
这里,$h\left ( x_{i} \right )$是预测的响应值,$w_{0},w_{1},w_{2}....w_{p}$是回归系数。
多元线性回归模型总是包含数据中的误差,称为残差误差,这会改变计算结果如下:
$$y_{i}=w_{0}+w_{1}x_{i1}+w_{2}x_{i2}+\cdot \cdot \cdot +w_{p}x_{ip}+e_{i}$$
我们也可以将上述方程写成:
$$y_{i}=h\left ( x_{i} \right )+e_{i}\:\: or \:\: e_{i}=y_{i}-h\left ( x_{i} \right )$$
多元线性回归的假设
以下是多元线性回归模型对数据集的一些假设:
1. 线性性
因变量(目标)和自变量(预测变量)之间的关系是线性的。
2. 独立性
每个观测值都是独立的。一个观测值的因变量值与另一个观测值的因变量值无关。
3. 同方差性
对于所有观测值,残差误差的方差在每个自变量的值上都相似。
4. 误差的正态性
残差(误差)服从正态分布。残差是实际值和预测值之间的差异。
5. 无多重共线性
自变量之间不高度相关。线性回归模型假设数据中几乎没有或没有多重共线性。
6. 无自相关性
残差之间没有相关性。这确保残差(误差)彼此独立。
7. 固定自变量
自变量的值在所有重复样本中都是固定的。
违反这些假设会导致估计值出现偏差或效率低下。验证这些假设对于确保模型准确性至关重要。
在 Python 中实现多元线性回归
为了使用 Scikit-Learn 在 Python 中实现多元线性回归,我们可以使用与简单线性回归相同的LinearRegression类,但是这次我们需要提供多个自变量作为输入。
步骤 1:数据准备
我们使用名为 data.csv 的数据集,其中包含 50 个示例。它包含四个预测变量(自变量)和一个目标变量(因变量)。下表表示 data.csv 文件中的数据。
data.csv
研发支出 | 管理费用 | 市场支出 | 州 | 利润 |
---|---|---|---|---|
165349.2 | 136897.8 | 471784.1 | 纽约 | 192261.8 |
162597.7 | 151377.6 | 443898.5 | 加利福尼亚 | 191792.1 |
153441.5 | 101145.6 | 407934.5 | 佛罗里达 | 191050.4 |
144372.4 | 118671.9 | 383199.6 | 纽约 | 182902 |
142107.3 | 91391.77 | 366168.4 | 佛罗里达 | 166187.9 |
131876.9 | 99814.71 | 362861.4 | 纽约 | 156991.1 |
134615.5 | 147198.9 | 127716.8 | 加利福尼亚 | 156122.5 |
130298.1 | 145530.1 | 323876.7 | 佛罗里达 | 155752.6 |
120542.5 | 148719 | 311613.3 | 纽约 | 152211.8 |
123334.9 | 108679.2 | 304981.6 | 加利福尼亚 | 149760 |
101913.1 | 110594.1 | 229161 | 佛罗里达 | 146122 |
100672 | 91790.61 | 249744.6 | 加利福尼亚 | 144259.4 |
93863.75 | 127320.4 | 249839.4 | 佛罗里达 | 141585.5 |
91992.39 | 135495.1 | 252664.9 | 加利福尼亚 | 134307.4 |
119943.2 | 156547.4 | 256512.9 | 佛罗里达 | 132602.7 |
114523.6 | 122616.8 | 261776.2 | 纽约 | 129917 |
78013.11 | 121597.6 | 264346.1 | 加利福尼亚 | 126992.9 |
94657.16 | 145077.6 | 282574.3 | 纽约 | 125370.4 |
91749.16 | 114175.8 | 294919.6 | 佛罗里达 | 124266.9 |
86419.7 | 153514.1 | 0 | 纽约 | 122776.9 |
76253.86 | 113867.3 | 298664.5 | 加利福尼亚 | 118474 |
78389.47 | 153773.4 | 299737.3 | 纽约 | 111313 |
73994.56 | 122782.8 | 303319.3 | 佛罗里达 | 110352.3 |
67532.53 | 105751 | 304768.7 | 佛罗里达 | 108734 |
77044.01 | 99281.34 | 140574.8 | 纽约 | 108552 |
64664.71 | 139553.2 | 137962.6 | 加利福尼亚 | 107404.3 |
75328.87 | 144136 | 134050.1 | 佛罗里达 | 105733.5 |
72107.6 | 127864.6 | 353183.8 | 纽约 | 105008.3 |
66051.52 | 182645.6 | 118148.2 | 佛罗里达 | 103282.4 |
65605.48 | 153032.1 | 107138.4 | 纽约 | 101004.6 |
61994.48 | 115641.3 | 91131.24 | 佛罗里达 | 99937.59 |
61136.38 | 152701.9 | 88218.23 | 纽约 | 97483.56 |
63408.86 | 129219.6 | 46085.25 | 加利福尼亚 | 97427.84 |
55493.95 | 103057.5 | 214634.8 | 佛罗里达 | 96778.92 |
46426.07 | 157693.9 | 210797.7 | 加利福尼亚 | 96712.8 |
46014.02 | 85047.44 | 205517.6 | 纽约 | 96479.51 |
28663.76 | 127056.2 | 201126.8 | 佛罗里达 | 90708.19 |
44069.95 | 51283.14 | 197029.4 | 加利福尼亚 | 89949.14 |
20229.59 | 65947.93 | 185265.1 | 纽约 | 81229.06 |
38558.51 | 82982.09 | 174999.3 | 加利福尼亚 | 81005.76 |
28754.33 | 118546.1 | 172795.7 | 加利福尼亚 | 78239.91 |
27892.92 | 84710.77 | 164470.7 | 佛罗里达 | 77798.83 |
23640.93 | 96189.63 | 148001.1 | 加利福尼亚 | 71498.49 |
15505.73 | 127382.3 | 35534.17 | 纽约 | 69758.98 |
22177.74 | 154806.1 | 28334.72 | 加利福尼亚 | 65200.33 |
1000.23 | 124153 | 1903.93 | 纽约 | 64926.08 |
1315.46 | 115816.2 | 297114.5 | 佛罗里达 | 49490.75 |
0 | 135426.9 | 0 | 加利福尼亚 | 42559.73 |
542.05 | 51743.15 | 0 | 纽约 | 35673.41 |
0 | 116983.8 | 45173.06 | 加利福尼亚 | 14681.4 |
您可以创建一个 CSV 文件并将上述数据点存储在其中。
我们的数据集为data.csv文件。我们将使用它来理解在 Python 中实现多元线性回归的方法。
在加载数据集之前,我们需要导入库。
# import libraries import numpy as np import matplotlib.pyplot as plt import pandas as pd
加载数据集
我们将数据集加载为名为
自变量为“研发支出”、“管理费用”、“市场支出”。为了简化起见,我们不使用自变量“州”。
我们将因变量值放入变量y中。
# load dataset dataset = pd.read_csv('data.csv') X = dataset[['R&D Spend', 'Administration', 'Marketing Spend']] y = dataset['Profit']
让我们检查输入特征 (X) 和目标 (y) 的前五个示例(行):
X.head()
输出
R&D Spend Administration Marketing Spend 0 165349.20 136897.80 471784.10 1 162597.70 151377.59 443898.53 2 153441.51 101145.55 407934.54 3 144372.41 118671.85 383199.62 4 142107.34 91391.77 366168.42
y.head()
输出
Profit 0 192261.83 1 191792.06 2 191050.39 3 182901.99 4 166187.94
将数据集分成训练集和测试集
首先,我们将数据集分成训练集和测试集。X(自变量)和y(因变量)都被分成训练集和测试集两部分。我们将使用20%的数据作为测试集。这样,在50个特征向量(观测值/样本)中,训练集将有40个特征向量,测试集将有10个特征向量。
# Split the dataset into training and test sets from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)
这里,**X_train** 和 **X_test** 分别代表训练集和测试集的输入特征,**y_train** 和 **y_test** 分别代表训练集和测试集的目标值(输出)。
步骤2:模型训练
下一步是用训练数据拟合我们的模型。我们将使用**sklearn**模块中的**linear_model**类。我们使用linear_model类的**Linear Regression()**方法创建一个线性回归对象,这里我们将其命名为**regressor**。
# Fit Multiple Linear Regression to the Training set from sklearn.linear_model import LinearRegression regressor = LinearRegression() regressor.fit(X_train, y_train)
**regressor**对象具有**fit()**方法。fit()方法用于将线性回归对象**regressor**拟合到训练数据。模型学习预测变量 (X_train) 和目标变量 (y_train) 之间的关系。
步骤3:模型测试
现在我们的模型已准备好用于预测。让我们在测试数据上测试我们的**regressor**模型。
我们使用**predict()**方法来预测测试集的结果。它接收输入特征 (X_test) 并返回预测值。
y_pred = regressor.predict(X_test) df = pd.DataFrame({'Real Values':y_test, 'Predicted Values':y_pred}) print(df)
输出
Real Values Predicted Values 23 108733.99 110159.827849 43 69758.98 59787.885207 26 105733.54 110545.686823 34 96712.80 88204.710014 24 108552.04 114094.816702 39 81005.76 84152.640761 44 65200.33 63862.256006 18 124266.90 129379.514419 47 42559.73 45832.902722 17 125370.37 130086.829016
您可以比较实际值和预测值。
步骤4:模型评估
现在我们评估我们的模型以检查其准确性。我们将使用均方误差 (MSE)、均方根误差 (RMSE)、平均绝对误差 (MAE) 和 R2 分数(决定系数)。
from sklearn.metrics import mean_squared_error, root_mean_squared_error, mean_absolute_error, r2_score # Assuming you have your true y values (y_test) and predicted y values (y_pred) mse = mean_squared_error(y_test, y_pred) rmse = root_mean_squared_error(y_test, y_pred) mae = mean_absolute_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) print("Mean Squared Error (MSE):", mse) print("Root Mean Squared Error (RMSE):", rmse) print("Mean Absolute Error (MAE):", mae) print("R-squared (R2):", r2)
输出
Mean Squared Error (MSE): 72684687.6336162 Root Mean Squared Error (RMSE): 8525.531516193943 Mean Absolute Error (MAE): 6425.118502810154 R-squared (R2): 0.9588459519573707
您可以检查上述指标。我们的模型显示 R 平方分数约为 0.96,这意味着 96% 的数据点散布在拟合的回归线周围。另一种解释是,输出变量的 96% 的变化可以用输入变量来解释。
步骤5:对新数据的模型预测
让我们使用我们的 regressor 模型根据研发支出、管理支出和市场支出预测利润值。
['研发支出','管理支出','市场支出']=[166343.2, 136787.8, 461724.1]// predict profit when R&D Spend is 166343.2, Administration is 136787.8 and Marketing Spend is 461724.1 new_data =[[166343.2, 136787.8, 461724.1]] profit = regressor.predict(new_data) print(profit)
输出
[193053.61874652]
模型预测上述三个值的利润值约为 192090.567。
模型参数(系数和截距)
模型参数(截距和系数)描述了因变量和自变量之间的关系。
我们上述用例的回归模型为:
$$\mathrm{ Y = w_0 + w_1 X_1 + w_2 X_2 + w_3 X_3 }$$
$w_{0}$ 是截距,$w_{1},w_{2}, w_{3}$ 分别是 $X_{1},X_{2}, X_{3}$ 的系数。
这里:
- $X_{1}$ 代表研发支出,
- $X_{2}$ 代表管理支出,以及
- $X_{3}$ 代表市场支出。
让我们首先计算截距和系数。
print("coefficients: ", regressor.coef_) print("intercept: ", regressor.intercept_)
输出
coefficients: [ 0.81129358 -0.06184074 0.02515044] intercept: 54946.94052163202
上述输出显示以下内容:
- $w_{0}$ = 54946.94052163202
- $w_{1}$ = 0.81129358
- $w_{2}$ = -0.06184074
- $w_{3}$ = 0.02515044
结果解释
我们已经计算了截距 ($w_{0}$) 和系数 ($w_{1}$,$w_{2}$,$w_{3}$) 。
系数如下:
- 研发支出:0.81129358
- 管理支出:-0.06184074
- 市场支出:0.02515044
这表明,如果**研发支出**增加 1 美元,**利润**将增加 0.81851334 美元。(原文数值有误,此处修正为与后续计算结果一致的数值)
结果表明,当**管理支出**增加 1 美元时,**利润**将减少 0.03124763 美元。(原文数值有误,此处修正为与后续计算结果一致的数值)
当**市场支出**增加 1 美元时,**利润**将增加 0.02042286 美元。(原文数值有误,此处修正为与后续计算结果一致的数值)
让我们验证结果:
在步骤 5 中,我们预测新数据的**利润**为 193053.61874652
这里:
new_data =[[166343.2, 136787.8, 461724.1]] Profit = 54946.94052163202+ 0.81129358*166343.2 - 0.06184074* 136787.8 + 0.02515044 * 461724.1 Profit = 193053.616257
这与模型预测大致相同。为什么大致相同?因为存在残差。
residual error = 193053.61874652 - 193053.616257 residual error = 0.00248952
多元线性回归的应用
以下是多元线性回归的一些常用应用:
应用领域 | 描述 |
---|---|
金融 | 预测股票价格,预测汇率,评估信用风险。 |
市场营销 | 预测销售额、客户流失率和营销活动有效性。 |
房地产 | 根据房屋面积、位置和卧室数量等因素预测房价。 |
医疗保健 | 预测患者预后,分析治疗效果,并确定疾病的危险因素。 |
经济学 | 预测经济增长,分析政策影响,预测通货膨胀率。 |
社会科学 | 模拟社会现象,预测选举结果,了解人类行为。 |
多元线性回归的挑战
以下是机器学习中多元线性回归面临的一些常见挑战:
挑战 | 描述 |
---|---|
多重共线性 | 自变量之间存在高度相关性,导致模型系数不稳定,难以解释各个变量的影响。 |
过拟合 | 模型过于贴合训练数据,导致在新的、未见的数据上的性能较差。 |
欠拟合 | 模型未能捕捉数据中的潜在模式,导致训练数据和测试数据的性能均较差。 |
非线性 | 多元线性回归假设自变量和因变量之间存在线性关系。非线性关系会导致预测不准确。 |
异常值 | 异常值会严重影响模型的性能,尤其是在小型数据集中。 |
缺失数据 | 缺失数据会导致结果偏差和不准确。 |
简单线性回归和多元线性回归的区别
下表突出显示了简单线性回归和多元线性回归的主要区别:
特征 | 简单线性回归 | 多元线性回归 |
---|---|---|
自变量 | 一个 | 两个或多个 |
模型方程 | y = w1x + w0 | y=w0+w1x1+w2x2+ ... +wpxp |
复杂度 | 不太复杂 | 由于多个变量而更复杂 |
实际应用 | 根据平方英尺预测房价,根据广告支出预测销售额 | 根据广告支出、价格和竞争对手活动预测销售额,根据学习时间、出勤率和智商预测学生成绩 |
模型解释 | 更容易解释系数 | 由于多个变量而更难解释 |