【NLP】Datawhale-AI夏令营Day2打卡:数据分析

简介: 【NLP】Datawhale-AI夏令营Day2打卡:数据分析


昨天学习了Python 数据分析相关的库(pandas和sklearn),文本特征提取的方法(基于TF-IDF提取和基于BOW提取,以及停用词的用法),划分数据集的方法,以及机器学习的模型。

1. 学习内容

AI夏令营第三期–基于论文摘要的文本分类与关键词抽取挑战赛教程

1.1 数据探索

数据探索性分析,是通过了解数据集,了解变量间的相互关系以及变量与预测值之间的关系,对已有数据在尽量少的先验假设下通过作图、制表、方程拟合、计算特征量等手段探索数据的结构和规律的一种数据分析方法,从而帮助我们后期更好地进行特征工程和建立模型,是机器学习中十分重要的一步。

本次实践中我们使用 pandas 来读取数据以及数据探索。

✅ 使用pandas读取数据

我们利用 pd.read_csv() 方法对赛题数据进行读取,pd.read_cs() 参数为需要读取的数据地址,读取后返回一个DataFrame 数据:

import pandas as pd
train = pd.read_csv('./基于论文摘要的文本分类与关键词抽取挑战赛公开数据/train.csv')
train['title'] = train['title'].fillna('')
train['abstract'] = train['abstract'].fillna('')
test = pd.read_csv('./基于论文摘要的文本分类与关键词抽取挑战赛公开数据/testB.csv')
test['title'] = test['title'].fillna('')
test['abstract'] = test['abstract'].fillna('')

✅ 查看数据特征

通过pandas提供的一些方法,我们可以在快速查看数据的一些特征:

通过 DataFrame.apply(len).describe() 方法查看数据长度

print(train['text'].apply(len).describe())

观察输出发现数据长度平均值在1620左右。

通过 DataFrame.value_counts() 方法查看数据数量

print(train["label"].value_counts())

观察输出发现 01 标签分布的比较均匀,也就是说我们不必担心数据分布不均而发生过拟合,保证模型的泛化能力。

✅ 数据清洗

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。分析完数据后,特征工程前,必不可少的步骤是对数据清洗。

数据清洗的作用是利用有关技术如数理统计、数据挖掘或预定义的清理规则将脏数据转化为满足数据质量要求的数据。主要包括缺失值处理、异常值处理、数据分桶、特征归一化/标准化等流程。

同时由于表格中存在较多列,我们将这些列的重要内容组合在一起生成一个新的列方便训练。

# 提取文本特征,生成训练集与测试集
train['text'] = train['title'].fillna('') + ' ' +  train['author'].fillna('') + ' ' + train['abstract'].fillna('')+ ' ' + train['Keywords'].fillna('')
test['text'] = test['title'].fillna('') + ' ' +  test['author'].fillna('') + ' ' + test['abstract'].fillna('')

fillna 函数: 补充缺失值

pandas中 fillna() 方法,能够使用指定的方法填充 NA/NaN 值。如果数据集中某行缺少 title author abstract 中的内容,我们需要利用 fillna() 来保证不会出现报错。

✅ 特征工程

特征工程指的是把原始数据转变为模型训练数据的过程,目的是获取更好的训练数据特征。特征工程能使得模型的性能得到提升,有时甚至在简单的模型上也能取得不错的效果。

使用BOW将文本转换为向量表示:

#特征工程
vector = CountVectorizer().fit(train['text'])
train_vector = vector.transform(train['text'])
test_vector = vector.transform(test['text'])

✅ 模型训练与验证

模型的建立和调参决定了最终的结果,模型的选择决定结果的上限, 如何更好的去达到模型上限取决于模型的调参。

对于逻辑回归模型:

# 模型训练
model = LogisticRegression()
# 开始训练,这里可以考虑修改默认的batch_size与epoch来取得更好的效果
model.fit(train_vector, train['label'])

结果输出:提交结果需要符合提交样例结果

