多输出回归模型

多输出回归模型是一种预测模型 用于建立输入特征 自变量 与一个输出变量 因变量 之间的关系

1.回归模型

1.1回归(Regression)

回归是一种预测模型,用于建立输入特征(自变量)与一个连续输出变量(因变量)之间的关系。其主要目的是预测一个单一的数值输出。

常见的回归模型有:

  1. 线性回归
  2. 多项式回归
  3. 岭回归
  4. Lasso回归

1.2 多输出回归(Multi-output Regression)

多目标回归是一种扩展的回归方法,用于同时预测多个连续输出变量。与单一回归不同,多输出回归的目标是建立输入特征与多个输出特征之间的关系。

多输出回归能同时处理多个目标变量,适用于那些输出变量之间可能存在相关性的问题。

常见模型:

  1. 独立回归模型:为每个变量训练独立的回归模型。
  2. 回归链:利用前一个输出变量的预测结果作为下一个模型的输入,形成链式结构。

1.3工具包(Scikit-learn)

Scikit-learn 是一个流行的 Python 库,专门用于机器学习和数据挖掘。它建立在 NumPy、SciPy 和 Matplotlib 的基础上,提供了易于使用的接口和丰富的功能,适用于各种机器学习任务。

支持的任务:

  • 分类:如逻辑回归、支持向量机、决策树、随机森林等。
  • 回归:如线性回归、岭回归、Lasso回归等。
  • 聚类:如 K-Means、层次聚类、DBSCAN 等。
  • 降维:如主成分分析 (PCA)、t-SNE 等。
  • 模型选择与评估:如交叉验证、网格搜索等。

使用场景:

  • 数据预处理
  • 模型训练与评估
  • 特征选择与工程
  • 模型部署与预测

安装方式:

  1. 使用 pip 安装

在终端或命令提示符中输入以下命令:

pip install scikit-learn //或使用清华源安装 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-learn 
  1. 使用 conda 安装

如果你使用 Anaconda 作为 Python 的分发版,可以通过 conda 安装:

conda install scikit-learn 
  1. 验证安装

安装完成后,可以通过以下 Python 代码验证是否安装成功:

import sklearn print(sklearn.__version__) 

如果正确显示版本号,表示安装成功。

2.固有的多输出模型

在机器学习中,存在一些能够直接处理多个变量(输出)的算法。

常见模型:

  1. 线性回归
  2. K临近回归
  3. 决策树回归
  4. 随机森林回归

2.1线性回归(Linear Regression)

线性回归是一种基本的回归算法,它可以通过线性组合输入特征来预测一个或多个输出。

代码实现:

import numpy as np from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split # 创建示例数据 X = np.random.rand(100, 3) # 100个样本,三个特征 y = np.random.rand(100, 2) # 100个样本,两个目标变量 # 分割数据集 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("预测结果:", y_pred) 预测结果: [[0. 0.] [0. 0.] [0. 0. ] [0. 0.] [0. 0. ] [0. 0.] [0. 0.] [0. 0.] [0. 0.] [0. 0. ] [0. 0. ] [0. 0.] [0. 0.] [0. 0. ] [0. 0.] [0. 0.] [0. 0.] [0. 0.] [0. 0.] [0. 0.]] 

y_pred: 预测结果是一个二维数组,每一行对应一个测试样本的预测值。

  • 每一行
    • 第一列的值是模型对第一个目标变量的预测值。
    • 第二列的值是模型对第二个目标变量的预测值。
  • 样本数量: 输出的数组包含 20 行(测试集中的样本数量),每行有两个值(对应两个目标变量)。

例如,预测结果中的第一行 [0., 0.] 表示:

  • 对第一个测试样本,模型预测第一个目标变量的值为 0.5125,第二个目标变量的值为 0.5062

2.2 K临近回归(K-Nearest Neighbors Regression)

K临近回归(KNN回归)基于输入特征的K个最近邻样本的输出平均值来进行预测。

代码实现:

import numpy as np from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsRegressor X = np.random.rand(100, 3) y = np.random.rand(100, 2) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建KNN回归模型 knn_model = KNeighborsRegressor(n_neighbors=5) # 拟合模型 knn_model.fit(X_train, y_train) # 预测 y_pred_knn = knn_model.predict(X_test) print("KNN预测结果:", y_pred_knn) 

2.3决策树回归(Decision Tree Regression)

决策树回归通过构建一棵树模型来进行预测。每个节点代表一个特征测试,每个叶子节点对应一个输出值。

