Python大作业学习指南
虚假新闻检测:第一版实验
Section titled “虚假新闻检测:第一版实验”这份代码用于学习完整的文本分类流程。它采用字符级 TF-IDF 和逻辑回归。课程如另有必须使用深度学习等要求,请在此基础上调整。
三个 CSV 都从你提供的文件复制到 data 文件夹,原文件保持不变。
| 文件 | 行数 | 列 | 用途 |
|---|---|---|---|
| train_data.csv | 10000 | id,text,label | 学习新闻与标签的关系 |
| test_A_data.csv | 2000 | id,text | 待预测的 A 榜新闻 |
| test_A_submit_example.csv | 2000 | id,prob | 提交格式示例 |
训练标签 0 表示真新闻,1 表示假新闻,两类各 5000 条。模板中的 prob 全为 0.5,是示例值。输出时用模型对标签 1 的预测概率替换这一列。
检查发现三个文件的字段均无缺失,id 均唯一;原训练集无完全相同的重复文本,训练集和测试集之间没有完全相同的原文本。清理首尾空格后,训练集有 1 条重复记录,两条新闻的标签均为 1。代码在划分验证集前合并这一重复,保留 9999 条训练记录,避免相同内容跨入训练和验证。清理后训练集与测试集还有 1 组相同文本,预测统一使用模型,不针对它手工替换概率。部分原文本包含少量替换字符,第一版保留这些字符,不尝试猜测修复。
在 VS Code 中运行
Section titled “在 VS Code 中运行”- 用“文件 → 打开文件夹”打开 news_homework。
- 安装微软的 Python 扩展。按 Ctrl+Shift+P,运行 Python: Create Environment,选择 Venv 和已安装的 Python,创建项目虚拟环境。建议使用 Python 3.12 或更高、且依赖支持的版本。
- 选择该环境作为 Python 解释器,新建终端,确认终端使用这个环境。
- 安装依赖并运行:
python -m pip install -r requirements.txtpython main.py运行后 outputs/submission_A.csv 是预测文件,只有 id,prob 两列,共 2000 行。outputs/metrics.json 记录本地验证分数、随机种子和库版本。
代码只在本机生成文件。提交到比赛网站时,选择 submission_A.csv,并核对网站显示的提交要求。
本次运行结果
Section titled “本次运行结果”已完成一次真实运行并回读检查导出文件的列名、行数、id 顺序和概率。清理后 9999 条训练新闻划分为 7999 条本地训练与 2000 条本地验证。
| 本地验证指标 | 结果 |
|---|---|
| AUC(主指标) | 0.899901 |
| 准确率(概率阈值 0.5) | 0.8135 |
| 假新闻 F1(概率阈值 0.5) | 0.816708 |
运行环境:Python 3.12,pandas 3.0.1,NumPy 2.3.5,scikit-learn 1.9.1。requirements.txt 允许安装兼容版本,不同版本或不同划分可能带来少量结果差异。这些是本地验证结果,官方测试标签未知,尚无排行榜成绩。
怎样理解代码
Section titled “怎样理解代码”按 main.py 的“第 1 步”到“第 8 步”阅读:
pd.read_csv()把 CSV 读成 DataFrame,理解train["text"]和train["label"]。- 特征 X 是文本,目标 y 是标签。id 用于对应样本,不输入分类器。
train_test_split()留出 2000 条带标签的训练新闻作为本地验证集。它与官方 2000 条 A 榜测试新闻是两份不同的数据。- TF-IDF 把字符片段变成数字特征。
analyzer="char"直接处理中文字符,第一版不用分词。 fit()学习模型。Pipeline在训练部分上学习 TF-IDF,再训练分类器。predict_proba()返回各类别的概率。代码按classes_找到标签 1,避免把“真”的概率当作“假”的概率。roc_auc_score()用验证标签和假新闻概率计算 AUC。0.5 阈值仅用于辅助的准确率和 F1,不用于提交概率。- 验证完成后,用全部清理后的 9999 条带标签数据重新训练,预测官方测试集,再按模板导出。
先能自己运行并解释第一版,然后一次改一个参数,记录验证 AUC。可以比较 ngram_range=(1,2) 与 (1,3),或者比较 C=1.0 与 C=4.0。这些是待做的实验,不代表已经验证的提升。
第一版使用固定种子 42 的单次 80%/20% 分层随机划分。本地 AUC 不等于比赛排行榜成绩。反复对同一验证集调参可能过拟合,进一步比较模型时可学习分层交叉验证。相近的改写文本也可能影响随机划分的评估,本次检查只排除了完全相同的文本。
模型根据数据中的文本规律做预测,输出概率不能单独作为事实核查结论。
- 比赛说明:https://challenge.datacastle.cn/v3/cmptDetail.html?id=1211
- TF-IDF:https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html
- 逻辑回归:https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html
- AUC:https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html
- 避免数据泄漏:https://scikit-learn.org/stable/common_pitfalls.html