本项目开发了一个基于机器学习的禽流感病毒(H5N1)预测系统,旨在通过分析历史数据和实时社交媒体信息,对禽流感疫情进行预测和风险评估。该系统采用决策树算法结合 SMOTE 过采样技术,实现了对不平衡数据的有效处理和高精度预测。
- 数据采集: 自动从社交媒体平台采集疫情相关信息
- 智能预测: 利用机器学习算法预测疫情发展趋势
- 可视化分析: 提供多维度的数据可视化和评估报告
- 实时监测: 支持对最新数据的实时分析和预警
- 采用决策树分类算法,模型准确率达到 99%
- 使用 SMOTE 技术处理数据不平衡问题
- 支持多种评估指标:精确率、召回率、F1 分数等
- 提供直观的数据可视化和分析报告
- 疾控中心疫情监测
- 公共卫生决策支持
- 疫情风险预警系统
- 科研机构数据分析
本项目旨在构建一个基于机器学习的禽流感病毒(H5N1)预测模型,利用历史数据对禽流感的发生情况进行预测。通过对社交媒体上疫情相关信息的采集和分析,结合机器学习算法,实现对禽流感疫情的有效监测和预测。本项目由上饶满星科技有限公司 AI 研究团队开发,包含数据采集、模型训练、预测和可视化等多个环节。
avian_influenza_classification/
|-- data/
| |-- avian_influenza_(HPAI)_dataset.csv # 训练数据集
|-- output/
| |-- 模型评估报告_*.txt # 模型评估报告
| |-- 模型评估指标_*.png # 评估指标可视化图表
| |-- 预测对比折线图_*.png # 实际值与预测值对比折线图
| |-- 预测结果_*.csv # 预测结果
| |-- social_media_data/
| |-- 疫情数据_*.xlsx # 社交媒体采集的疫情数据(Excel格式)
| |-- 疫情数据_*.json # 社交媒体采集的疫情数据(JSON格式)
| |-- plots/
| |-- 混淆矩阵_*.png # 混淆矩阵图
| |-- 类别分布对比_*.png # 类别分布对比图
| |-- 特征重要性_*.png # 特征重要性图
|-- src/
| |-- __init__.py
| |-- classifier.py # 禽流感分类器类实现
|-- get_news.py # 社交媒体疫情数据采集脚本
|-- main.py # 主程序入口
|-- config.json # 配置文件
- data/avianinfluenza(HPAI)_dataset.csv:包含用于训练模型的历史禽流感数据,是模型训练的基础。
- get_news.py:负责从社交媒体(主要是 Twitter)上采集与禽流感疫情相关的信息,并将采集到的数据保存为 Excel 和 JSON 格式。
- src/classifier.py:定义了
AvianInfluenzaClassifier
类,该类实现了数据预处理、模型训练、预测和可视化等功能。采用决策树算法和 SMOTE 过采样技术处理不平衡数据。 - main.py:项目的主程序入口,负责调用
AvianInfluenzaClassifier
类进行模型训练、预测,并生成评估报告和可视化图表。 - config.json:配置文件,可用于设置数据路径、采集推文数量、日志级别等参数。
get_news.py
脚本使用snscrape
库从 Twitter 上采集与指定关键词相关的推文。通过构造查询语句,结合关键词和语言限制,获取符合条件的推文信息,包括推文内容、发布时间、点赞数、转发数等。采集到的数据会保存到output/social_media_data
目录下的 Excel 和 JSON 文件中。
在src/classifier.py
中,preprocess_data
方法对输入的数据进行预处理。对于数据集中的分类变量,使用LabelEncoder
进行编码,将其转换为数值型变量,以便后续的机器学习算法处理。
AvianInfluenzaClassifier
类中的train_model
方法使用决策树算法进行模型训练。首先,将数据集划分为训练集和测试集,采用train_test_split
函数,测试集占比为 20%。由于数据可能存在类别不平衡问题,使用SMOTE
(Synthetic Minority Over - sampling Technique)过采样技术对少数类进行合成样本,以平衡数据集。然后,使用决策树分类器对处理后的训练集进行训练。
决策树是一种基于树结构进行决策的机器学习算法,它通过对特征空间进行递归划分,构建决策规则。对于每个内部节点,根据某个特征的取值进行划分,直到达到叶节点,叶节点表示最终的分类结果。决策树的数学原理基于信息论,常用的划分准则有信息增益、信息增益比和基尼指数等。在本项目中,使用默认的划分准则进行决策树的构建。
在训练完成后,使用测试集对模型进行评估。计算预测准确率、精确率、召回率和 F1 - 分数等评估指标,并生成分类报告。这些指标的计算公式如下:
- 准确率(Accuracy):$Accuracy=\frac{TP + TN}{TP+TN+FP+FN}$ 其中,$TP$(True Positives)表示真正例,即实际为正类且被预测为正类的样本数;$TN$(True Negatives)表示真反例,即实际为反类且被预测为反类的样本数;$FP$(False Positives)表示假正例,即实际为反类但被预测为正类的样本数;$FN$(False Negatives)表示假反例,即实际为正类但被预测为反类的样本数。
- 精确率(Precision):$Precision=\frac{TP}{TP + FP}$ 精确率衡量了模型预测为正类的样本中,实际为正类的比例。
- 召回率(Recall):$Recall=\frac{TP}{TP + FN}$ 召回率衡量了模型能够正确识别出的正类样本的比例。
- F1 - 分数(F1 - Score):$F1=\frac{2\times Precision\times Recall}{Precision + Recall}$ F1 - 分数是精确率和召回率的调和平均值,综合考虑了两者的性能。
使用训练好的模型对新数据进行预测,通过make_predictions
方法实现。同时,项目提供了多种可视化功能,包括绘制混淆矩阵图、类别分布对比图、特征重要性图以及评估指标折线图和实际值与预测值对比折线图等。这些可视化图表有助于直观地理解模型的性能和预测结果。
确保已经安装了以下 Python 库:
pandas
:用于数据处理和分析。numpy
:用于数值计算。scikit - learn
:包含机器学习算法和评估指标。imblearn
:用于处理类别不平衡问题。snscrape
:用于社交媒体数据采集。matplotlib
:用于数据可视化。seaborn
:用于美化可视化图表。
可以使用以下命令安装所需库:
pip install pandas numpy scikit-learn imblearn snscrape matplotlib seaborn
在config.json
文件中设置数据路径、采集推文数量、日志级别等参数。例如:
{
"training_data_path": "./data/avian_influenza_(HPAI)_dataset.csv",
"new_data_path": "output/new_data.csv",
"keywords": ["禽流感", "H5N1", "疫情", "outbreak"],
"num_tweets": 1000,
"lang": "zh",
"logging_level": "INFO"
}
运行get_news.py
脚本进行社交媒体数据采集:
python get_news.py
采集到的数据将保存到output/social_media_data
目录下。
运行main.py
脚本进行模型训练、预测和可视化:
python main.py
脚本将自动完成数据加载、模型训练、评估、预测和可视化等步骤,并将结果保存到output
目录下。
- 数据文件路径:确保
config.json
中设置的数据文件路径正确,否则可能会导致文件读取错误。 - 类别不平衡问题:虽然使用了
SMOTE
过采样技术处理类别不平衡问题,但在某些情况下,可能仍然需要进一步调整模型或采样策略。 - 日志记录:项目使用日志记录程序的执行过程和错误信息,日志文件名为
avian_influenza.log
,可根据需要查看日志文件进行调试和监控。 - 中文字体显示:如果在可视化图表中遇到中文字体显示问题,可根据操作系统不同,修改
main.py
中的字体配置,如在 Windows 系统中使用SimHei
字体,在 macOS 系统中使用WenQuanYi Zen Hei
字体。
本项目通过数据采集、预处理、模型训练、评估和可视化等步骤,实现了一个基于机器学习的禽流感病毒(H5N1)预测模型。利用社交媒体数据和决策树算法,能够对禽流感疫情进行有效的监测和预测。通过可视化图表,可以直观地了解模型的性能和预测结果,为疫情防控提供有力的支持。同时,项目具有良好的可扩展性,可以通过调整配置文件和模型参数,进一步优化模型性能。
在数据预处理阶段,使用LabelEncoder
对分类变量进行编码。从数学角度来看,这是一种将离散的分类值映射到连续整数的操作。假设我们有一个分类变量 LabelEncoder
会为每个取值
在信息论中,这种编码方式有助于减少数据的冗余,使得数据能够以更紧凑的形式存储和处理。例如,对于一个具有
决策树是一种基于树结构进行决策的机器学习算法,其核心在于如何选择最优的划分特征和划分点。常用的划分准则有信息增益、信息增益比和基尼指数。
信息增益是基于信息熵的概念。信息熵是对信息不确定性的度量,对于一个离散随机变量
在决策树中,我们希望通过选择某个特征进行划分,使得划分后的子集的信息熵尽可能降低。假设数据集
对于特征
信息增益
决策树在选择划分特征时,会选择信息增益最大的特征作为当前节点的划分特征。
信息增益存在一个问题,即它倾向于选择取值较多的特征。为了解决这个问题,引入了信息增益比。特征
基尼指数是另一种衡量数据不纯度的指标。对于数据集
对于特征
本项目采用 木兰宽松许可证 (Mulan PSL) 进行许可。
有关详细信息,请参阅 LICENSE 文件。
如果您认为该项目对您有所帮助,并且愿意个人捐赠以支持其持续发展和维护,🥰 我非常感激您的慷慨。 您的捐赠将帮助我继续改进和添加新功能到该项目中。 通过 financial donation,您将有助于确保该项目保持免 费和对所有人开放。即使是一小笔捐款也能产生巨大的影响,也是对我个人的鼓励。