跳转到内容
GYX / Blog

Python大作业学习指南

这份代码用于学习完整的文本分类流程。它采用字符级 TF-IDF 和逻辑回归。课程如另有必须使用深度学习等要求,请在此基础上调整。

三个 CSV 都从你提供的文件复制到 data 文件夹,原文件保持不变。

文件行数列用途
train_data.csv10000id,text,label学习新闻与标签的关系
test_A_data.csv2000id,text待预测的 A 榜新闻
test_A_submit_example.csv2000id,prob提交格式示例

训练标签 0 表示真新闻,1 表示假新闻,两类各 5000 条。模板中的 prob 全为 0.5,是示例值。输出时用模型对标签 1 的预测概率替换这一列。

检查发现三个文件的字段均无缺失,id 均唯一;原训练集无完全相同的重复文本,训练集和测试集之间没有完全相同的原文本。清理首尾空格后,训练集有 1 条重复记录,两条新闻的标签均为 1。代码在划分验证集前合并这一重复,保留 9999 条训练记录,避免相同内容跨入训练和验证。清理后训练集与测试集还有 1 组相同文本,预测统一使用模型,不针对它手工替换概率。部分原文本包含少量替换字符,第一版保留这些字符,不尝试猜测修复。

  1. 用“文件 → 打开文件夹”打开 news_homework。
  2. 安装微软的 Python 扩展。按 Ctrl+Shift+P,运行 Python: Create Environment,选择 Venv 和已安装的 Python,创建项目虚拟环境。建议使用 Python 3.12 或更高、且依赖支持的版本。
  3. 选择该环境作为 Python 解释器,新建终端,确认终端使用这个环境。
  4. 安装依赖并运行:
Terminal window
python -m pip install -r requirements.txt
python main.py

运行后 outputs/submission_A.csv 是预测文件,只有 id,prob 两列,共 2000 行。outputs/metrics.json 记录本地验证分数、随机种子和库版本。

代码只在本机生成文件。提交到比赛网站时,选择 submission_A.csv,并核对网站显示的提交要求。

已完成一次真实运行并回读检查导出文件的列名、行数、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 允许安装兼容版本,不同版本或不同划分可能带来少量结果差异。这些是本地验证结果,官方测试标签未知,尚无排行榜成绩。

按 main.py 的“第 1 步”到“第 8 步”阅读:

  1. pd.read_csv() 把 CSV 读成 DataFrame,理解 train["text"] 和 train["label"]。
  2. 特征 X 是文本,目标 y 是标签。id 用于对应样本,不输入分类器。
  3. train_test_split() 留出 2000 条带标签的训练新闻作为本地验证集。它与官方 2000 条 A 榜测试新闻是两份不同的数据。
  4. TF-IDF 把字符片段变成数字特征。analyzer="char" 直接处理中文字符,第一版不用分词。
  5. fit() 学习模型。Pipeline 在训练部分上学习 TF-IDF,再训练分类器。
  6. predict_proba() 返回各类别的概率。代码按 classes_ 找到标签 1,避免把“真”的概率当作“假”的概率。
  7. roc_auc_score() 用验证标签和假新闻概率计算 AUC。0.5 阈值仅用于辅助的准确率和 F1,不用于提交概率。
  8. 验证完成后,用全部清理后的 9999 条带标签数据重新训练,预测官方测试集,再按模板导出。

先能自己运行并解释第一版,然后一次改一个参数,记录验证 AUC。可以比较 ngram_range=(1,2) 与 (1,3),或者比较 C=1.0 与 C=4.0。这些是待做的实验,不代表已经验证的提升。

第一版使用固定种子 42 的单次 80%/20% 分层随机划分。本地 AUC 不等于比赛排行榜成绩。反复对同一验证集调参可能过拟合,进一步比较模型时可学习分层交叉验证。相近的改写文本也可能影响随机划分的评估,本次检查只排除了完全相同的文本。

模型根据数据中的文本规律做预测,输出概率不能单独作为事实核查结论。