数据分析 | 选择最佳的Stacking堆叠模型、单层结构双层结构 | Python代码

news2025/2/22 22:35:37

目录

一、单层结构

二、 双层结构

三、运行结果


        一、单层Stacking结构,基学习器为:朴素贝叶斯、随即下降、随机森林、决策树、AdaBoost、GBDT、XGBoost,7个任选3个作为基学习器组合,Meta函数固定为MLP。

import itertools
import pandas as pd
from sklearn.neural_network import MLPClassifier
from sklearn.linear_model import SGDClassifier
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier, AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from xgboost import XGBClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, roc_auc_score, f1_score, confusion_matrix
from sklearn.ensemble import StackingClassifier

# 导入数据
data_train_lasso = pd.read_excel()
data_validation_lasso = pd.read_excel()
data_test_lasso = pd.read_excel()

# 划分数据集
X_train = data_train_lasso.iloc[:, 0:-1]
y_train = data_train_lasso.iloc[:, -1]
X_validation = data_validation_lasso.iloc[:, 0:-1]
y_validation = data_validation_lasso.iloc[:, -1]
X_test = data_test_lasso.iloc[:, 0:-1]
y_test = data_test_lasso.iloc[:, -1]

# 定义基础分类器
base_classifiers = {
    'nb': GaussianNB(),
    'sgd': SGDClassifier(random_state=514),
    'rf': RandomForestClassifier(random_state=514),
    'dt': DecisionTreeClassifier(random_state=514),
    'ada': AdaBoostClassifier(random_state=514),
    'gbdt': GradientBoostingClassifier(random_state=514),
    'xgb': XGBClassifier(random_state=514)
}

# 定义元分类器
meta_classifier = MLPClassifier(random_state=514)

# 生成基学习器的组合
base_combinations = list(itertools.combinations(base_classifiers.keys(), 3))

# 保存结果的列表
results = []

# 遍历每个组合
for base_combination in base_combinations:
    # 选取当前组合的基学习器
    current_classifiers = [(name, base_classifiers[name]) for name in base_combination]

    # 创建StackingClassifier
    stacking_classifier = StackingClassifier(estimators=current_classifiers, final_estimator=meta_classifier)

    # 训练Stacking分类器
    stacking_classifier.fit(X_train, y_train)

    # 预测测试集
    y_pred = stacking_classifier.predict(X_test)

    # 评估性能
    accuracy_stacking = accuracy_score(y_test, y_pred)
    auc_stacking = roc_auc_score(y_test, y_pred)
    f1_stacking = f1_score(y_test, y_pred)
    tn, fp, fn, tp = confusion_matrix(y_test, y_pred).ravel()
    fpr_stacking = fp / (fp + tn)

    # 保存当前组合的评估指标
    result = {
        'Classifiers': base_combination,
        'Accuracy': accuracy_stacking,
        'AUC': auc_stacking,
        'F1 Score': f1_stacking,
        'FPR': fpr_stacking
    }

    results.append(result)

# 将结果转为DataFrame
results_df = pd.DataFrame(results)

# 打印结果
print(results_df)

# 保存结果到Excel文件
results_df.to_excel()
       二、 双层Stacking结构,基学习器为:朴素贝叶斯、随即下降、随机森林、决策树、AdaBoost、GBDT、XGBoost,7个中每层任选2个作为基学习器组合,Meta函数固定为MLP。

from itertools import combinations
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import SGDClassifier
from sklearn.naive_bayes import GaussianNB
from xgboost import XGBClassifier
from sklearn.neural_network import MLPClassifier
from sklearn.ensemble import StackingClassifier
from sklearn.metrics import accuracy_score, roc_auc_score, f1_score, confusion_matrix
import pandas as pd

# 导入数据
data_train_lasso = pd.read_excel()
data_validation_lasso = pd.read_excel()
data_test_lasso = pd.read_excel()

# 划分数据集
X_train = data_train_lasso.iloc[:, 0:-1]
y_train = data_train_lasso.iloc[:, -1]
X_validation = data_validation_lasso.iloc[:, 0:-1]
y_validation = data_validation_lasso.iloc[:, -1]
X_test = data_test_lasso.iloc[:, 0:-1]
y_test = data_test_lasso.iloc[:, -1]

