训练LogisticRegression模型遇单类别数据错误求助
解决逻辑回归训练时单类别数据错误的方案
错误原因
你遇到的ValueError明确说明:训练集y_train里只有类别1,没有类别0。逻辑回归这类二分类模型必须要有至少两个类别的样本才能进行训练,无法从单一类别中学到分类边界。
排查与解决步骤
1. 先确认数据类别分布
先运行以下代码,查看整个数据集以及划分后的训练集、测试集的类别分布:
import numpy as np # 检查整体数据集的类别数量 print("整体y的类别分布:", np.bincount(y)) # 执行划分并检查子集分布 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) print("训练集y的类别分布:", np.bincount(y_train)) print("测试集y的类别分布:", np.bincount(y_test))
2. 根据分布结果处理
情况1:整体y全是1
这说明你收集的所有文献都符合当前的“相关”标准(只要包含任意一个指定关键词就算相关),没有非相关样本。此时分类模型完全没必要训练——直接输出所有文献都属于非洲糖尿病风险因素相关即可。
若你确实需要分类,必须调整样本筛选逻辑:- 提高相关样本的判定门槛,比如要求同时包含多个核心关键词(如
diabetes+Africa):# 修改y的生成逻辑,要求同时包含diabetes和Africa才标记为1 y = [] for article in articles: article_lower = article.lower() relevant = "diabetes" in article_lower and "Africa" in article_lower y.append(int(relevant)) - 补充非相关样本:收集一些不涉及非洲糖尿病主题的文献,加入到
articles中,确保数据集有两个类别。
- 提高相关样本的判定门槛,比如要求同时包含多个核心关键词(如
情况2:整体y有两类,但训练集单类别
这是随机划分时的运气问题,解决方法是使用分层划分,让训练集和测试集的类别比例与原数据集一致:# 加入stratify=y参数,保证分层划分 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)
3. 特殊场景:确实只有单类别
如果业务场景中所有样本都属于同一类别,直接跳过模型训练,输出固定结果即可,无需使用逻辑回归。
内容的提问来源于stack exchange,提问作者Osei-Nyansah Obed
相关产品推荐
相关产品推荐

