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

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 XGBClassifierif __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_scoreweights = [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.mzph.cn/web/75880.shtml

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

相关文章

Flutter 2025 Roadmap

2025 这个路线图是有抱负的。它主要代表了我们这些在谷歌工作的人收集的内容。到目前为止,非Google贡献者的数量超过了谷歌雇佣的贡献者,所以这并不是一个详尽的列表,列出了我们希望今年Flutter能够出现的所有令人兴奋的新事物!在…

如何通过API接口获取淘宝商品价格?实操讲解

要通过API接口获取淘宝商品价格,需使用淘宝开放平台(Taobao Open Platform, TOP)提供的商品详情API(如taobao.item.get或taobao.item_get)。以下是完整的实操步骤: 一、前期准备 注册淘宝开放平台账号 访问…

按键精灵安卓/ios脚本辅助工具开发教程:如何把界面配置保存到服务器

在使用按键精灵工具辅助的时候,多配置的情况下,如果保存现有的配置,并且读取,尤其是游戏中多种任务并行情况下,更是需要界面进行保存,简单分享来自紫猫插件的配置保存服务器写法。 界面例子: …

DP34 【模板】前缀和 -- 前缀和

目录 一&#xff1a;题目 二&#xff1a;算法原理 三&#xff1a;代码实现 一&#xff1a;题目 题目链接&#xff1a;【模板】前缀和_牛客题霸_牛客网 二&#xff1a;算法原理 三&#xff1a;代码实现 #include <iostream> #include <vector> using namespac…

关于我的服务器

最近我买了台腾讯云服务器&#xff0c;然后新手小白只会用宝塔。。。 安装完之后默认的端口是8888&#xff0c;打开面板就会提示我有风险。然后 我改了端口之后&#xff0c;怎么都打不开。 于是 学到了几句命令可以使用&#xff1a; //查看端口是否已经修改成功 cat www/se…

机器学习常用算法总结

1. 概述 机器学习的定义是对于某类任务T和性能度量P&#xff0c;如果一个计算机程序在T上其性能P随着经验E而自我完善&#xff0c;那么我们就称这个系统从经验E中学习&#xff0c;机器学习是人工智能的一种方法&#xff0c;它通过在大量数据中学习隐藏的规则&#xff0c;模式和…

ns-3中UDP饱和流发包时间间隔设置最合理值

ns3的官方手册很全&#xff0c;相关书籍也是有的&#xff0c;官网先贴在这里&#xff1a; ns-3 | a discrete-event network simulator for internet systemsa discrete-event network simulator for internet systemshttps://www.nsnam.org/相关的脚本介绍也都有一些&#xf…

Windsurf代码依赖检查导入

目录 1. 在全局配置中根据需求设置检查的文件&#xff0c;以python为例 2. 执行命令生成requirements.txt文件&#xff0c;此操作可以将当前代码所需的依赖全部写入 3. 在Cascade对话窗口输入detect-dependencies查询 4. 根据查询出来的结果优化requirements.txt&#xff0c;可…

复变函数摘记3

复变函数摘记3 5. 留数5.1 可去奇点、极点、本性奇点5.2 零点与极点的关系5.3 在无穷远点处的情形5.4 留数 5. 留数 \quad 如果函数 f ( z ) f(z) f(z) 在 z 0 z_0 z0​ 及 z 0 z_0 z0​ 的邻域内处处可导&#xff0c;那么称 f ( z ) f(z) f(z) 在点 z 0 z_0 z0​ 处解析。…

vscode格式化为什么失效?自动保存和格式化(Prettier - Code formatter,vue-format)

vscode自动格式化保存最终配置 博主找了好多的插件&#xff0c;也跟着教程配置了很多&#xff0c;结果还是没有办法格式化&#xff0c;最终发现了一个隐藏的小齿轮&#xff0c;配置完后就生效了 关键步骤 关键配置 一定要点小齿轮&#xff01;&#xff01;&#xff01; 这个小…

Framer Motion简介

Framer Motion 是什么&#xff1f; Framer Motion 是一个 用于 React 的现代动画库&#xff0c;专为创建流畅、高性能且富有表现力的动画而设计。它不仅适合简单的 UI 动效&#xff0c;也能优雅地实现复杂的动画编排与手势交互。 &#x1f680; 为什么选择 Framer Motion&…

多种方案对比实现 Kaggle 比赛介绍进行行业分类

Kaggle 平台汇集了大量来自不同行业的数据科学竞赛&#xff0c;但这些比赛的标题或简介往往表述多样、不易直接归类。无论是做项目归档、行业研究&#xff0c;还是搭建竞赛推荐系统&#xff0c;都需要一个可靠的方法来将比赛自动归入对应行业标签。 本教程提供使用 HuggingFac…

Android Jni(二)加载调用第三方 so 库

文章目录 Android Jni&#xff08;二&#xff09;加载调用第三方 so 库前置知识CPU架构 ABI 基本步骤1、将第三方 SO 库文件放入项目中的正确位置&#xff1a;2. 创建 JNI 接口3. 实现 JNI 层代码4、配置 CMake 常见问题解决1、UnsatisfiedLinkError&#xff1a;2、函数找不到&…

服务器本地搭建

socket函数 它用于创建一个新的套接字&#xff08;socket&#xff09;。 函数原型 #include <sys/socket.h> int socket(int domain, int type, int protocol);参数解释 domain&#xff1a;它指定了通信所使用的协议族&#xff0c;常见的取值如下&#xff1a; AF_INET…

MIP-Splatting:全流程配置与自制数据集测试【ubuntu20.04】【2025最新版】

一、引言 在计算机视觉和神经渲染领域&#xff0c;3D场景重建与渲染一直是热门研究方向。近期&#xff0c;3D高斯散射&#xff08;3D Gaussian Splatting&#xff09;因其高效的渲染速度和优秀的视觉质量而受到广泛关注。然而&#xff0c;当处理大型复杂场景时&#xff0c;这种…

Redis 高可用集群搭建与优化实践

在分布式系统中,缓存技术用于提升性能和响应速度。 Redis 作为一款高性能的键值存储系统,广泛应用于缓存、消息队列和会话管理等场景。随着业务规模的扩大,单机 Redis 的性能和可用性逐渐无法满足需求。 因此,搭建高可用的 Redis 集群可以解决这一问题。我将详细介绍 Red…

专题十五:动态路由——BGP

一、BGP的基本概念 BGP&#xff08;Border Gateway Protocol&#xff0c;边界网关协议&#xff09;是一种用于在不同自治系统&#xff08;AS&#xff09;之间交换路由信息的外部网关协议&#xff08;EGP&#xff09;。通过TCP179端口建立连接。目前采用BGP4版本&#xff0c;IP…

【Flask开发】嘿马文学web完整flask项目第4篇:4.分类,4.分类【附代码文档】

教程总体简介&#xff1a;2. 目标 1.1产品与开发 1.2环境配置 1.3 运行方式 1.4目录说明 1.5数据库设计 2.用户认证 Json Web Token(JWT) 3.书架 4.1分类列表 5.搜索 5.3搜索-精准&高匹配&推荐 6.小说 6.4推荐-同类热门推荐 7.浏览记录 8.1配置-阅读偏好 8.配置 9.1项目…

在Mac上离线安装k3s

目录 首先是安装multipass。 1. 系统要求 2. 环境准备 本来想照着网上文档学习安装一下k3s&#xff0c;没想到在docker被封了之后&#xff0c;现在想通过命令行去下载github的资源也不行了&#xff08;如果有网友看到这个文档、并且知道问题原因的&#xff0c;请留言告知&am…

vscode+wsl 运行编译 c++

linux 的 windows 子系统&#xff08;wsl&#xff09;是 windows 的一项功能&#xff0c;可以安装 Linux 的发行版&#xff0c;例如&#xff08;Ubuntu&#xff0c;Kali&#xff0c;Arch Linux&#xff09;等&#xff0c;从而可以直接在 windows 下使用 Linux 应用程序&#xf…