首页 > 编程语言 >机器学习_回归算法详解

机器学习_回归算法详解

时间:2024-06-01 14:29:58浏览次数:23  
标签:机器 train 回归 print 算法 详解 pred test model

机器学习中的回归算法用于预测连续数值输出(目标变量),通过学习输入特征(自变量)与目标变量之间的关系。以下详细介绍几种常见的回归算法及其工作原理,并提供相应的代码示例。

1. 线性回归(Linear Regression)

1.1 简介

线性回归是最简单、最常用的回归算法之一,假设目标变量 ( y ) 与输入特征 ( X ) 之间存在线性关系。

y = w T X + b y = \mathbf{w}^T \mathbf{X} + b y=wTX+b

其中,w 是权重向量,( b ) 是偏置项。

1.2 工作原理

线性回归通过最小化均方误差(MSE)来找到最佳拟合线。
MSE = 1 n ∑ i = 1 n ( y i − ( w T X i + b ) ) 2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - (\mathbf{w}^T \mathbf{X}_i + b))^2 MSE=n1​i=1∑n​(yi​−(wTXi​+b))2

1.3 代码示例
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_regression

# 生成数据
X, y = make_regression(n_samples=100, n_features=1, noise=0.1, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建并训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 预测与评估
y_pred = model.predict(X_test)
print(f"Coefficients: {model.coef_}")
print(f"Intercept: {model.intercept_}")
print(f"Mean Squared Error: {np.mean((y_pred - y_test)**2)}")

2. 多项式回归(Polynomial Regression)

2.1 简介

多项式回归扩展了线性回归,通过引入多项式特征来拟合非线性关系。
y = w 0 + w 1 x + w 2 x 2 + … + w d x d y = w_0 + w_1 x + w_2 x^2 + \ldots + w_d x^d y=w0​+w1​x+w2​x2+…+wd​xd

2.2 工作原理

通过将输入特征扩展到多项式特征空间,然后应用线性回归来找到最佳拟合曲线。

2.3 代码示例
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline

# 生成数据
X, y = make_regression(n_samples=100, n_features=1, noise=0.1, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建并训练多项式回归模型
poly = PolynomialFeatures(degree=2)
model = make_pipeline(poly, LinearRegression())
model.fit(X_train, y_train)

# 预测与评估
y_pred = model.predict(X_test)
print(f"Mean Squared Error: {np.mean((y_pred - y_test)**2)}")

3. 岭回归(Ridge Regression)

3.1 简介

岭回归是线性回归的扩展,加入了L2正则化项来防止过拟合。
J ( w ) = 1 n ∑ i = 1 n ( y i − ( w T X i + b ) ) 2 + λ ∑ j = 1 p w j 2 J(\mathbf{w}) = \frac{1}{n} \sum_{i=1}^{n} (y_i - (\mathbf{w}^T \mathbf{X}_i + b))^2 + \lambda \sum_{j=1}^{p} w_j^2 J(w)=n1​i=1∑n​(yi​−(wTXi​+b))2+λj=1∑p​wj2​

3.2 工作原理

通过引入L2正则化项,惩罚大权重,从而防止模型对训练数据过度拟合。

3.3 代码示例
from sklearn.linear_model import Ridge

# 创建并训练岭回归模型
model = Ridge(alpha=1.0)
model.fit(X_train, y_train)

# 预测与评估
y_pred = model.predict(X_test)
print(f"Coefficients: {model.coef_}")
print(f"Intercept: {model.intercept_}")
print(f"Mean Squared Error: {np.mean((y_pred - y_test)**2)}")

4. 套索回归(Lasso Regression)

4.1 简介

套索回归(Lasso)是线性回归的另一扩展,加入了L1正则化项,能够产生稀疏模型(即部分系数为零)。
J ( w ) = 1 n ∑ i = 1 n ( y i − ( w T X i + b ) ) 2 + λ ∑ j = 1 p ∣ w j ∣ J(\mathbf{w}) = \frac{1}{n} \sum_{i=1}^{n} (y_i - (\mathbf{w}^T \mathbf{X}_i + b))^2 + \lambda \sum_{j=1}^{p} |w_j| J(w)=n1​i=1∑n​(yi​−(wTXi​+b))2+λj=1∑p​∣wj​∣

4.2 工作原理

通过引入L1正则化项,惩罚系数的绝对值,从而推动部分系数变为零,简化模型。

4.3 代码示例
from sklearn.linear_model import Lasso

# 创建并训练套索回归模型
model = Lasso(alpha=0.1)
model.fit(X_train, y_train)

# 预测与评估
y_pred = model.predict(X_test)
print(f"Coefficients: {model.coef_}")
print(f"Intercept: {model.intercept_}")
print(f"Mean Squared Error: {np.mean((y_pred - y_test)**2)}")

5. 弹性网络回归(Elastic Net Regression)

5.1 简介

弹性网络回归结合了L1和L2正则化项,具有岭回归和套索回归的优点。
J ( w ) = 1 n ∑ i = 1 n ( y i − ( w T X i + b ) ) 2 + λ 1 ∑ j = 1 p ∣ w j ∣ + λ 2 ∑ j = 1 p w j 2 J(\mathbf{w}) = \frac{1}{n} \sum_{i=1}^{n} (y_i - (\mathbf{w}^T \mathbf{X}_i + b))^2 + \lambda_1 \sum_{j=1}^{p} |w_j| + \lambda_2 \sum_{j=1}^{p} w_j^2 J(w)=n1​i=1∑n​(yi​−(wTXi​+b))2+λ1​j=1∑p​∣wj​∣+λ2​j=1∑p​wj2​

5.2 工作原理

通过同时使用L1和L2正则化项,既能产生稀疏模型,又能稳定模型参数。

5.3 代码示例
from sklearn.linear_model import ElasticNet

# 创建并训练弹性网络回归模型
model = ElasticNet(alpha=0.1, l1_ratio=0.5)
model.fit(X_train, y_train)

# 预测与评估
y_pred = model.predict(X_test)
print(f"Coefficients: {model.coef_}")
print(f"Intercept: {model.intercept_}")
print(f"Mean Squared Error: {np.mean((y_pred - y_test)**2)}")

6. 决策树回归(Decision Tree Regression)

6.1 简介

决策树回归使用树结构对数据进行划分,每个叶子节点表示目标变量的预测值。

6.2 工作原理

通过递归地将数据集分成更小的子集,决策树找到能够最小化均方误差的分裂点。

6.3 代码示例
from sklearn.tree import DecisionTreeRegressor

# 创建并训练决策树回归模型
model = DecisionTreeRegressor(max_depth=5)
model.fit(X_train, y_train)

# 预测与评估
y_pred = model.predict(X_test)
print(f"Mean Squared Error: {np.mean((y_pred - y_test)**2)}")

7. 随机森林回归(Random Forest Regression)

7.1 简介

随机森林回归使用多个决策树的集合进行预测,通过平均所有树的预测结果提高模型的稳定性和准确性。

7.2 工作原理

通过引入随机性,生成多个不同的决策树,减少单一决策树的过拟合风险。

7.3 代码示例
from sklearn.ensemble import RandomForestRegressor

# 创建并训练随机森林回归模型
model = RandomForestRegressor(n_estimators=100, max_depth=5, random_state=42)
model.fit(X_train, y_train)

# 预测与评估
y_pred = model.predict(X_test)
print(f"Mean Squared Error: {np.mean((y_pred - y_test)**2)}")

当然,继续介绍支持向量回归(Support Vector Regression, SVR)的详细内容及其代码示例。

8. 支持向量回归(Support Vector Regression, SVR)

8.1 简介

支持向量回归(SVR)是支持向量机(SVM)的回归版本。它通过寻找一个最优的回归超平面,使得大多数数据点在超平面上的偏差不超过某个阈值 ε,同时尽量保持模型的平滑性。

8.2 工作原理

SVR通过引入ε-不敏感损失函数,将偏差在 ε 范围内的数据点的损失视为0。其目标是找到一个平衡的模型,使得:

  • 数据点离超平面距离小于 ε 的部分不产生损失。
  • 数据点离超平面距离大于 ε 的部分产生线性损失。

SVR的优化目标可以表示为:
min ⁡ w , b 1 2 ∥ w ∥ 2 + C ∑ i = 1 n ( ξ i + ξ i ∗ ) \min_{\mathbf{w}, b} \frac{1}{2} \|\mathbf{w}\|^2 + C \sum_{i=1}^{n} (\xi_i + \xi_i^*) w,bmin​21​∥w∥2+Ci=1∑n​(ξi​+ξi∗​)
其中:

  • w2是正则化项,用于平滑模型。
  • xi_i 和 xi_i^* 是松弛变量,用于处理误差超过 ε 的数据点。
  • ( C ) 是惩罚参数,控制误差和模型复杂度之间的权衡。
8.3 代码示例

以下示例展示如何使用支持向量回归模型进行训练和预测。

import numpy as np
from sklearn.svm import SVR
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_regression
import matplotlib.pyplot as plt

# 生成数据
X, y = make_regression(n_samples=100, n_features=1, noise=0.1, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建并训练支持向量回归模型
model = SVR(kernel='rbf', C=1.0, epsilon=0.1)
model.fit(X_train, y_train)

# 预测与评估
y_pred = model.predict(X_test)

# 打印结果
print(f"Mean Squared Error: {np.mean((y_pred - y_test)**2)}")

# 可视化结果
plt.scatter(X_test, y_test, color='blue', label='True Values')
plt.scatter(X_test, y_pred, color='red', label='Predicted Values')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Support Vector Regression')
plt.legend()
plt.show()
8.4 参数说明
  • kernel: 核函数类型,常用的有 ‘linear’、‘poly’、‘rbf’(径向基函数)和 ‘sigmoid’。
  • C: 惩罚参数,控制模型对误差的容忍度。较大的 C 值会导致模型对训练数据更严格拟合。
  • epsilon: ε-不敏感损失函数的宽度,控制对误差的容忍范围。

9. K近邻回归(K-Nearest Neighbors Regression)

9.1 简介

K近邻回归基于K个最近邻样本的平均值或加权平均值进行预测。

9.2 工作原理

KNN回归通过计算样本点与训练集所有样本点的距离,选择距离最近的K个样本进行预测。

9.3 代码示例
from sklearn.neighbors import KNeighborsRegressor

# 创建并训练K近邻回归模型
model = KNeighborsRegressor(n_neighbors=5)
model.fit(X_train, y_train)

# 预测与评估
y_pred = model.predict(X_test)
print(f"Mean Squared Error: {np.mean((y_pred - y_test)**2)}")

10. 贝叶斯回归(Bayesian Regression)

10.1 简介

贝叶斯回归通过引入先验分布对模型参数进行推断,使得模型具有更好的鲁棒性。

10.2 工作原理

贝叶斯回归通过计算后验分布,结合数据和先验信息,得到参数的最优估计。

10.3 代码示例
from sklearn.linear_model import BayesianRidge

# 创建并训练贝叶斯回归模型
model = BayesianRidge()
model.fit(X_train, y_train)

# 预测与评估
y_pred = model.predict(X_test)
print(f"Mean Squared Error: {np.mean((y_pred - y_test)**2)}")

11. 提升回归(Boosting Regression)

11.1 简介

提升回归是一种集成方法,通过结合多个弱学习器(通常是决策树)提高预测性能。

11.2 工作原理

提升回归通过逐步训练弱学习器,每一步根据之前的错误进行调整,从而提高模型性能。

11.3 代码示例
from sklearn.ensemble import GradientBoostingRegressor

# 创建并训练提升回归模型
model = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
model.fit(X_train, y_train)

# 预测与评估
y_pred = model.predict(X_test)
print(f"Mean Squared Error: {np.mean((y_pred - y_test)**2)}")

总结

回归算法在机器学习中有广泛的应用,选择合适的回归算法取决于具体的应用场景、数据特性和模型需求。常见的回归算法包括线性回归、多项式回归、岭回归、套索回归、弹性网络回归、决策树回归、随机森林回归、支持向量回归、K近邻回归、贝叶斯回归和提升回归等。通过结合具体问题选择适当的算法,可以提高模型的预测精度和泛化能力。

标签:机器,train,回归,print,算法,详解,pred,test,model
From: https://blog.csdn.net/a6181816/article/details/139313659

相关文章

  • python 卡尔曼滤波算法
    卡尔曼滤波(KalmanFilter)是一种有效的递归滤波器,用于线性动态系统的状态估计。它通过考虑先前的估计和当前的观测来提供下一个状态的最佳估计。卡尔曼滤波器广泛应用于导航系统、机器人定位、信号处理等领域。下面是一个简单的Python实现卡尔曼滤波算法的例子,用于估计一个一维......
  • 基于Matlab多算法去雾系统
    欢迎大家点赞、收藏、关注、评论啦,由于篇幅有限,只展示了部分核心代码。文章目录一项目简介二、功能三、系统四.总结一项目简介  一、项目背景与意义在图像处理和计算机视觉领域,图像去雾是一个重要的研究方向。由于雾天或其他恶劣天气条件,户外图像往往会出......
  • FPGA图像处理--CLAHE算法(一)
    FPGA交流群:838607138本文首发于公众号:FPGA开源工坊在介绍CLAHE算法之前必须要先提一下直方图均衡化,直方图均衡化算法是一种常见的图像增强算法,可以让像素的亮度分配的更加均匀从而获得一个比较好的观察效果。如下图就是经过直方图均衡化后的效果图。importcv2importnumpya......
  • 【计算机毕业设计】谷物识别系统Python+人工智能深度学习+TensorFlow+卷积算法网络模
    谷物识别系统,本系统使用Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经算法网络模型,通过对11种谷物图片数据集('大米','小米','燕麦','玉米渣','红豆','绿豆','花生仁','荞麦','黄豆','黑米','黑豆')进行训练......
  • 操作系统之CPU调度算法——FCFS、SJF和SRTF
    目录前言 FCFS先来先服务调度算法定义与步骤 举例SJF短作业优先调度算法定义与步骤举例SRTF最短剩余时间优先调度算法定义与步骤举例结束语​​​​​​​前言 今天是坚持写博客的第12天,为不断坚持的自己和大家点赞。最近经历了一场时长半小时的答辩,还是需......
  • 零基础学Java第二十七天之前端-HTML5详解
    前端-HTML5详解一、概述HTML5是HTML的第五个版本,它对HTML进行了许多改进和扩展,使得网页开发更加丰富和便利。HTML5是Web标准的重要组成部分,旨在提高浏览器兼容性,统一网页开发标准。HTML5不仅包括了HTML的基本元素和标签,还新增了许多功能和API,为网页开发提供了更多的可能......
  • 算法随笔——数位DP
    学习链接https://www.luogu.com/article/tzeo544s数位DP标准模版:lldfs(intpos,intpre,intst,……,intlead,intlimit)//记搜{ if(pos>len)returnst;//剪枝 if((dp[pos][pre][st]……[……]!=-1&&(!limit)&&(!lead)))returndp[pos][pre][st]……[……];//记录当前值......
  • 算法随笔——状压DP题目整理
    枚举状态S的子集:for(ints=0;s<=tot;s++){ for(ints2=s;;s2=s&(s2-1)){枚举子集例题旅行商问题:P8733[蓝桥杯2020国C]补给在方格中填图案问题:蒙德里安问题国际象棋炮兵阵地......
  • 《计算机网络微课堂》实验5 交换机的自学习算法
    本实验的目的在于验证交换机的自学习算法。首先需要构建网络拓普,我们使用三台计算机,然后使用一个交换机把它们连接起来,我们选择自动连线将每个计算机连接到交换机上就可以了,那么交换机的接口是橙色的,我们切换右下角的实时和仿真模式,多切换几遍,直到交换机的接口变为绿色,接下来给各......
  • Springboot 开发 -- 跨域问题技术详解
    一、跨域的概念跨域访问问题指的是在客户端浏览器中,由于安全策略的限制,不允许从一个源(域名、协议、端口)直接访问另一个源的资源。当浏览器发起一个跨域请求时,会被浏览器拦截,并阻止数据的传输。这种限制是为了保护用户的隐私和安全,防止恶意网站利用用户的浏览器向其他网站......