You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不同分类器在LIAR数据集上准确率得分一致问题求助

问题原因分析与解决办法

你遇到的不同算法输出完全相同准确率的问题,核心大概率是所有模型都在预测二分类中的多数类别,64.15%刚好是该类别的样本占比。以下是具体排查方向和解决步骤:


一、核心原因排查

1. 类别分布失衡

LIAR数据集转二分类后,极可能存在严重的类别不平衡。先统计转换后两类的样本占比:

print(Y.value_counts(normalize=True))

如果false类的占比恰好约为64.15%,说明所有模型都陷入了「多数类预测」陷阱——无论输入特征如何,模型直接输出占比更高的类别,以此获取基准准确率。这就解释了为什么不同算法、不同数据集划分下结果完全一致。

2. 特征无区分度

若类别分布相对均衡,则需检查特征提取的有效性:

  • TF-IDF:查看特征矩阵的稀疏度,是否大部分特征为0?或特征方差极低,无法区分真假新闻。
  • DistilBERT/Llama 2:是否仅简单提取了<[BOS_never_used_51bce0c785ca2f68081bfa7d91973934]> token的嵌入,未针对二分类任务做下游微调?这类预训练模型若不做任务适配,提取的特征可能缺乏特异性,导致模型无法学习有效区分模式。

3. 代码逻辑问题

检查代码细节:

  • 确认parameters_nb是否为空字典。若是,GridSearchCV不会进行任何调参,直接使用GaussianNB默认参数,而默认参数更容易偏向多数类预测。
  • 查看保存的预测结果CSV,是否所有Predicted_Label都是同一个值(比如全为false),这会直接坐实多数类预测的问题。

二、针对性解决办法

1. 处理类别不平衡

  • 类别权重调整:训练模型时加入类别权重,让模型重视少数类:
    # Logistic Regression
    model_lr = LogisticRegression(class_weight='balanced')
    # XGBoost
    pos_weight = len(Y[Y=='true']) / len(Y[Y=='false'])
    model_xgb = XGBClassifier(scale_pos_weight=pos_weight)
    
  • 重采样:对少数类进行过采样(如SMOTE算法),或对多数类进行欠采样,平衡两类样本数量。
  • 换用评估指标:不要仅依赖准确率,改用F1-score、AUC-ROC等更适合不平衡数据集的指标。

2. 优化特征提取

  • TF-IDF调优:调整参数增强特征区分度:
    from sklearn.feature_extraction.text import TfidfVectorizer
    tfidf = TfidfVectorizer(ngram_range=(1,2), stop_words='english', min_df=5)
    
  • 预训练模型微调:不要仅提取静态嵌入,添加分类头做下游任务微调:
    from transformers import DistilBertForSequenceClassification
    model = DistilBertForSequenceClassification.from_pretrained('distilbert-base-uncased', num_labels=2)
    # 后续执行训练、评估流程
    

3. 修正代码逻辑

  • 给parameters_nb设置合理的调参范围,比如GaussianNB的平滑参数:
    import numpy as np
    parameters_nb = {'var_smoothing': np.logspace(0,-9, num=100)}
    
  • 在GridSearchCV中添加verbose=1,查看调参过程是否正常运行,确认模型在实际拟合不同参数。

内容的提问来源于stack exchange,提问作者lucasa.lisboa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:43:16