Kaggle-Disaster Tweets-(二分类+NLP+模型融合)

news2025/4/20 18:04:15

Disaster Tweets

题意:

就是给出一个dataframe包含text这一列代表着文本,文本会有一些词,问对于每条记录中的text是真关于灾难的还是假关于灾难的。
比如我们说今天作业真多,这真是一场灾难。实际上这个灾难只是我们调侃而言的。

数据处理:

1.首先要将文本转化为模型可以接受的数据。建立vectorizer将文本转换为词频矩阵,先fit训练数据,然后把这个vectorizer再应用到test数据上,这样才能保证测试数据和训练数据的一致性。
2.拆分训练集合和验证集合,对下面模型融合进行评估。

建立模型:

1.逻辑归回模型LogisticRegression,设置本模型的网格搜索参数,对lr进行超参数优化。
2.随机森林模型RandomForestClassifier,设置本模型的网格搜索参数,对rf进行超参数优化。
3.xgboost模型XGBClassifier,设置本模型的网格搜索参数,对xgb进行超参数优化。
4.投票模型融合,把三个算法的最佳参数下的模型进行融合训练,求出预测分数。只是把某个答案出现次数最多的作为答案。
5.加权模型融合,只是在投票模型的基础上,为每个模型分配一个权重。
6.堆叠模型融合,把三个模型输出答案作为次级模型的输入,再进行训练,预测出结果。逻辑回归模型会学习如何结合基模型的预测概率,以更准确地预测样本的类别。
例如,模型可能会学习到:
当基模型1和基模型3的预测概率较高时,样本更可能属于类别1。
当基模型2的预测概率较高时,样本更可能属于类别0。

代码:
import sys
import pandas as pd
from sklearn.ensemble import RandomForestClassifier, VotingClassifier, StackingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn import feature_extraction, model_selection
from sklearn.model_selection import GridSearchCV
from xgboost import XGBClassifier