# 利用模型对测试集label标签进行预测
test['label'] = model.predict(test_vector)
test['Keywords'] = test['title'].fillna('')
# 生成任务一推测结果
test[['uuid', 'Keywords', 'label']].to_csv('submit_task1.csv', index=None)

在当前目录下会生成 submit_task1.csv

2. 实践项目

任务平台

本次夏令营的代码运行平台是百度的 AI Studio,运行结果提交至讯飞开放平台进行验证评分。

题目要求

机器通过对论文摘要等信息的理解,判断该论文是否属于医学领域的文献。

任务示例

输入:

论文信息,格式如下:

Inflammatory Breast Cancer: What to Know About This Unique, Aggressive Breast Cancer.,

[Arjun Menta, Tamer M Fouad, Anthony Lucci, Huong Le-Petross, Michael C Stauder, Wendy A Woodward, Naoto T Ueno, Bora Lim],

Inflammatory breast cancer (IBC) is a rare form of breast cancer that accounts for only 2% to 4% of all breast cancer cases. Despite its low incidence, IBC contributes to 7% to 10% of breast cancer caused mortality. Despite ongoing international efforts to formulate better diagnosis, treatment, and research, the survival of patients with IBC has not been significantly improved, and there are no therapeutic agents that specifically target IBC to date. The authors present a comprehensive overview that aims to assess the present and new management strategies of IBC.,

Breast changes; Clinical trials; Inflammatory breast cancer; Trimodality care.

输出:

是(1)

赛题数据集

训练集与测试集数据为CSV格式文件,各字段分别是标题、作者、摘要、关键词。

评价指标

本次竞赛的评价标准采用 F1_score,分数越高,效果越好。

模型评估的指标可以按照不同的任务进行分类,主要包括:

分类任务评估指标: 准确率(Accuracy)、精确率(Precision)、召回率(Recall)、PR 曲线、F1 值、ROC

曲线、AUC、对数损失

回归任务评估指标:平均绝对误差(MAE)、均方误差(MSE)、均方根误差(RMSE)、归一化均方根误差(NRMSE)、决定系数(R2)

聚类任务评估指标:纯度、NMI、兰德系数、调整兰德系数

目标检测任务评估指标:IOU

算法工程师面试(十三):评估指标 — 分类、回归任务

3. 实践代码

baseline

# 导入pandas用于读取表格数据
import pandas as pd
# 导入BOW(词袋模型),可以选择将CountVectorizer替换为TfidfVectorizer(TF-IDF(词频-逆文档频率)),注意上下文要同时修改,亲测后者效果更佳
from sklearn.feature_extraction.text import CountVectorizer
# 导入LogisticRegression回归模型
from sklearn.linear_model import LogisticRegression
# 过滤警告消息
from warnings import simplefilter
from sklearn.exceptions import ConvergenceWarning
simplefilter("ignore", category=ConvergenceWarning)
# 读取数据集
train = pd.read_csv('./基于论文摘要的文本分类与关键词抽取挑战赛公开数据/train.csv')
train['title'] = train['title'].fillna('')
train['abstract'] = train['abstract'].fillna('')
test = pd.read_csv('./基于论文摘要的文本分类与关键词抽取挑战赛公开数据/testB.csv')
test['title'] = test['title'].fillna('')
test['abstract'] = test['abstract'].fillna('')
# 提取文本特征,生成训练集与测试集
train['text'] = train['title'].fillna('') + ' ' +  train['author'].fillna('') + ' ' + train['abstract'].fillna('')+ ' ' + train['Keywords'].fillna('')
test['text'] = test['title'].fillna('') + ' ' +  test['author'].fillna('') + ' ' + test['abstract'].fillna('')
vector = CountVectorizer().fit(train['text'])
train_vector = vector.transform(train['text'])
test_vector = vector.transform(test['text'])
# 引入模型
model = LogisticRegression()
# 开始训练,这里可以考虑修改默认的batch_size与epoch来取得更好的效果
model.fit(train_vector, train['label'])
# 利用模型对测试集label标签进行预测
test['label'] = model.predict(test_vector)
test['Keywords'] = test['title'].fillna('')
# 生成任务一推测结果
test[['uuid', 'Keywords', 'label']].to_csv('submit_task1.csv', index=None)