# 定义基学习器
base_classifiers = [
    ('naive_bayes', GaussianNB()),
    ('sgd', SGDClassifier(random_state=514)),
    ('random_forest', RandomForestClassifier(random_state=514)),
    ('decision_tree', DecisionTreeClassifier(random_state=514)),
    ('adaboost', AdaBoostClassifier(random_state=514)),
    ('gbdt', GradientBoostingClassifier(random_state=514)),
    ('xgboost', XGBClassifier(random_state=514))
]

# 定义元学习器
meta_classifier = MLPClassifier(random_state=514)

# 创建双层StackingClassifier
results = {'combo': [], 'accuracy': [], 'auc': [], 'f1': [], 'fpr': []}

for combo_first_layer in combinations(base_classifiers, 2):
    for combo_second_layer in combinations(combo_first_layer, 2):
        # 创建StackingClassifier
        stacking_classifier = StackingClassifier(estimators=list(combo_second_layer), final_estimator=meta_classifier)

        # 训练Stacking分类器
        stacking_classifier.fit(X_train, y_train)

        # 预测测试集
        y_pred = stacking_classifier.predict(X_test)

        # 评估性能
        accuracy_stacking = accuracy_score(y_test, y_pred)
        auc_stacking = roc_auc_score(y_test, y_pred)
        f1_stacking = f1_score(y_test, y_pred)
        tn, fp, fn, tp = confusion_matrix(y_test, y_pred).ravel()
        fpr_stacking = fp / (fp + tn)

        # 保存结果
        combo_key = tuple(sorted([combo_first_layer[0][0], combo_first_layer[1][0], combo_second_layer[0][0], combo_second_layer[1][0]]))
        results['combo'].append(combo_key)
        results['accuracy'].append(accuracy_stacking)
        results['auc'].append(auc_stacking)
        results['f1'].append(f1_stacking)
        results['fpr'].append(fpr_stacking)

# 将结果保存到 DataFrame
results_df = pd.DataFrame(results)

# 将 DataFrame 写入 Excel 文件
results_df.to_excel()
        三、运行结果如下:
ClassifiersAccuracyAUCF1 ScoreFPR
('nb', 'sgd', 'rf')0.8979905110.8996831780.8948050080.127034121
('nb', 'sgd', 'dt')0.8979905110.8996831780.8948050080.127034121
('nb', 'sgd', 'ada')0.8979905110.8996831780.8948050080.127034121
('nb', 'sgd', 'gbdt')0.8979905110.8996831780.8948050080.127034121
('nb', 'sgd', 'xgb')0.8979905110.8996831780.8948050080.127034121
('nb', 'rf', 'dt')0.9911387110.9913027240.9905709410.011286089
('nb', 'rf', 'ada')0.9908596150.9909692440.9902652890.010761155
('nb', 'rf', 'gbdt')0.9911387110.9912938480.990569540.011154856
('nb', 'rf', 'xgb')0.9912084850.9913683410.9906444910.011154856
('nb', 'dt', 'ada')0.9898130060.9899051020.9891482090.011548556
('nb', 'dt', 'gbdt')0.9908596150.9909692440.9902652890.010761155
('nb', 'dt', 'xgb')0.9915573540.9916609180.9910070610.009973753
('nb', 'ada', 'gbdt')0.9855567960.9856273010.9846130970.015485564
('nb', 'ada', 'xgb')0.9905107450.990721050.9899109790.012598425
('nb', 'gbdt', 'xgb')0.9905805190.9907955430.9899859060.012598425
('sgd', 'rf', 'dt')0.5316773650.500
('sgd', 'rf', 'ada')0.8979905110.8996831780.8948050080.127034121
('sgd', 'rf', 'gbdt')0.5316773650.500
('sgd', 'rf', 'xgb')0.5316773650.500
('sgd', 'dt', 'ada')0.8979905110.8996831780.8948050080.127034121
('sgd', 'dt', 'gbdt')0.5316773650.500
('sgd', 'dt', 'xgb')0.5316773650.500
('sgd', 'ada', 'gbdt')0.8979905110.8996831780.8948050080.127034121
('sgd', 'ada', 'xgb')0.8979905110.8996831780.8948050080.127034121
('sgd', 'gbdt', 'xgb')0.5316773650.500
('rf', 'dt', 'ada')0.9911387110.9913027240.9905709410.011286089
('rf', 'dt', 'gbdt')0.9905107450.990641160.9898974890.011417323
('rf', 'dt', 'xgb')0.9913480320.9914818210.9907888870.010629921
('rf', 'ada', 'gbdt')0.9911387110.9912760940.9905667380.010892388
('rf', 'ada', 'xgb')0.9911387110.9912405880.990561130.010367454
('rf', 'gbdt', 'xgb')0.9912084850.9913683410.9906444910.011154856
('dt', 'ada', 'gbdt')0.9902316490.9903786930.9896034460.011942257
('dt', 'ada', 'xgb')0.9905107450.990694420.9899064870.012204724
('dt', 'gbdt', 'xgb')0.9907898410.9909391340.9901975350.011417323
('ada', 'gbdt', 'xgb')0.9906502930.990861160.9900593470.012467192

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

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

