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

SGD分类器葡萄酒实验特征维度报错与评估输出重复问题

问题原因分析与解决方案

问题1:predict调用抛出特征维度不匹配错误

根因

模型训练阶段使用了葡萄酒数据集全部13个特征完成拟合,而绘制决策边界时构造的网格输入仅包含2个特征,与模型要求的输入特征维度不一致,触发报错。

修复方案

若需要绘制指定两个特征的决策边界,必须仅使用该组特征训练SGD分类器,不要用全量特征训练。调整训练逻辑:每选择一组特征对后,单独提取该组特征组成训练/测试集,再完成模型拟合,后续预测的输入维度即可匹配。

问题2:交叉验证指标不随特征对变化

根因

循环逻辑未随特征对切换更新输入模型的特征矩阵,始终使用全量特征或首次循环的特征对计算指标;或是指标变量未在每次循环中重置,每次打印的都是首次循环的计算结果。

修复方案

  • 每次循环切换特征对时,重新提取对应两个特征生成新的特征矩阵
  • 每次循环的交叉验证、指标计算逻辑都基于当前循环的特征矩阵完成,不得复用全局特征矩阵或之前循环的指标变量
  • 检查打印逻辑,确认输出的是当前循环生成的指标结果,而非循环外定义的固定值

参考实现代码

from sklearn.datasets import load_wine
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import cross_val_score
import numpy as np

wine = load_wine()
# 待测试的特征对列表
feature_pairs = [[0, 1], [0, 2], [2, 3]]
clf = SGDClassifier(loss="log_loss", random_state=42)

for pair in feature_pairs:
    # 每次循环重新提取当前特征对的数据集
    X = wine.data[:, pair]
    y = wine.target
    # 基于当前特征计算指标
    recall = cross_val_score(clf, X, y, scoring="recall_macro").mean()
    precision = cross_val_score(clf, X, y, scoring="precision_macro").mean()
    f1 = cross_val_score(clf, X, y, scoring="f1_macro").mean()
    print(f"特征对{pair} | 召回率:{recall:.3f} 精确率:{precision:.3f} F1:{f1:.3f}")
    
    # 拟合后生成决策边界
    clf.fit(X, y)
    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
    # 后续绘图逻辑自行补充

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:00:01