科赛——【文本情感分类模型搭建 | 预选赛】(Score:0.8624)

2023-11-10 12:51

本文主要是介绍科赛——【文本情感分类模型搭建 | 预选赛】(Score:0.8624),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

预选赛题——文本情感分类模型

Data Analysis

先来观察下数据,训练集和测试集分别存储在当前目录下的train.csv和20190520_test.csv中

train_data = pd.read_csv('train.csv', lineterminator='\n') # 行分隔符 = '\n'
test_data = pd.read_csv('20190520_test.csv', lineterminator='\n')
train_data['label'] = train_data['label'].map({'Negative':0, 'Positive':1})
train_data.head()

Data Processing

数据处理差不多花了我1整天的时间,主要还是我太菜,对python的很多用法不太熟

首先我把label标签离散为0-1Negative0Positive1

然后将遍历每一行,对review这一列的文本进行清洗,很明显的看到,文本里面有各种垃圾信息,比方说有emoji表情,还有各种标点符号、数字等等。过滤掉这些符号以后,再将一行文本全部转换成小写,之后按照空格进行分隔,然后再用一个空格隔开进行拼接,这样做的目的是因为,一行文本里面两个词之间可能不止用一个空格隔开,所以我干脆人为用一个空格隔开,还有一些乱七八糟符号的干扰大家可以用自己的办法过滤

train_data['label'] = train_data['label'].map({'Negative':0, 'Positive':1})
rmSignal = ['.', '?', '!', ':', '-', '+', '/', '"', ',']def review_to_words(data):# 正则去除表情emoji_pattern = re.compile(u'[\U00010000-\U0010ffff]')data = emoji_pattern.sub(u'', data)# 正则去除标点fuhao_pattern = re.compile(u'\.*')data = fuhao_pattern.sub(u'', data)# 正则去除数字digit_pattern = re.compile(u'\d+')data = digit_pattern.sub(u'', data)# 空格拆分词语words = data.lower().split()# 去掉rmSignalmeaningful_words = [w for w in words if not w in rmSignal]# 将筛分好的词合成一个字符串,并用空格分开words = " ".join(meaningful_words)return wordsclean_train_reviews = []
for i in range(0, len(train_data)):clean_train_reviews.append(review_to_words(train_data['review'][i]))
clean_train_reviews[:5]
输出:
['jo bhi ap se tou behtar hoon','ya allah meri sister affia ki madad farma','yeh khud chahta a is umar main shadi krna had ogi','tc apky mun xe exe alfax achy nae lgty','good']

接着使用TF-IDF构建词袋,然后查看一下词频最高的十个词

tfv = TfidfVectorizer()
train_data_features = tfv.fit_transform(clean_train_reviews)
train_data_features = train_data_features.toarray()
cntWords = sorted(tfv.vocabulary_, key=lambda x:x[0])
cntWords[-10:]
输出:
['اے', 'بیٹھی', 'جیڑی', 'سی', 'ناں', 'کردی', 'کر', 'ھاں', '賭easar', '鄭h']

Model Selection

Bayes

在模型选择上,对于这种文本分类问题,贝叶斯是一个简单又好用的分类器,算法思想挺简单的,这里不再介绍原理

利用cross_val_score对训练集进行交叉训练,这里我设定的是20折,大家可以试试别的参数,包括贝叶斯的参数我也用的默认的,也可以适当调参

model_NB = MNB()
model_NB.fit(train_data_features,train_data["label"])score = np.mean(cross_val_score(model_NB,train_data_features, train_data["label"], cv=20, scoring='roc_auc'))
print("多项式贝叶斯分类器20折交叉验证得分: ",score) # 0.8614076771593228
Logistic Regression

同时我也顺便建立了一下Logistic Regression模型

model_LR = LR(random_state = 0)
model_LR.fit(train_data_features,train_data["label"])score = np.mean(cross_val_score(model_LR,train_data_features, train_data["label"], cv=20, scoring='roc_auc'))
print("Logistic Regression20折交叉验证得分: ", score) # 0.844763864535499

Predict

从训练集的结果上来看,贝叶斯更优,因此我就用训练好的贝叶斯分类器对测试集进行预测

首先也要把测试集的数据进行清理,然后通过已经训练好的TF-IDF模型求出词频-逆文件频率矩阵,带入到贝叶斯分类器进行测试即可

clean_test_reviews = []
for i in range(0, len(test_data["review"])):clean_test_reviews.append(review_to_words(test_data["review"][i]))
clean_test_reviews[:5]test_data_features = tfv.transform(clean_test_reviews)
test_data_features = test_data_features.toarray()result = model_NB.predict_proba(test_data_features)
#print(result[:,1])
output = pd.DataFrame(data={"ID":test_data["ID"], "Pred":result[:,1]})
output.to_csv("out_model.csv", index=False, quoting=3)

提交后Score为0.86241116,咸鱼水平有限,大佬们勿喷

数据集和代码可以访问咸鱼的Github

这篇关于科赛——【文本情感分类模型搭建 | 预选赛】(Score:0.8624)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/382754

相关文章

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O