if __name__ == '__main__':
    #数据处理
    data_train = pd.read_csv('/kaggle/input/nlp-getting-started/train.csv')
    data_test = pd.read_csv('/kaggle/input/nlp-getting-started/test.csv')
    vectorizer = feature_extraction.text.CountVectorizer()
    X_train = vectorizer.fit_transform(data_train['text'])
    Y_train = data_train['target']
    X_test = vectorizer.transform(data_test['text'])
    X_train,X_val,Y_train,Y_val = model_selection.train_test_split(X_train,Y_train,test_size=0.2,random_state=42)

    #lr模型
    lr_param_grid = {
        'penalty': ['l1', 'l2', 'elasticnet', None], #指定正则化类型,用于防止模型过拟合。
    #    'C': [0.001, 0.01, 0.1, 1, 10, 100], #正则化强度的倒数,值越小表示正则化越强。
    #    'solver': ['liblinear', 'saga'], #指定用于求解逻辑回归参数的优化算法。
    #    'class_weight': [None, 'balanced'] #指定类别权重,用于处理类别不平衡问题。
    }
    lr_model = GridSearchCV(
        estimator = LogisticRegression(random_state=42),  #对什么模型进行搜索超参数
        param_grid = lr_param_grid,  #超参数的候选值
        scoring = 'accuracy',  #使用准确率作为评估指标
        cv = 3,  #使用3折交叉验证
        n_jobs = -1,  #使用所有cpu并行运算
    )
    lr_model.fit(X_train, Y_train)
    print('lr预测分数:' + str(lr_model.score(X_val, Y_val)))

    #rf模型
    rf_param_grid = {
        'n_estimators': [50, 100, 200], #树的数量
    #    'max_depth': [None, 10, 20, 30], #树的最大深度
    #    'min_samples_split': [2, 5, 10], #节点分裂所需的最小样本数
    #    'min_samples_leaf': [1, 2, 4], #叶节点所需的最小样本数
    #    'max_features': ['auto', 'sqrt', 'log2'], #找最佳分裂时考虑的最大特征数
    #    'bootstrap': [True, False] #否使用有放回抽样构建树
    }
    rf_model = GridSearchCV(
        estimator=RandomForestClassifier(random_state=42),  # 对什么模型进行搜索超参数
        param_grid=rf_param_grid,  # 超参数的候选值
        scoring='accuracy',  # 使用准确率作为评估指标
        cv=3,  # 使用3折交叉验证
        n_jobs=-1,  # 使用所有cpu并行运算
    )
    rf_model.fit(X_train, Y_train)
    print('rf预测分数:' + str(rf_model.score(X_val, Y_val)))


    #xgb模型
    xgb_param_grid = {
        'n_estimators': [50, 100, 200], #树的数量
    #    'max_depth': [3, 4, 5, 6], #树的最大深度
    #    'learning_rate': [0.01, 0.1, 0.2], #学习速率
    #    'subsample': [0.8, 1.0], #指定每次迭代中用于训练每棵树的数据比例
    #    'colsample_bytree': [0.8, 1.0], #指定每次迭代中用于训练每棵树的特征比例
    #    'gamma': [0, 0.1, 0.2], #最小损失减少值
    #    'min_child_weight': [1, 3, 5], #子节点所需的最小样本权重和
    #    'reg_alpha': [0, 0.1, 1], #控制模型的正则化强度
    #    'reg_lambda': [0, 0.1, 1] #控制模型的正则化强度
    }
    xgb_model = GridSearchCV(
        estimator = XGBClassifier(random_state=42), #对什么模型进行搜索超参数
        param_grid = xgb_param_grid, #超参数的候选值
        scoring = 'accuracy', #使用准确率作为评估指标
        cv = 3, #使用3折交叉验证
        n_jobs = -1, #使用所有cpu并行运算
    )
    xgb_model.fit(X_train,Y_train)
    print('xgb预测分数:' + str(xgb_model.score(X_val, Y_val)))

    lr_best = lr_model.best_estimator_
    rf_best = rf_model.best_estimator_
    xgb_best = xgb_model.best_estimator_

    #投票模型融合
    voting_model = VotingClassifier(
        estimators=[('lr', lr_best), ('rf', rf_best), ('xgb', xgb_best)],
        voting='soft'  # 使用预测概率的平均值
    )
    voting_model.fit(X_train, Y_train)
    print('投票模型融合预测分数:' + str(voting_model.score(X_val, Y_val)))

    #加权投票模型融合
    lr_score = lr_model.score(X_val,Y_val)
    rf_score = rf_model.score(X_val,Y_val)
    xgb_score = xgb_model.score(X_val,Y_val)
    total_score = lr_score + rf_score + xgb_score
    weights = [lr_score / total_score, rf_score / total_score, xgb_score / total_score]
    weighted_voting_model = VotingClassifier(
        estimators=[('lr', lr_best), ('rf', rf_best), ('xgb', xgb_best)],
        voting='soft',
        weights=weights
    )
    weighted_voting_model.fit(X_train, Y_train)
    print('加权模型融合预测分数:' + str(weighted_voting_model.score(X_val, Y_val)))

    #堆叠模型融合
    stacking_model = StackingClassifier(
        estimators = [('lr', lr_best), ('rf', rf_best), ('xgb', xgb_best)],
        final_estimator=LogisticRegression(),
        cv=3  # 使用3折交叉验证生成元模型的训练数据
    )
    stacking_model.fit(X_train, Y_train)
    print('堆叠模型融合预测分数:' + str(stacking_model.score(X_val, Y_val)))


    Submission = pd.DataFrame({
        'id': data_test['id'],
        'target': stacking_model.predict(X_test)
    })
    Submission.to_csv('/kaggle/working/Submission.csv', index=False)

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

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

相关文章

.Net 9 webapi使用Docker部署到Linux

参考文章连接: https://www.cnblogs.com/kong-ming/p/16278109.html .Net 6.0 WebApi 使用Docker部署到Linux系统CentOS 7 - 长白山 - 博客园 项目需要跨平台部署,所以就研究了一下菜鸟如何入门Net跨平台部署,演示使用的是Net 9 webAPi Li…

