【集成学习】基于python的stacking回归预测

news2024/12/28 19:58:18

1 回归模型

        当涉及到线性回归、岭回归、套索回归、决策树回归、随机森林回归、梯度提升回归和支持向量机回归模型的原理时,我们可以按照以下方式清晰地解释它们:

1.1 线性回归

        线性回归是利用数理统计中的回归分析来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。其表达形式为 y=w'x+e,其中 e 为误差,服从均值为0的正态分布。线性回归模型可以是一元或多元的,依赖于自变量的数量。

1.2 岭回归(Ridge Regression)

        岭回归是一种处理具有多重共线性问题的线性回归分析技术。它通过引入一个调节参数λ(通常大于0),对回归系数的幅度进行限制,从而提高回归模型的泛化能力。岭回归的原理可以概括为:

  1. 收缩方法:通过限制回归系数的幅度来减少过拟合。
  2. λ参数的重要性:λ取值太小可能导致过拟合,取值过大可能导致欠拟合。
  3. 数学技术:基于特征值分解的方法,将原始的最小二乘问题转化为带有约束条件的最小二乘问题。
1.3 套索回归(Lasso Regression)

        套索回归是一种线性回归技术,它通过最小化误差平方和并加入L1惩罚项来限制模型系数,以减少变量数量并提高模型的预测能力和泛化性能。L1惩罚项可以表示为 λ∑|w_j|,其中λ是惩罚系数,控制惩罚项的强度。

1.4 决策树回归

        决策树回归是一种非参数回归方法,它通过递归地二分回归空间来构建预测模型。其基本原理包括:

  1. 递归划分:通过递归地选择最佳划分特征来划分数据。
  2. 特征选择:在每个分支点根据特征选择最优切分变量和切分点。
  3. 预测值:终端节点区域的均值即为该数据的预测值。
1.5 随机森林回归

        随机森林回归是一种基于集成学习的算法,它通过构建多个决策树并将它们的预测结果进行集成来进行回归任务。其基本原理包括:

  1. 随机选择样本和特征:从原始训练集中随机选择样本和特征来构建每棵决策树。
  2. 构建决策树:在每个子样本集上使用决策树算法构建决策树。
  3. 集成预测:将多棵决策树的预测结果进行平均或加权平均,得到最终的回归结果。
1.6 梯度提升回归(Gradient Boosting Regression)

        梯度提升回归是一种基于集成学习的方法,它通过结合多个弱学习器(通常是决策树)来构建强大的模型。其基本原理包括:

  1. 弱学习器:使用决策树等作为基学习器。
  2. 提升算法:通过迭代训练,每一轮训练都调整学习器的权重,使之前训练不好的样本在后续训练中得到更多关注。
  3. 拟合残差:通过拟合残差来训练下一个弱学习器,逐步减小整体模型的误差。
1.7 支持向量机回归(Support Vector Machine Regression, SVR)

        支持向量机回归是一种强大的机器学习算法,用于回归问题。其原理是通过最小化预测误差来拟合数据,并在拟合过程中保持一个边界(间隔),使得大部分数据点都落在这个边界之内。SVR与分类问题中的SVM有些相似,但其目标是拟合数据而不是分离数据。

2 集成学习原理

2.1 Bagging(装袋)

        Bagging是一种并行式集成学习方法,它通过自助采样法(bootstrap sampling)从原始数据集中生成多个子集,然后在每个子集上训练一个基学习器,并将这些基学习器的输出通过简单投票法或平均法等方式结合起来,形成最终的预测结果。

        Bagging的核心思想是利用自助采样法引入样本扰动,增加基学习器之间的差异性,从而提高集成学习的泛化能力。由于每个基学习器都是独立训练的,因此Bagging可以并行化执行,提高训练效率。

        Bagging的优点在于简单、高效,并且对于不稳定的基学习器(如决策树、神经网络等)效果尤为显著。然而,Bagging对于稳定的基学习器(如线性回归、K近邻等)效果可能并不明显。

2.2 Boosting(提升)

        Boosting是一种串行式集成学习方法,它通过改变训练样本的权重,使得先前学习器做错的样本在后续学习器中得到更多的关注,从而逐步提高集成学习的性能。

        Boosting的代表算法有AdaBoost、GBDT(梯度提升决策树)等。AdaBoost通过调整样本权重和基学习器权重,使得基学习器能够针对特定的错误样本进行学习,从而提高集成学习的整体性能。GBDT则是通过梯度下降的方式优化损失函数,逐步逼近最优解。

        Boosting的优点在于能够充分利用先前学习器的错误信息,提高集成学习的性能。然而,Boosting对噪声数据和异常值较为敏感,可能会导致过拟合。