我的代码

我在跑通 baseline 的基础上,尝试用 SVM、 AdaBoost 等方法。

SVM:

# 导入pandas用于读取表格数据
import pandas as pd
# 导入BOW(词袋模型),可以选择将CountVectorizer替换为TfidfVectorizer(TF-IDF(词频-逆文档频率)),注意上下文要同时修改,亲测后者效果更佳
from sklearn.feature_extraction.text import CountVectorizer
# 过滤警告消息
from warnings import simplefilter
from sklearn.exceptions import ConvergenceWarning
simplefilter("ignore", category=ConvergenceWarning)
# 读取数据集
train = pd.read_csv('./data/data231041/train.csv')
train['title'] = train['title'].fillna('')
train['abstract'] = train['abstract'].fillna('')
test = pd.read_csv('./data/data231041/testB.csv')
test['title'] = test['title'].fillna('')
test['abstract'] = test['abstract'].fillna('')
# 读取数据集
train = pd.read_csv('./data/data231041/train.csv')
train['title'] = train['title'].fillna('')
train['abstract'] = train['abstract'].fillna('')
test = pd.read_csv('./data/data231041/testB.csv')
test['title'] = test['title'].fillna('')
test['abstract'] = test['abstract'].fillna('')
# 提取文本特征,生成训练集与测试集
train['text'] = train['title'].fillna('') + ' ' +  train['author'].fillna('') + ' ' + train['abstract'].fillna('')+ ' ' + train['Keywords'].fillna('')
test['text'] = test['title'].fillna('') + ' ' +  test['author'].fillna('') + ' ' + test['abstract'].fillna('')
# 考虑停用词
stops =[i.strip() for i in open(r'stop.txt',encoding='utf-8').readlines()] 
# vector = CountVectorizer().fit(train['text'])
vector = CountVectorizer(stop_words=stops).fit(train['text'])
train_vector = vector.transform(train['text'])
test_vector = vector.transform(test['text'])
# SVM
from sklearn.svm import SVC
model = SVC()
# 开始训练,这里可以考虑修改默认的batch_size与epoch来取得更好的效果
model.fit(train_vector, train['label'])
# 利用模型对测试集label标签进行预测
test['label'] = model.predict(test_vector)
test['Keywords'] = test['title'].fillna('')
test[['uuid','Keywords','label']].to_csv('submit_task_SVM.csv', index=None)

4. 实践成绩

8.14 submit_task1.csv 得分:0.67116

第一次测试是基于逻辑回归模型的,没有考虑停用词;

8.16 submit_task_LR.csv 得分:0.67435

第二次测试也是基于逻辑回归模型的,但考虑了停用词;

8.16 submit_task_SVM.csv 得分:0.6778

第三次测试是基于SVM模型的,考虑了停用词;

8.16 submit_task_AdaBoost.csv 得分:0.76263

第四次测试是基于AdaBoost模型的,考虑了停用词;

8.17 尝试了XGBoost模型、GBDT模型,并且稍微调整了一下AdaBoost参数,但效果不行,得分比baseline低了将近0.01,这里就不展示了。接下来会想办法提升分数。

