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

LogisticRegression分类结果异常求助:模型输出不符合预期

LogisticRegression分类预测异常问题排查与解决

我尝试用LogisticRegression基于训练数据对测试集样本做分类预测,代码无报错但结果不符合预期。具体情况:

  • 训练数据共375个样本,分4个类别,每个样本3个特征(可绘制3D图),其中类别2占比超50%
  • 初始预测所有测试样本全被分为类别2;随机选125个样本(和测试集规模一致)做训练集,结果还是全为类别2
  • 用各类别样本数量均等的训练集时,预测结果覆盖4个类别,但在线测试准确率仅26%,和随机猜测水平相当
    怀疑是数据处理环节有问题,不确定是否需要对train_X、train_y、test_X做格式转换或预处理,该怎么操作?

附上相关代码:

# forming tables to push through logistic regression
train_X = []
train_y = []
for i in range(len(train_table)):
    train_X.append(
        [train_table.x.iloc[i], train_table.y.iloc[i], train_table.z.iloc[i]]
    )
    train_y.append(train_table.label.iloc[i])

test_X = []
for k in range(len(test_table)):
    test_X.append([test_table.x.iloc[k], test_table.y.iloc[k], test_table.z.iloc[k]])

# Trying with and without normalize
clf = LogisticRegression().fit(normalize(train_X), train_y)
# clf = LogisticRegression().fit(train_X, train_y)

predict = clf.predict(test_X[:])
prob = clf.predict_proba(test_X[:])

results = pd.DataFrame(
    sort_results(test_table, predict, prob),
    columns=["", "timestamp", "UTC time", "label", "accuracy"],
)

问题分析与处理步骤

1. 数据格式与预处理规范

  • 替换手动列表构造:当前用循环生成列表的方式容易出现格式不一致,直接用Pandas内置方法转换为模型适配的NumPy数组:
    train_X = train_table[['x', 'y', 'z']].values
    train_y = train_table['label'].values
    test_X = test_table[['x', 'y', 'z']].values
    
  • 归一化/标准化一致性:训练集和测试集必须用相同的预处理逻辑,不能只处理训练集。推荐用StandardScaler实现:
    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    # 仅在训练集上拟合,避免数据泄露
    train_X_scaled = scaler.fit_transform(train_X)
    test_X_scaled = scaler.transform(test_X)
    

2. 类别不平衡问题处理

  • 调整模型权重:针对类别2占比过高的情况,设置class_weight='balanced'让模型自动给少数类别分配更高权重:
    clf = LogisticRegression(class_weight='balanced').fit(train_X_scaled, train_y)
    
  • 重采样优化:如果权重调整效果不佳,可对少数类别做过采样(如SMOTE算法),或对多数类别做欠采样,平衡训练集类别分布。

3. 多分类模型参数优化

  • 适配多分类场景:LogisticRegression默认适配二分类,处理4分类需明确设置参数:
    clf = LogisticRegression(
        class_weight='balanced',
        multi_class='multinomial',
        solver='lbfgs',
        max_iter=1000  # 增加迭代次数确保收敛
    ).fit(train_X_scaled, train_y)
    
  • 交叉验证验证效果:用交叉验证评估模型泛化能力,避免单一训练集的偏差:
    from sklearn.model_selection import cross_val_score
    scores = cross_val_score(clf, train_X_scaled, train_y, cv=5)
    print("交叉验证准确率均值:", scores.mean())
    

4. 基础数据校验

  • 检查特征列x、y、z是否存在缺失值、异常值,可通过train_table[['x','y','z']].describe()查看统计信息,必要时做填充或过滤;
  • 确认train_y的类别标签格式统一(如整数或字符串),无空值或格式错误。

内容的提问来源于stack exchange,提问作者Jason Padgett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:57:02