2.3 Stacking(堆叠)

        Stacking是一种将多个基学习器的预测结果作为新的特征输入到一个元学习器中进行训练的集成学习方法。Stacking的核心思想是通过将多个基学习器的预测结果作为新的特征,增加模型的复杂度,从而提高集成学习的性能。

Stacking的优点包括:

  1. 灵活性高:可以使用不同类型的基学习器进行训练,并且能够根据数据的特点选择最合适的基学习器组合。
  2. 泛化能力强:通过结合多个基学习器的预测结果,Stacking能够减少模型的偏差和方差,提高模型的泛化能力。
  3. 可解释性好:Stacking的元学习器可以基于任何类型的模型,因此可以根据需求选择具有可解释性的元学习器(如线性模型),从而提高模型的可解释性。

        相比于Bagging和Boosting,Stacking的优势在于其能够充分利用不同基学习器的优点,并通过元学习器进行融合,从而得到更加准确和稳定的预测结果。此外,Stacking还能够通过交叉验证等方式避免过拟合问题,提高模型的泛化能力。

3 代码

3.1 集成学习前
import pandas as pd  
import numpy as np  
from sklearn.model_selection import train_test_split  
from sklearn.linear_model import LinearRegression, Ridge, Lasso  
from sklearn.tree import DecisionTreeRegressor  
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor  
from sklearn.svm import SVR  
import matplotlib.pyplot as plt  
  
# 1. 数据准备  
df = pd.read_excel('数据集.xlsx')  
X = df.drop('label', axis=1)  # 假设 '目标变量列名' 是目标变量的列名  
y = df['label']  

# 2. 模型训练  
models = {  
    'Linear Regression': LinearRegression(),  
    'Ridge Regression': Ridge(alpha=1.0),  
    'Lasso Regression': Lasso(alpha=0.1),  
    'Decision Tree': DecisionTreeRegressor(),  
    'Random Forest': RandomForestRegressor(n_estimators=80),  
    'Gradient Boosting': GradientBoostingRegressor(n_estimators=100),  
    'Support Vector Machine': SVR(kernel='rbf', C=11, gamma=0.1)  
}  
  
predictions = {}  
for name, model in models.items():  
    model.fit(X, y)  
    predictions[name] = model.predict(X)  # 这里使用全部数据作为“测试集”  
  
# 3. 结果对比和 4. 绘制折线图  
plt.figure(figsize=(12, 6))  
  
# 绘制真实值  
plt.plot(y, label='True Values', color='red', linewidth=2)  
  
# 绘制每个模型的预测值  
for i, (name, pred) in enumerate(predictions.items()):  
    plt.plot(pred, label=name, linestyle=':', linewidth=1, marker='.')  
  
# 设置图例、标题等  
plt.legend()  
plt.title('Comparison of Regression Models')  
plt.xlabel('Sample Index')  
plt.ylabel('Target Variable')  
plt.grid(True)  
plt.show()

        运行结果如图3-1所示:

图3-1 各模型预测结果对比

        从图3-1可以看出决策树回归、随机森林回归、梯度提升回归、支持向量机回归预测效果较好,其他的线性回归、岭回归、套索回归都是线性回归模型,对于非线性关系预测能力较差。

3.2 集成学习

import pandas as pd  
import numpy as np  
from sklearn.model_selection import train_test_split, KFold  
from sklearn.linear_model import LinearRegression, Ridge, Lasso  
from sklearn.tree import DecisionTreeRegressor  
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor  
from sklearn.svm import SVR  
from sklearn.pipeline import make_pipeline  
from sklearn.preprocessing import StandardScaler  
from sklearn.metrics import mean_squared_error  
from sklearn.base import clone  
from sklearn.ensemble import StackingRegressor  
  
# 定义基模型  
base_models = [  
    ('lr', LinearRegression()),  
    ('ridge', Ridge(alpha=1.0)),  
    ('lasso', Lasso(alpha=0.1)),  
    ('dt', DecisionTreeRegressor()),  
    ('rf', RandomForestRegressor(n_estimators=100)),  
    ('gb', GradientBoostingRegressor(n_estimators=100)),  
    ('svr', make_pipeline(StandardScaler(), SVR(kernel='rbf', C=11, gamma=0.1)))  
]  
  
# 定义元模型  
final_estimator = LinearRegression()  
  
# 实例化StackingRegressor  
stacking_regressor = StackingRegressor(  
    estimators=base_models,  
    final_estimator=final_estimator,  
    cv=KFold(n_splits=5, shuffle=True, random_state=42)  
)  
  
# 训练基模型和Stacking集成模型  
for name, model in base_models:  
    model.fit(X, y)  
  
stacking_regressor.fit(X, y)   
  