相关文章

IDEA 2022.3.3 安装教程

1.下载2022.3.3版本IDEA 链接:https://pan.baidu.com/s/1z-Yfl7fWHgqz8SQLn2-u0g?pwd949u 提取码:949u 2.安装 下载完成后,双击exe安装包, 点击next 3.选择方式3 4.将下面文件复制到任意位置(不要有中文路径&…

跟着cherno手搓游戏引擎【7】Input轮询

在引擎程序中任何时间,任何位置都能知道按键是否按下、鼠标的位置等等信息。 与事件系统的区别:事件系统是在按下时调用并传递按键状态;轮询是每时每刻都能获取按键状态 创建基类: YOTO/Input.h:名如其意 #pragma …

大模型背景下计算机视觉年终思考小结(一)

1. 引言 在过去的十年里,出现了许多涉及计算机视觉的项目,举例如下: 使用射线图像和其他医学图像领域的医学诊断应用使用卫星图像分析建筑物和土地利用率相关应用各种环境下的目标检测和跟踪,如交通流统计、自然环境垃圾检测估计…

《ARM Linux内核源码剖析》读书笔记——0号进程(init_task)的创建时机

最近在读《ARM Linux内核源码剖析》,一直没有看到0号进程(init_task进程)在哪里创建的。直到看到下面这篇文章才发现书中漏掉了set_task_stack_end_magic(&init_task)这行代码。 下面这篇文章提到:start_kernel()上来就会运行 set_task_…

Ubuntu 22.04 基础环境搭建

这是Ubuntu软件安装系列的第一篇,我们来聊聊基础环境搭建。 这个专栏主要讲一些常见服务端软件的安装和配置,当然也包括对软件架构和作用的分析,以及使用的场景的介绍。 注意我们这里使用的Ubuntu的版本是22.04,基本上大厂的云服…

vue3+threejs可视化项目——引入threejs加载钢铁侠模型(第二步)

文章目录 ⭐前言💖vue3系列相关文章💖threejs系列相关文章 ⭐引入threejs💖初始化一个场景scene💖 加载模型💖 加载钢铁侠模型 ⭐总结⭐结束 ⭐前言 大家好,我是yma16,本文分享 vue3threejs可视…

Mysql root 密码重置详解