相关文章
|
8月前
|
人工智能 自然语言处理 数据可视化
AI 助手带你玩转数据分析!通义灵码保姆级教学 | 共学课2期上线
7月15日20:00,通义灵码联合WaytoAGI社区推出《AI助手带你玩转数据分析》公开课。零门槛、零代码,只需中文指令,即可完成数据读取、分析到报告生成全流程。告别代码恐惧,业务人员也能轻松掌握数据分析,提升职场竞争力。
318 0
|
6月前
|
存储 人工智能 数据挖掘
StarRocks Connect 2025 圆满落幕:AI Native 时代,数据分析未来已来
StarRocks Connect 2025 聚焦“连接”,汇聚全球技术领袖,探讨数据分析的现在与未来。从性能引擎到AI Native平台,StarRocks 持续进化,赋能 Shopee、携程、Cisco 等企业实现高效实时分析,并推动开源生态与商业化协同发展。
|
10月前
|
人工智能 自然语言处理 Prometheus
不懂 PromQL,AI 智能体帮你玩转大规模指标数据分析
PromQL AI 智能体上线。本文将从自然语言生成 PromQL 实践视角,探讨如何构建知识库、与大模型进行交互、最终生成符合需求的 PromQL 语句。本文还介绍了在 MCP 和云监控控制台下使用 AI 智能体的用例。
707 51
|
8月前
|
SQL 人工智能 自然语言处理
AI技术究竟怎样让企业数据分析效率和智能化大幅提升?
本文三桥君介绍了AI驱动的自然语言数据分析系统,通过AI Agents调度、大模型(LLM)生成SQL及检索增强(RAG)技术,实现从自然语言指令到可视化结果的全流程自动化。
236 4
|
9月前
|
数据采集 人工智能 数据可视化
如何让AI写出高质量的数据分析报告?DataV-Note的评估体系揭秘
本文围绕DataV-Note智能分析创作平台的评估体系建设展开,旨在探索如何在AI技术快速发展的背景下,构建一套科学、可量化、多维度的数据分析报告评估体系。
436 10
|
机器学习/深度学习 传感器 人工智能
AI与未来医疗:重塑健康管理新格局随着人工智能(AI)技术的飞速发展,医疗行业正迎来一场前所未有的变革。AI不仅在数据分析、诊断支持方面展现出巨大潜力,还在个性化治疗、远程医疗等多个领域实现了突破性进展。本文将探讨AI技术在医疗领域的具体应用及其对未来健康管理的影响。
人工智能(AI)正在彻底改变医疗行业的面貌。通过深度学习算法和大数据分析,AI能够迅速分析海量的医疗数据,提供精准的诊断和治疗建议。此外,AI在远程医疗、药物研发以及患者管理等方面也展现出了巨大的潜力。本文将详细探讨这些技术的应用实例,并展望其对健康管理的深远影响。
1124 28
|
10月前
|
人工智能 自然语言处理 数据挖掘
如何通过AI辅助数据分析
“数据驱动决策"已成为企业战略共识,越来越多的企业将数据分析列入核心投资。随着AI越来越成熟,使用AI辅助数据分析可以显著提升效率、深度和自动化水平。
1199 7
|
12月前
|
机器学习/深度学习 人工智能 数据挖掘
AI概率学预测足球大小球让球数据分析
在足球数据分析中,AI概率学预测主要用于大小球和让球盘口的分析。大小球预测通过历史数据、机器学习和实时数据动态调整进球数;让球分析则利用Elo评分等评估实力差距,结合盘口数据预测比赛结果。数据来源包括历史比赛、球队和球员信息及外部因素。模型选择涵盖回归、分类和时间序列模型,并通过交叉验证、误差分析进行优化。实际应用包括制定投注策略、风险管理及开发自动化系统。代码示例展示了使用随机森林回归模型预测进球数的过程。
|
人工智能 数据可视化 前端开发
Probly:开源 AI Excel表格工具,交互式生成数据分析结果与可视化图表
Probly 是一款结合电子表格功能与 Python 数据分析能力的 AI 工具,支持在浏览器中运行 Python 代码,提供交互式电子表格、数据可视化和智能分析建议,适合需要强大数据分析功能又希望操作简便的用户。
1520 2
|
人工智能 自然语言处理 测试技术
阿里云通义实验室自然语言处理方向负责人黄非:通义灵码2.0,迈入 Agentic AI
在通义灵码 2.0 发布会上,阿里云通义实验室自然语言处理方向负责人黄非分享了代码大模型的演进。过去一年来,随着大模型技术的发展,特别是智能体技术的深入应用,通义灵码也在智能体的基础上研发了针对于整个软件研发流程的不同任务的智能体,这里既包括单智能体,也包括多智能体合并框架,在这样的基础上我们研发了通义灵码2.0。
1003 21

热门文章

最新文章