# 预测  
base_predictions = {name: model.predict(X) for name, model in base_models}  
stacking_prediction = stacking_regressor.predict(X)  
  
# 评估Stacking集成的性能(可选)  
mse_stacking = mean_squared_error(y, stacking_prediction)  
print(f"Stacking MSE: {mse_stacking}")  
  
# 绘制折线图对比预测结果  
plt.figure(figsize=(12, 6))  
  
# 绘制真实值  
plt.plot(range(len(y)), y, label='True Values', color='red', linewidth=2)  
  
# 绘制每个基模型的预测值  
for i, (name, pred) in enumerate(base_predictions.items(), 1):  
    plt.plot(range(len(y)), pred, label=f'{name} Prediction', linestyle=':', linewidth=2)  
  
# 绘制Stacking集成的预测值  
plt.plot(range(len(y)), stacking_prediction, label='Stacking Prediction', color='black', linestyle='-.', linewidth=2, marker='s')  
  
# 设置图例、标题等  
plt.legend()  
plt.title('Comparison of Regression Models and Stacking')  
plt.xlabel('Sample Index')  
plt.ylabel('Target Variable')  
plt.grid(True)  
plt.show()

        运行结果如图3-2:

图3-2

        从图3-2可以看出stacking集成学习很好的学习了决策树回归、随机森林回归、梯度提升回归、支持向量机回归的良好经验以至于stacking学习能力极强,预测结果极好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1871144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

说一说ABAP CDS View的发展历史与特性

1. 背景 随着SAP Fiori应用程序的兴起,SAP领域的小伙伴接触和使用ABAP CDS View的机会也是越来越多。今天,让我们花些时间,一起在了解下这项技术的设计初衷和发展历史。 2. 设计初衷 说起ABAP CDS View,就不得不提及SAP HANA。…

从零开始了解GPT-4o模型:它是如何工作的?

人工智能(AI)技术正以惊人的速度发展,其中最引人注目的是OpenAI发布的GPT-4o模型。作为GPT系列的新成员,GPT-4o在多模态输入处理和响应速度上取得了重大进展。本文将深入探讨GPT-4o的工作原理,帮助您全面了解这一尖端A…

2、数据库模型图、er图

关系 user和administarators是多对一的关系 user和order是一对多的关系 shipped和order是多对一的关系 order和books是多对多的关系 leavewords和order是一对一的关系 stock和books是一对多的关系 Chens 数据库表示法——ER图 Crows Foot数据库表示法——数据库模型图 Navicat表…

【实战教程】如何使用JMeter来轻松测试WebSocket接口?

1、websocket接口原理 打开网页:从http协议,升级到websocket协议,请求建立websocket连接服务器返回建立成功成功客户端向服务端发送匹配请求服务端选择一个客服上线服务器返回客服id客户端向服务器发送消息服务器推送消息给指定的客服服务器…

经典神经网络(13)GPT-1、GPT-2原理及nanoGPT源码分析(GPT-2)

经典神经网络(13)GPT-1、GPT-2原理及nanoGPT源码分析(GPT-2) 2022 年 11 月,ChatGPT 成功面世,成为历史上用户增长最快的消费者应用。与 Google、FaceBook等公司不同,OpenAI 从初代模型 GPT-1 开始,始终贯彻只有解码器&#xff0…

Vue-cli搭建项目----基础版

什么是Vue-cli 全称:Vue command line interface 是一个用于快速搭建Vue.js项目的标准工具,他简化了Vue.js应用的创建和管理过程,通过命令工具帮助开发者快速生成,配置和管理Vue项目. 主要功能 同一的目录结构本地调试热部署单元测试集成打包上线 具体操作 第一步创建项目:…

STL-迭代器

1.迭代器 1.1正向迭代器 正向迭代器是用一个类封装的,迭代器类。例如:在vector,string中的迭代器就相当于一个指针,在list类中用一个类来封装一个节点,实质上也还是一个指针,迭代器就相当于指向一个节点的…

Ueditor中集成135编辑器

一、背景 在资讯项目平台运营过程中,资讯需要排版,一般都是在135编辑器排好以后,复制到平台中UEditor编辑器中,所以,他们建议集成一下135哈 二、了解135编辑器 开始调研了解135编辑器,发现人家就支持集成…

系统架构师考点--系统配置与性能评价

大家好。今天我们来总结一下系统配置与性能评价的考点内容,这一部分一般是出在上午场的选择题中,占1-2分左右。 一、性能指标 计算机 对计算机评价的主要性能指标有:时钟频率(主频);运算速度;运算精度内存的存储容量…

通达信机构买卖抓牛指标公式源码