代码实现:

import numpy as np from sklearn.mode_selection import train_test_split from sklearn.tree import DecisionTreeRegressor X = np.random.rand(100, 3) y = np.random.rand(100, 2) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建决策树回归模型 dt_model = DecisionTreeRegressor() # 拟合模型 dt_model.fit(X_train, y_train) # 预测 y_pred_dt = dt_model.predict(X_test) print("决策树预测结果:", y_pred_dt) 

2.4随机森林回归(Random Forest Regression)

随机森林回归是多个决策树的集成。它通过对多个决策树的输出进行平均来进行预测,提高了模型的鲁棒性和准确性。

代码实现:

import numpy as np from sklearn.model_selection import train_test_split from sklearn.tree import RandomForestRegressor X = np.random.rand(100, 3) y = np.random.rand(100, 2) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建随机森林回归模型 rf_model = RandomForestRegessor(n_estimators=100) # 拟合模型 rf_model.fit(X_train, y_train) # 预测 y_pred_rf = rf_model.predict(X_test) print("随即森林预测结果:", y_pred_rf) 

3.包装器多输出回归算法

3.1每个输出单独建立模型(MultiOutputRegressor)

MultiOutputRegressor是一个包装器,用于将任何回归模型扩展为可以处理多个输出的回归模型。它通过为每个目标创建一个单独的回归模型来实现这一点。这种方法相对简单,用于扩展本身不支持多目标回归的回归器。

class sklearn.multioutput.MultiOutputRegressor(estimator, *, n_jobs=None) 

Parameters参数:

estimator:基础估计器。这个模型需要是一个回归算法的实例,应该支持 fitpredict 方法。

n_jobs: int 或 None,可选(默认值=None)。n_jobs 参数允许用户指定要用于并行计算的作业数量。它可以加速多个输出的模型训练和预测过程。

代码实现:

import numpy as np from sklearn.model_selection import train_test_split from sklearn.multioutput import MultiOutputRegressor from sklearn.svm import SVR # 生成随机数据 X = np.random.rand(100, 3) # 100 个样本,3 个特征 y = np.random.rand(100, 2) # 100 个样本,2 个目标值(多输出) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建支持向量回归模型 svr_model = SVR() # 创建 MultiOutputRegressor 模型 wrapper = MultiOutputRegressor(svr_model) # 拟合模型 wrapper.fit(X_train, y_train) # 预测 y_pred = wrapper.predict(X) print("独立模型结果:", y_pred) 

3.2建立链式模型(RegressorChain)

RegressorChain通过将多个回归模型按顺序连接起来来处理多输出回归问题。在这种链式结构中,后续的回归模型不仅使用输入特征,还使用之前模型的输出作为输入。这种方法允许模型之间相互依赖,从而捕获目标之间的相关性。

class sklearn.multioutput.RegressorChain(estimator, *, order=None, cv=None, random_state=None) 

Parameters参数:

estimator:基本估计器。这个模型需要是一个回归算法的实例,应该支持 fitpredict 方法。

order:链的顺序

order 参数用于指定在链中估计器的顺序。如果设置为 None,则默认顺序是标签矩阵 Y 的列顺序,即按从左到右的顺序依次回归每个输出。如果提供了一个整数列表,则可以显式设置链的顺序。

且可以结合相关性进行排序。

cv:交叉验证策略

  • cv 参数允许用户指定交叉验证的策略,以便在训练模型时评估其性能。可以使用整数(如 5,表示 5 折交叉验证)、交叉验证生成器或一个具体的交叉验证对象。
  • 默认值None,表示使用默认的 5 折交叉验证。

代码实现:

import numpy as np from sklearn.model_selection import train_test_split from sklearn.multioutput import RegressorChain from sklearn.linear_model import LinearRegression # 生成随机数据 X = np.random.rand(100, 3) # 100 个样本,3 个特征 y = np.random.rand(100, 2) # 100 个样本,2 个目标值(多输出) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建线性回归模型 linear_model = LinearRegression() # 创建 RegressorChain 模型 order = [1, 0] # 将第二个目标排在前面,第一个目标排在后面 wrapper = RegressorChain(linear_model, order=order) # 拟合模型 wrapper.fit(X_train, y_train) # 预测 y_chain_pred = wrapper.predict(X) print("链式模型结果:", y_chain_pred) 
今天的文章 多输出回归模型分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-01-01 11:01
下一篇 2025-01-01 10:57

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/98798.html