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

如何使用SKlearn预测单样本值并解决accuracy_score报错

问题根因

触发ValueError: Found input variables with inconsistent numbers of samples: [4, 1]的直接原因,以及实现逻辑不符合需求的点如下:

  • metrics.accuracy_score的作用是统计一整个数据集上预测结果和真实标签匹配的样本占比,要求传入的真实标签序列和预测结果序列长度完全相等。你传入的Ytest是拆分得到的测试集标签,共4个样本(对应报错里的数值4),但y_pred是仅对1个新样本做预测得到的长度为1的结果,两个序列长度不匹配必然报错。而且你要的“单条输入对应的预测匹配百分比”属于单样本预测置信度,根本不是全局准确率,这个函数从用途上就选错了。
  • 模型训练逻辑写反:你通过train_test_split拆分出了训练集X,Y和测试集x_test,y_test,但训练时调用model.fit(Xtext, Ytest)拿测试集做训练,完全违背训练/测试集拆分的初衷,训出来的模型没有任何泛化参考价值。
修正方案

按以下逻辑调整代码即可:

  1. 模型训练必须使用拆分出的训练集数据,测试集仅用于验证模型效果,不能参与训练
  2. 单样本的预测匹配百分比(即模型判定该样本属于预测类别的置信度)需要调用predict_proba方法获取,该方法会返回样本对应每个类别的概率值,取预测类别对应的概率就是你要的匹配百分比
  3. 如果需要计算模型在测试集上的整体准确率,要先对整个测试集做预测,保证预测结果长度和Ytest完全一致后,再调用accuracy_score

修正后的Predict方法代码如下:

def Predict(self,X,Y,Data, Xtest, Ytest):
    model = GaussianNB()
    # 用训练集完成模型训练
    model.fit(X, Y)

    # 计算测试集整体准确率
    y_test_pred = model.predict(Xtest)
    print("测试集整体准确率:", metrics.accuracy_score(Ytest, y_test_pred))

    # 单样本预测,输出预测类别和对应匹配百分比
    single_sample = [[1.0, 2.00613, 2, 5]]
    pred_class = model.predict(single_sample)[0]
    pred_confidence = model.predict_proba(single_sample).max()
    print(f"单样本预测类别:{pred_class},匹配百分比:{round(pred_confidence * 100, 2)}%")

额外注意:如果运行时出现数据类型相关报错,在ProcessData方法的返回语句前,把X、Y转为numpy数组即可,修改为return np.array(X), np.array(Y)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:36:21