1.回归模型
1.1回归(Regression)
回归是一种预测模型,用于建立输入特征(自变量)与一个连续输出变量(因变量)之间的关系。其主要目的是预测一个单一的数值输出。
常见的回归模型有:
- 线性回归
- 多项式回归
- 岭回归
- Lasso回归
1.2 多输出回归(Multi-output Regression)
多目标回归是一种扩展的回归方法,用于同时预测多个连续输出变量。与单一回归不同,多输出回归的目标是建立输入特征与多个输出特征之间的关系。
多输出回归能同时处理多个目标变量,适用于那些输出变量之间可能存在相关性的问题。
常见模型:
- 独立回归模型:为每个变量训练独立的回归模型。
- 回归链:利用前一个输出变量的预测结果作为下一个模型的输入,形成链式结构。
1.3工具包(Scikit-learn)
Scikit-learn 是一个流行的 Python 库,专门用于机器学习和数据挖掘。它建立在 NumPy、SciPy 和 Matplotlib 的基础上,提供了易于使用的接口和丰富的功能,适用于各种机器学习任务。
支持的任务:
- 分类:如逻辑回归、支持向量机、决策树、随机森林等。
- 回归:如线性回归、岭回归、Lasso回归等。
- 聚类:如 K-Means、层次聚类、DBSCAN 等。
- 降维:如主成分分析 (PCA)、t-SNE 等。
- 模型选择与评估:如交叉验证、网格搜索等。
使用场景:
- 数据预处理
- 模型训练与评估
- 特征选择与工程
- 模型部署与预测
安装方式:
- 使用 pip 安装
在终端或命令提示符中输入以下命令:
pip install scikit-learn //或使用清华源安装 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-learn
- 使用 conda 安装
如果你使用 Anaconda 作为 Python 的分发版,可以通过 conda 安装:
conda install scikit-learn
- 验证安装
安装完成后,可以通过以下 Python 代码验证是否安装成功:
import sklearn print(sklearn.__version__)
如果正确显示版本号,表示安装成功。
2.固有的多输出模型
在机器学习中,存在一些能够直接处理多个变量(输出)的算法。
常见模型:
- 线性回归
- K临近回归
- 决策树回归
- 随机森林回归
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:基础估计器。这个模型需要是一个回归算法的实例,应该支持 fit
和 predict
方法。
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:基本估计器。这个模型需要是一个回归算法的实例,应该支持 fit
和 predict
方法。
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)
今天的文章
多输出回归模型分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/98798.html