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

样本数量不一致问题及朴素贝叶斯分类代码实现咨询

解决朴素贝叶斯实现中的样本数量不一致问题及代码修正

首先,我看到你遇到了样本数量不一致的问题,同时在实现朴素贝叶斯分类时的代码有几个需要调整的地方,咱们一步步来解决:

1. 定位样本数量不一致的根源

看你定义的字典d,'Res'列表最后多了个冗余逗号,不过数下来Pos、Neg、Res都是10个元素,那大概率是你实际使用的数据里列长度不匹配。这种情况下,你需要先确保所有特征列和目标列的元素数量完全一致——可以用len()函数快速检查:

print(len(d['Pos']), len(d['Neg']), len(d['Res']))

输出必须是三个相同的数字,否则要调整数据:删掉多余元素,或者补充缺失的对应元素。

2. 修正朴素贝叶斯的代码实现

你的代码到train_target = tra...就断了,而且train_data的构造方式不符合scikit-learn的要求(模型需要二维特征数组,不是两个一维数组的元组)。下面是完整的修正代码:

首先别忘了导入pandas(你代码里用了pd.DataFrame但没导入):

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score  # 可选,用来评估模型效果

# 定义数据,确保所有列长度严格一致
d = {
    'Pos': [1,2,3,4,5,6,7,8,9,10],
    'Neg': [10,9,8,7,6,5,4,3,2,1],
    'Res': ['win','win','win','win','draw','loss','loss','loss','loss','loss']
}
df = pd.DataFrame(d)

# 拆分训练集和测试集,加random_state固定拆分结果方便复现
train, test = train_test_split(df, test_size=0.2, random_state=42)

# 构造符合要求的特征数据和目标数据
train_data = train[['Pos', 'Neg']].values  # 直接取特征列转成二维数组
train_target = train['Res'].values

test_data = test[['Pos', 'Neg']].values
test_target = test['Res'].values

# 训练模型并预测
model = GaussianNB()
model.fit(train_data, train_target)
predictions = model.predict(test_data)

# 可选:查看预测结果和准确率
print("测试集预测结果:", predictions)
print("测试集准确率:", accuracy_score(test_target, predictions))

关键修正点说明

  • 必须导入pandas,否则pd.DataFrame会直接报错
  • train_data不能用(train.Pos.values, train.Neg.values),这会生成一个包含两个一维数组的元组,模型无法识别。正确做法是直接选取特征列,转成二维数组
  • 加上random_state可以固定训练集和测试集的拆分结果,方便你调试时复现相同的实验结果
  • 用accuracy_score可以快速评估模型的分类效果,这在调试阶段非常实用

如果你的样本数量不一致问题出在读取外部数据的环节,可以检查数据加载代码,确保每行数据都有对应的特征和标签,没有缺失或冗余行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:11:46