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

使用sklearn中GaussianNB报错ValueError的解决方法求助

解决GaussianNB训练时"Unknown label type: (array([0, 1, 2], dtype=object),)"错误

这个错误的根源是标签数组的 dtype 为 object,sklearn 的分类模型要求标签为整数类型(或字符串类别),object 类型的数值数组无法被正确识别。你之前修改X_data为.values不解决问题,因为问题出在标签y的类型上。

解决方案

有两种简单的修复方式:

方式一:提前将标签列转换为整数类型

在生成y_labels后,添加类型转换的代码:

#Setup X and y data
df1 = iris[["1_sepal_length", "2_sepal_width",'species']]
X_data = df1.iloc[:,0:2]
y_labels = df1.iloc[:,2].replace({'setosa':0,'versicolor':1,'virginica':2}).copy()
# 新增:将标签转换为整数类型
y_labels = y_labels.astype(int)
#Fit model
model_sk = GaussianNB(priors = None)
model_sk.fit(X_data, y_labels)

方式二:在传入fit时直接转换类型

如果不想修改y_labels本身,也可以在调用fit时临时转换数组类型:

model_sk.fit(X_data, y_labels.values.astype(int))

完整修正代码示例

sns.set()
#Load the data set
iris = sns.load_dataset("iris")
iris = iris.rename(index = str, columns = {'sepal_length':'1_sepal_length','sepal_width':'2_sepal_width', 'petal_length':'3_petal_length', 'petal_width':'4_petal_width'})
#Plot the scatter of sepal length vs sepal width
sns.FacetGrid(iris, hue="species", height=7).map(plt.scatter, "1_sepal_length", "2_sepal_width", ).add_legend()
plt.title('Scatter plot')

#Setup X and y data
df1 = iris[["1_sepal_length", "2_sepal_width",'species']]
X_data = df1.iloc[:,0:2]
y_labels = df1.iloc[:,2].replace({'setosa':0,'versicolor':1,'virginica':2}).copy()
# 转换标签为整数类型
y_labels = y_labels.astype(int)
#Fit model
model_sk = GaussianNB(priors = None)
model_sk.fit(X_data, y_labels)

这样修改后,标签数组的 dtype 会变为int64,符合sklearn分类模型的要求,错误即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:40:14