通达信机构买卖抓牛指标公式源码&#xff1a; X_1:V/CLOSE/2; X_2:SUM(IF(X_1>100 AND CLOSE>REF(CLOSE,1),X_1,0),0); X_3:SUM(IF(X_1>100 AND CLOSE<REF(CLOSE,1),X_1,0),0); X_4:SUM(IF(X_1<100 AND CLOSE>REF(CLOSE,1),X_1,0),0); X_5:SUM(IF(X_1&l…

涉案财物管理系统|DW-S405系统实现涉案财物科学化管理

随着社会的不断发展&#xff0c;犯罪形式日益复杂&#xff0c;涉案财物的种类和数量也不断增加。传统的涉案财物管理方式已经无法满足现代执法办案的需求。因此&#xff0c;建立一套科学、高效、规范的警用涉案财物管理系统成为公安机关亟待解决的问题。 涉案财物管理系统DW-S…

sheng的学习笔记-AI-K均值算法

ai目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 需要学习前置知识&#xff1a;聚类&#xff0c;可参考 sheng的学习笔记-聚类(Clustering)-CSDN博客 目录 什么是k均值算法 流程 伪代码 数据集 伪代码 代码解释 划分示意图 优化目标 随机初始化 选择聚类数…

快来看,错过了今天就要设置为vip文章了----openEuler:智能算力时代的数字基础设施底座

会议主题&#xff1a;openEuler2024全球发展展望与战略规划 OpenEuler2024项目在2024年成功推出了多个长期支持&#xff08;LTS&#xff09;版本&#xff0c;标志着其在智能技术领域的全新篇章&#xff0c;并致力于构建全球性的开源新生态。以下是该项目的主要内容和成就概览&a…

ARM裸机:地址映射

S5PV210的地址映射详解 什么是地址映射&#xff1f; S5PV210属于ARM Cortex-A8架构&#xff0c;32位CPU&#xff0c;CPU设计时就有32根地址线&32根数据线。 32根地址线决定了CPU的地址空间为4G&#xff0c;那么这4G空间如何分配使用&#xff1f;这个问题就是内存映射问题。…

运算放大器输入、输出、单电源和轨到轨问题

单电源运算放大器问题 由于市场需求&#xff0c;单电源供电已成为一项日益重要的要求。汽车、机顶盒、照相机/摄像机、PC和笔记本电脑应用要求IC供应商提供各种采用单电源轨供电&#xff0c;而性能则与双电源器件相同的线性器件。功耗现已成为线路或电池供电系统的关键参数&am…

meizu M10 魅蓝 10 mblu10 root 解锁 安装LSPosed框架 紫光展锐改串 AT命令 一键新机 改机软件 硬改 改参数

meizu M10 魅蓝 10 mblu10 root 解锁 安装LSPosed框架 紫光展锐改串 AT命令 一键新机 改机软件 硬改 改参数 ro.system.build.version.release11 ro.system.build.version.release_or_codename11 ro.system.build.version.sdk30 ro.system.custom.versionAndroid_M01 ro.prod…

rk3568 OpenHarmony 串口uart与电脑通讯开发案例

一、需求描述&#xff1a; rk3568开发板运行OpenHarmony4.0&#xff0c;通过开发板上的uart串口与电脑进行通讯&#xff0c;相互收发字符串。 二、案例展示 1、开发环境&#xff1a; &#xff08;1&#xff09;rk3568开发板 &#xff08;2&#xff09;系统&#xff1a;OpenHar…

桃园三结义 | 第1集 | 三人一条心,黄土变成金,有你带着俺,大事定能成功啊!| 正所谓择木之禽,得其良木,择主之臣,得遇明主 | 三国演义 | 群雄逐鹿

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f4cc;这篇博客是毛毛张结合三国演义原著分享三国演义文学剧本中的经典台词和语句&#xff0c;本篇分享的是《三国演义》第Ⅰ部分《群雄逐鹿》的第1️⃣集《桃…

薄冰英语语法学习--名词2-格

名词后面 s&#xff0c;代表后面这个东西属于前面的。 比如toms book&#xff0c;汤姆的书。 末尾是s&#xff0c;那么直接在最后加就行了。比如boys&#xff0c;男孩们的 表示几个词共同 的所有关系在最后一个词的词尾加 sMary and Toms books 玛丽和汤姆共有的书表示几个词…

风水研究会官网源码系统-可展示自己的领域内容-商品售卖等

一款用于展示风水行业&#xff0c;周易测算行业&#xff0c;玄学行业的系统&#xff0c;并支持售卖自己的商品。 整洁大气&#xff0c;非常漂亮&#xff0c;前端内容均可通过后台修改。 大致功能&#xff1a; 支持前端内容通过后端自定义支持开启关闭会员功能&#xff0c;会…