文章目录 1 概述1.1 前言1.2 mysql 版本查询 2 windows 操作系统2.1 mysql 8 及以上版本2.1.1 关闭 mysql 服务2.1.2 通过无认证方式启动 mysql2.1.3 新开窗口,登录 mysql,重置密码 1 概述 1.1 前言 不同的操作系统(如:windows、…

vue2使用 element表格展开功能渲染子表格

默认样式 修改后 样式2 <el-table :data"needDataFollow" border style"width: 100%"><el-table-column align"center" label"序号" type"index" width"80" /><el-table-column align"cent…

AI与区块链的完美交融创新时代的双重引擎

每个投资者都梦想早日进入“下一个亚马逊、苹果或比特币”&#xff0c;以追求代际财富。 然而&#xff0c;这些机会很少而且相距甚远&#xff0c;而且正如每一个虔诚的加密货币本地人都知道的那样&#xff0c;这条道路上常常布满了失败的项目、失信的承诺和波动。 但在 2023 …

5个99%的人可能不知道的实用程序库!

前言 作为一名前端开发者,这些 JavaScript 库极大地提高了我的工作效率,如格式化日期、处理 URL 参数和调试移动网页。朋友们,我想和你们分享这些库。 1. 使用 “Day.js” 来格式化日期和时间 链接 作为开发者,我已经厌倦了在 JavaScript 中操作日期和时间,因为它太麻烦了。…

【SQL】SQL语法小结

相关资料 参考链接1&#xff1a;SQL 语法&#xff08;超级详细&#xff09; 参考链接2&#xff1a;史上超强最常用SQL语句大全 SQL练习网站&#xff1a;CSDN、牛客、LeetCode、LintCode SQL相关视频&#xff1a; 推荐书籍&#xff1a; 文章目录 数据分析对SQL的要求SQL语法简介…

Android Activity的启动流程(Android-10)

前言 在Android开发中&#xff0c;我们经常会用到startActivity(Intent)方法&#xff0c;但是你知道startActivity(Intent)后Activity的启动流程吗&#xff1f;今天就专门讲一下最基础的startActivity(Intent)看一下Activity的启动流程&#xff0c;同时由于Launcher的启动后续…

竞赛保研 多目标跟踪算法 实时检测 - opencv 深度学习 机器视觉

文章目录 0 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习多目标跟踪 …

工业平板定制方案_基于联发科、紫光展锐平台的工业平板电脑方案

工业平板主板采用联发科MT6762平台方案&#xff0c;搭载Android 11.0操作系统&#xff0c; 主频最高2.0GHz&#xff0c;效能有大幅提升;采用12nm先进工艺&#xff0c;具有低功耗高性能的特点。 该工业平板主板搭载了IMG GE8320图形处理器&#xff0c;最高主频为680MHz, 支持108…

Vue-24、Vue过滤器

1、效果 2、过滤器实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>过滤器</title><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.…

有序矩阵中第 K 小的元素

题目链接 有序矩阵中第 K 小的元素 题目描述 注意点 每行和每列元素均按升序排序找到一个内存复杂度优于 O(n) 的解决方案 解答思路 使用二分查找&#xff0c;思路为&#xff1a; &#xff08;1&#xff09;因为左上角的元素值更小&#xff0c;右下角的元素值更大&#xf…

dp专题13 零钱兑换II

本题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 思路&#xff1a; 根据题意&#xff0c;这是一道很裸的背包问题&#xff0c;其中这里是返回 背包方案数 的。 我们可以直接推出公式 &#xff1a; dp [ j ] dp[ j - coins[ i ] ] 在我之前…

User-Agent(用户代理)是什么?

User-Agent&#xff08;用户代理&#xff09;是什么&#xff1f; User-Agent 即用户代理&#xff0c;简称“UA”&#xff0c;它是一个特殊字符串头。网站服务器通过识别 “UA”来确定用户所使用的操作系统版本、CPU 类型、浏览器版本等信息。而网站服务器则通过判断 UA 来给客…

onlyoffice源码编译

环境准备 官网要求CPU dual core 2 GHz or better RAM at least 2 GB, but depends of the host OS. More is better HDD at least 40 GB of free space SWAP at least 4 GB, but depends of the host OS. More is better SoftwareOS 64-bit Ubuntu 16.04 The solution has be…

Linux命令之pwd,cd,ls,cat,more,less,head,tail文件目录类命令的使用

一、实验题 1、在桌面打开终端&#xff0c;查看当前目录 2、改变目录位置至当前目录的父目录 3、改变目录位置至用户的家目录 4、利用绝对路径改变目录到/usr/local目录下 5、列出当前目录下的文件及目录 6、列出包括以“.”开始的隐藏文件在内的所有文件 7、列出当前目录下所…