尝试使用朴素贝叶斯对 3D 图像进行分类时出错

Posted

技术标签:

【中文标题】尝试使用朴素贝叶斯对 3D 图像进行分类时出错【英文标题】:Error trying to classify 3D images using Naive Bayes 【发布时间】:2020-08-11 05:14:37 【问题描述】:

我已经制作了一个卷积神经网络算法来对图像进行分类,现在我想制作一个朴素贝叶斯算法进行比较。我的图像是 3D 的,我认为这是我遇到错误的原因。

错误:

raise ValueError("bad input shape 0".format(shape))
ValueError: bad input shape (1776, 3)

我的代码:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
import numpy as np

much_data = np.load('muchdata-50-50-30-normalizado.npy', allow_pickle=True)
X = [data[0] for data in much_data]
y = [data[1] for data in much_data]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
gnb = GaussianNB()
y_pred = gnb.fit(X_train, y_train).predict(X_test)
print("Number of mislabeled points out of a total %d points : %d" % (X_test.shape[0], (y_test != y_pred).sum()))

我的 X[0] 格式如下:

  [[[0. 0. 0. ... 0. 0. 0.]
  [0. 0. 0. ... 0. 0. 0.]
  [0. 0. 0. ... 0. 0. 0.]
  ...
  [0. 0. 0. ... 0. 0. 0.]
  [0. 0. 0. ... 0. 0. 0.]
  [0. 0. 0. ... 0. 0. 0.]]
  ...
  [[0. 0. 0. ... 0. 0. 0.]
  [0. 0. 0. ... 0. 0. 0.]
  [0. 0. 0. ... 0. 0. 0.]
  ...
  [0. 0. 0. ... 0. 0. 0.]
  [0. 0. 0. ... 0. 0. 0.]
  [0. 0. 0. ... 0. 0. 0.]]]

还有我的 y[0]:

[0 1 0]

如果有人可以帮助我了解我做错了什么,那将非常有帮助!

非常感谢!

【问题讨论】:

【参考方案1】:

通过查看您的y[0],您似乎有 3 个采用 one-hot 编码格式的类。 sklearn 的机器学习算法通常不接受 one-hot 编码格式的目标值。此外,模型的输入 (X) 应具有(no_samples, no_features) 的形状。因此,您必须将 3D 图像展平。

    去掉目标(y)中的one-hot编码,得到(no_samples,)格式的一维数组。您可以通过将 3 个类定义为 123 来实现此目的。 拼合图像。你可以通过X = [data[0].flatten() for data in much_data] 来做到这一点

【讨论】:

以上是关于尝试使用朴素贝叶斯对 3D 图像进行分类时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 LingPipe 使用朴素贝叶斯对数据进行分类

Python之朴素贝叶斯对展会数据分类

实战|朴素贝叶斯分类对文档进行分类

机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测

机器学习之朴素贝叶斯

当我尝试使用朴素贝叶斯/Python进行预测时出现尺寸不匹配错误