PyTorch 根据官网命令行无法安装 GPU 版本 解决办法

最近遇到一个问题,PyTorch 官网给出了 GPU 版本的安装命令,但安装成功后查看版本,仍然是 torch 2.6.0cpu 1. 清理现有 PyTorch 安装 经过探索发现,需要同时卸载 conda 和 pip 安装的 torch。 conda remove pytorch torchvision …

PHP防火墙代码,防火墙,网站防火墙,WAF防火墙,PHP防火墙大全

PHP防火墙代码,防火墙,网站防火墙,WAF防火墙,PHP防火墙大全 资源宝整理分享&#xff1a;https://www.htple.net PHP防火墙&#xff08;作者&#xff1a;悠悠楠杉&#xff09; 验证测试&#xff0c;链接后面加上?verify_cs1后可以自行测试 <?php //复制保存zzwaf.php$we…

使用 Vitis Model Composer 生成 FPGA IP 核

本文将逐步介绍如何使用 Vitis Model Composer 生成 FPGA IP 核&#xff0c;从建模到部署。 在当今快节奏的世界里&#xff0c;技术正以前所未有的速度发展&#xff0c;FPGA 设计也不例外。高级工具层出不穷&#xff0c;加速着开发进程。传统上&#xff0c;FPGA 设计需要使用硬…

BERT、T5、ViT 和 GPT-3 架构概述及代表性应用

BERT、T5、ViT 和 GPT-3 架构概述 1. BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09; 架构特点 基于 Transformer 编码器&#xff1a;BERT 使用多层双向 Transformer 编码器&#xff0c;能够同时捕捉输入序列中每个词的左右上下文信息…

倚光科技:以创新之光,雕琢全球领先光学设计公司

在光学技术飞速发展的当下&#xff0c;每一次突破都可能为众多领域带来变革性的影响。而倚光&#xff08;深圳&#xff09;科技有限公司&#xff0c;作为光学设计公司的一颗璀璨之星&#xff0c;正以其卓越的创新能力和深厚的技术底蕴&#xff0c;引领着光学设计行业的发展潮流…

数据结构(六)——红黑树及模拟实现

目录 前言 红黑树的概念及性质 红黑树的效率 红黑树的结构 红黑树的插入 变色不旋转 单旋变色 双旋变色 插入代码如下所示&#xff1a; 红黑树的查找 红黑树的验证 红黑树代码如下所示&#xff1a; 小结 前言 在前面的文章我们介绍了AVL这一棵完全二叉搜索树&…

解决 Vue 中 input 输入框被赋值后,无法再修改和编辑的问题

目录 需求&#xff1a; 出现 BUG&#xff1a; Bug 代码复现 解决问题&#xff1a; 解决方法1&#xff1a; 解决方法2 关于 $set() 的补充&#xff1a; 需求&#xff1a; 前段时间&#xff0c;接到了一个需求&#xff1a;在选择框中选中某个下拉菜单时&#xff0c;对应的…

【差分隐私相关概念】瑞丽差分隐私(RDP)-瑞丽散度约束了贝叶斯因子后验变化

分步解释和答案&#xff1a; 在Rnyi差分隐私&#xff08;RDP&#xff09;框架中&#xff0c;通过贝叶斯因子和Rnyi散度的关系可以推导出关于后验变化的概率保证。以下是关键步骤的详细解释&#xff1a; 1. 贝叶斯因子的定义与分解 设相邻数据集 D D D 和 D ′ D D′&#x…

前端快速入门——JavaScript函数、DOM

1.JavaScript函数 函数是一段可重复使用的代码块&#xff0c;它接受输入(参数)、执行特定任务&#xff0c;并返回输出。 <scricpt>function add(a,b){return ab;}let cadd(5,10);console.log(c); </script>2.JavaScript事件 JavaScript绑定事件的方法&#xff1…

