SVM_Text-SVM 文本分类
SVMText-SVM 文本分类 的真实实现位于 core/svmtextcalculator.py。该模块的完整流程是:
SVM_Text-SVM 文本分类
1. 方法概述
SVM_Text-SVM 文本分类 的真实实现位于 core/svm_text_calculator.py。该模块的完整流程是:
- 读取文本列与标签列;
- 清洗空文本并构造
clean_text; - 用
CountVectorizer或TfidfVectorizer得到稀疏文本向量; - 调用
LinearSVC或SVC完成监督分类; - 导出预测表、混淆矩阵、分类报告、Top 特征、词表统计和图表。
设数据集为
$$ \mathcal{D}=\{(s_i,y_i)\}_{i=1}^{N} \tag{1} $$
其中 \(s_i\) 为文本,\(y_i\) 为类别标签。该模块只支持监督文本分类,不支持无监督主题发现或回归。
2. 数据清洗与训练/测试划分
2.1 文本清洗
代码会先对文本列和标签列做 fillna(""),再转为字符串,避免缺失值被误写成字面量 "nan"。随后文本执行轻量归一化:
$$ \tilde{s}_i=\mathrm{Clean}(s_i) \tag{2} $$
其中 Clean 的实际逻辑只是把连续空白压缩成单个空格并去掉首尾空白。空文本样本和空标签样本会被直接删除。
2.2 标签与样本约束
在正式训练前,代码还要求:
- 类别数至少为 2;
- 每个类别至少有 2 条样本。
若类别计数为 \(n_c\),则必须满足
$$ |\mathcal{C}|\ge 2,\qquad \min_c n_c \ge 2 \tag{3} $$
否则程序会直接报错,不会进入切分与训练。
2.3 划分方式
训练/测试集通过 train_test_split() 生成:
$$ \mathcal{D}_{\mathrm{train}}\cup \mathcal{D}_{\mathrm{test}}=\mathcal{D}',\qquad |\mathcal{D}_{\mathrm{test}}|\approx r|\mathcal{D}'| \tag{4} $$
其中 \(r=\text{test\_size}\)。真实实现里 _try_split() 还会把测试比例限制在 \([0.1,0.5]\) 区间,并优先尝试 stratify=labels;若分层失败,则自动退回非分层随机切分。
这意味着该模块不是按时间顺序留出,而是典型的随机监督学习评估流程。
3. 文本表示
3.1 Count 与 TF-IDF
模块支持两类文本表示:
vectorizer_type="count"vectorizer_type="tfidf"
词频表示下,文档向量可写为
$$ x_{iv}=c(v,\tilde{s}_i) \tag{5} $$
TF-IDF 表示下,特征可写为
$$ x_{iv}=\mathrm{tf}_{iv}\cdot \log\frac{N}{\mathrm{df}_v} \tag{6} $$
其中 \(\mathrm{df}_v\) 为包含词项 \(v\) 的文档数。
3.2 分词与词表参数
代码暴露的向量化参数包括:
token_modeuse_jiebalowercasengram_minngram_maxmax_featuresmin_dfmax_dfstop_words
当 token_mode="char" 时,向量化器显式设置 analyzer="char";当 token_mode="word" 且 use_jieba=True 时,会加载 jieba.lcut() 作为 tokenizer。若没有安装 jieba,则会直接报错。
其中 n-gram 范围为
$$ \mathrm{ngram\_range}=(n_{\min},n_{\max}) \tag{7} $$
需要注意一个实现约束:代码要求 min_df <= max_df,并明确提示二者最好保持同一种含义,即都作为比例或都作为计数使用。
4. SVM 分类模型
4.1 LinearSVC
当 model_type="LinearSVC" 时,使用线性支持向量机。其典型软间隔目标可写为
$$ \min_{w,b,\xi}\; \frac{1}{2}\lVert w\rVert^2 + C\sum_{i=1}^{N}\xi_i \tag{8} $$
并满足
$$ y_i(w^\top x_i+b)\ge 1-\xi_i,\qquad \xi_i\ge 0 \tag{9} $$
这里 \(C=\text{c}\) 是正则化系数。代码还支持 class_weight="balanced",用于类别不平衡场景。
4.2 SVC
当 model_type="SVC" 时,程序改用核 SVM,并支持:
kernel=linearkernel=rbfkernel=polykernel=sigmoid
核 SVM 的判别函数可写为
$$ f(x)=\sum_{i=1}^{N}\alpha_i y_i K(x_i,x)+b \tag{10} $$
其中 \(K(\cdot,\cdot)\) 由 kernel 决定;gamma、degree、coef0 分别作用于不同核函数配置。代码还把 decision_function_shape 固定为 ovr,即 one-vs-rest 风格的多分类判别。
4.3 预测输出
无论使用 LinearSVC 还是 SVC,最终预测类别都满足
$$ \hat{y}=\arg\max_c f_c(x) \tag{11} $$
对二分类问题,若能获得 predict_proba() 或 decision_function(),程序还会提取一维打分序列 score,写入 预测结果 工作表。这一列在不同模型下含义不同:
- 若来自
predict_proba(),它更接近概率; - 若来自
decision_function(),它是间隔分数而不是概率。
5. 指标、AUC 与特征解释
5.1 分类指标
测试集准确率定义为
$$ \mathrm{Accuracy}=\frac{1}{|\mathcal{D}_{\mathrm{test}}|}\sum_i \mathbf{1}(\hat{y}_i=y_i) \tag{12} $$
代码稳定输出的主要指标包括:
accuracyprecision_weightedrecall_weightedf1_macrof1_weighted
混淆矩阵定义为
$$ \mathrm{CM}_{ab}=\sum_i \mathbf{1}(y_i=a,\hat{y}_i=b) \tag{13} $$
5.2 ROC-AUC / PR-AUC
若是二分类且能得到一维打分 \(g_i\),程序会进一步计算:
$$ \mathrm{ROC\text{-}AUC}=\int_0^1 \mathrm{TPR}(\mathrm{FPR}^{-1}(u))\,du \tag{14} $$
$$ \mathrm{PR\text{-}AUC}=\int_0^1 \mathrm{Precision}(r)\,dr \tag{15} $$
并导出 roc_curve.png 与 pr_curve.png。若是多分类且 y_score_2d 维度正确,则只计算 roc_auc_ovr_macro 与 pr_auc_ovr_macro,通常不会生成二分类式曲线图。
5.3 Top 特征
只有模型存在 coef_ 时,代码才会生成 Top特征。因此:
LinearSVC一般可以输出 Top 特征;SVC只有在线性核且模型暴露coef_时才可能输出;- 非线性核大多无法稳定给出词项权重解释。
特征排序逻辑是根据权重向量做 argsort:
$$ \mathrm{TopTerms}(c)=\operatorname{argsort}_j(w_{cj}) \tag{16} $$
二分类时,程序会分别提取正向和负向特征;多分类时,则为每个类别提取 top-k 高权重词项。
6. 输出结果与导出
6.1 实际工作表
save_to_excel() 的真实导出内容为:
原始数据处理后数据预测结果混淆矩阵分类报告Top特征VocabTFIDF_StatsMetricsParameters向量化信息图表索引
其中:
处理后数据会保留clean_text和split(train/test);预测结果只保存测试集样本,不是全量样本;Vocab会记录词表索引,若使用 TF-IDF 还会追加idf;TFIDF_Stats只在vectorizer_type="tfidf"时存在有效内容。
6.2 实际图表
当前实现可能导出的图表包括:
confusion_matrix.pngroc_curve.pngpr_curve.pngtop_features.png
但并不是每次都会全部出现:
roc_curve/pr_curve需要可计算的一维打分;top_features需要模型存在可解释的coef_。
6.3 复现脚本
结果页提供“导出复现代码”按钮,会生成 repro_svm_text_时间戳.py。脚本会:
- 把原始输入复制到结果目录下的
repro_inputs/ - 固化本次参数快照
- 再次调用
SVMTextCalculator
并把复现 Excel 命名为 SVM_Text_repro_时间戳.xlsx。
7. 实现说明与注意事项
结合真实代码,这个模块可以概括为:一个以 Count/TF-IDF + LinearSVC/SVC 为核心的监督文本分类工具。它支持:
- 词级/字符级特征
- 可选
jieba中文分词 - 线性 SVM 与核 SVM
- 混淆矩阵、分类报告、AUC、PR 和 Top 特征导出
但它也有明确边界:
- 不是深度语义模型;
- 特征仍然是稀疏词项向量;
- 评估基于一次随机切分;
- 非线性核下通常缺乏清晰的词项级可解释性。
因此,这个实现更适合做经典文本分类基线和论文中的 SVM 对照实验,而不是现代预训练语言模型方案。
8. 论文写作模板
可在论文“方法部分”中写为:
“本文采用支持向量机文本分类方法对文本样本进行自动识别。首先,对原始文本进行清洗、切分和向量化表示,构造监督学习所需的文本特征矩阵;其次,利用支持向量机建立类别判别模型,并通过间隔最大化思想学习最优分类边界;随后,在测试样本上输出类别预测、AUC 和分类评价指标;最后,结合预测结果表与特征解释结果,对模型分类性能和关键判别词项进行分析。”
9. 单篇终审补充
9.1 图题与表题对齐建议
原始数据表可写为:表X SVM 文本分类原始数据表。处理后数据表可写为:表X SVM 文本分类处理后数据表。预测结果表可写为:表X SVM 文本分类预测结果表。混淆矩阵表可写为:表X SVM 文本分类混淆矩阵表。分类报告表可写为:表X SVM 文本分类分类报告表。Top特征表可写为:表X SVM 文本分类 Top 特征表。Vocab表可写为:表X SVM 文本分类词表统计表。TFIDF_Stats表可写为:表X SVM 文本分类 TF-IDF 统计表。Metrics表可写为:表X SVM 文本分类模型指标表。Parameters表可写为:表X SVM 文本分类参数设置表。向量化信息表可写为:表X SVM 文本分类向量化信息表。图表索引表可写为:表X SVM 文本分类图表索引与路径清单。confusion_matrix.png建议写为:图X SVM 文本分类混淆矩阵图。top_features.png建议写为:图X SVM 文本分类 Top 特征图。
9.2 终审说明
- 当前代表性结果目录可采用
results/svm_text_manual_run_20260323_191425。其中主工作簿为svm_text_manual.xlsx,复现输出为SVM_Text_repro_20260323_191425.xlsx。 - 当前真实工作表为
原始数据/处理后数据/预测结果/混淆矩阵/分类报告/Top特征/Vocab/TFIDF_Stats/Metrics/Parameters/向量化信息/图表索引。论文表题最好直接贴合这套中文与英文混合的 sheet 名,不要自行改成其他分类器模板。 - 当前稳定实体图文件为
svm_text_manual_plots/confusion_matrix.png与svm_text_manual_plots/top_features.png;复现输出也会在SVM_Text_repro_20260323_191425_plots/下再生成一份同名图片。正文引用时应说明是主运行图还是复现图。 - 真实 repro 脚本为
repro_svm_text_20260323_191425.py,并通过SRC_FILE = 'repro_inputs/sample_data.csv'读取输入副本。附录复现部分应保留这一相对路径和脚本命名。 roc_curve/pr_curve并不是每次都稳定存在,top_features.png也依赖模型具有coef_。因此论文正文若需要引用 ROC、PR 或 Top 特征图,必须以实际结果目录中的实体文件为准,而不是按功能清单默认它一定会生成。
9.3 全量强化补充
- 本轮按真实磁盘再次核对,算法目录为
具体的算法3/NLP基础/SVM_Text-SVM 文本分类,代表性结果目录为具体的算法3/NLP基础/SVM_Text-SVM 文本分类/results/svm_text_manual_run_20260323_191425。 - 该目录不是单工作簿结构,而是主运行与 repro 再生产物并存:主工作簿为
svm_text_manual.xlsx,repro 输出为SVM_Text_repro_20260323_191425.xlsx。两份工作簿的真实工作表一致,均为原始数据、处理后数据、预测结果、混淆矩阵、分类报告、Top特征、Vocab、TFIDF_Stats、Metrics、Parameters、向量化信息、图表索引。 - 当前主图目录为
svm_text_manual_plots/,复现图目录为SVM_Text_repro_20260323_191425_plots/。两套目录中均实际存在confusion_matrix.png、pr_curve.png、roc_curve.png、top_features.png,因此这一次目录可以支撑 ROC/PR 与 Top 特征的联合图证。 - 当前输入副本位于
repro_inputs/sample_data.csv,repro_svm_text_20260323_191425.py中明确写有SRC_FILE = 'repro_inputs/sample_data.csv'。这属于标准repro_inputs/...结构。 - 需要排除干扰目录。
svm_text_tmp是临时目录,svm_text_smoke_*与svm_text_ui_probe_*是测试/探针目录;论文和交付说明应优先使用svm_text_manual_run_20260323_191425这一手动运行目录。 - 这篇在论文里可以比 NaiveBayes_Text 多写一层“线性可解释性 + ROC/PR 图证”,但仍要坚持以当前实体图为准,不能把所有功能清单里的图都默认写进正文。
10. 软件实现核查补充(2026-07)
- 当前实现的主结果目录应写作
具体的算法3/NLP基础/SVM_Text-SVM 文本分类/results/svm_text_manual_run_20260323_191425,主工作簿以svm_text_manual.xlsx为准。 - 正文应围绕
原始数据、处理后数据、预测结果、混淆矩阵、分类报告、Top特征、Vocab、TFIDF_Stats、Metrics、Parameters、向量化信息、图表索引来写。 - 图证应对应主图目录与复现图目录中的
confusion_matrix.png、roc_curve.png、pr_curve.png、top_features.png,并明确主运行与复现输出并存。 repro_svm_text_20260323_191425.py + repro_inputs/sample_data.csv是标准repro_inputs复现口径,附录可直接按这个路径写。