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.pswp.cn/web/75880.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75880.shtml
英文地址,請注明出處:http://en.pswp.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…