10【模块学习】LCD1602(二):6路温度显示+实时时钟

项目&#xff1a;6路温度显示实时时钟 1、6路温度显示①TempMenu.c文件的代码②TempMenu.h文件的代码③main.c文件的代码④Timer.c文件的代码⑤Delay.c文件的代码⑥Key.c文件的代码 2、实时时钟显示①BeiJingTime.c文件的代码②BeiJingTime.h文件的代码③main.c文件的代码如下④…

PDF处理控件Aspose.PDF指南:使用 C# 从 PDF 文档中删除页面

需要从 PDF 文档中删除特定页面&#xff1f;本快速指南将向您展示如何仅用几行代码删除不需要的页面。无论您是清理报告、跳过空白页&#xff0c;还是在共享前自定义文档&#xff0c;C# 都能让 PDF 操作变得简单高效。学习如何以编程方式从 PDF 文档中选择和删除特定页面&#…

如何在不同版本的 Elasticsearch 之间以及集群之间迁移数据

作者&#xff1a;来自 Elastic Kofi Bartlett 当你想要升级一个 Elasticsearch 集群时&#xff0c;有时候创建一个新的独立集群并将数据从旧集群迁移到新集群会更容易一些。这让用户能够在不冒任何停机或数据丢失风险的情况下&#xff0c;在新集群上使用所有应用程序测试其所有…

Day08【基于预训练模型分词器实现交互型文本匹配】

基于预训练模型分词器实现交互型文本匹配 目标数据准备参数配置数据处理模型构建主程序测试与评估总结 目标 本文基于预训练模型bert分词器BertTokenizer&#xff0c;将输入的文本以文本对的形式&#xff0c;送入到分词器中得到文本对的词嵌入向量&#xff0c;之后经过若干网络…

npm和npx的作用和区别

npx 和 npm 是 Node.js 生态系统中两个常用的工具&#xff0c;它们有不同的作用和使用场景。 1. npm&#xff08;Node Package Manager&#xff09; 作用&#xff1a; npm 是 Node.js 的包管理工具&#xff0c;主要用于&#xff1a; 安装、卸载、更新项目依赖&#xff08;包&a…

C++学习之金融类安全传输平台项目git

目录 1.知识点概述 2.版本控制工具作用 3.git和SVN 4.git介绍 5.git安装 6.工作区 暂存区 版本库概念 7.本地文件添加到暂存区和提交到版本库 8.文件的修改和还原 9.查看提交的历史版本信息 10.版本差异比较 11.删除文件 12.本地版本管理设置忽略目录 13.远程git仓…

CCF CSP 第36次(2024.12)(1_移动_C++)

CCF CSP 第36次&#xff08;2024.12&#xff09;&#xff08;1_移动_C&#xff09; 解题思路&#xff1a;思路一&#xff1a; 代码实现代码实现&#xff08;思路一&#xff09;&#xff1a; 时间限制&#xff1a; 1.0 秒 空间限制&#xff1a; 512 MiB 原题链接 解题思路&…

7.thinkphp的路由

一&#xff0e;路由简介 1. 路由的作用就是让URL地址更加的规范和优雅&#xff0c;或者说更加简洁&#xff1b; 2. 设置路由对URL的检测、验证等一系列操作提供了极大的便利性&#xff1b; 3. 路由是默认开启的&#xff0c;如果想要关闭路由&#xff0c;在config/app.php配置…

(五)机器学习---决策树和随机森林

在分类问题中还有一个常用算法&#xff1a;就是决策树。本文将会对决策树和随机森林进行介绍。 目录 一.决策树的基本原理 &#xff08;1&#xff09;决策树 &#xff08;2&#xff09;决策树的构建过程 &#xff08;3&#xff09;决策树特征选择 &#xff08;4&#xff0…

【项目管理】第16章 项目采购管理-- 知识点整理

项目管理-相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 &#xff08;一&#xff09;知识总览 项目管理知识域 知识点&#xff1a; &#xff08;项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域&#xff09; 对应&…