尝试使用朴素贝叶斯对 3D 图像进行分类时出错
Error trying to classify 3D images using Naive Bayes
我做了一个卷积神经网络算法来对图像进行分类,现在我想做一个朴素贝叶斯算法来进行比较。我的图像是 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]
如果有人能帮助我理解我做错了什么,那将非常有帮助!
非常感谢!
通过查看您的 y[0]
,您似乎有 3 类 的单热编码格式。 sklearn
的机器学习算法通常不接受单热编码格式的目标值。此外,模型的输入 (X) 应具有 (no_samples, no_features)
的形状。因此,您必须将 3D 图像展平。
- 去除目标(y)中的one-hot编码,得到
(no_samples,)
格式的一维数组。您可以通过将 3 类 定义为 1
、2
、3
. 来实现此目的
- 拼合图像。您可以使用
X = [data[0].flatten() for data in much_data]
我做了一个卷积神经网络算法来对图像进行分类,现在我想做一个朴素贝叶斯算法来进行比较。我的图像是 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]
如果有人能帮助我理解我做错了什么,那将非常有帮助!
非常感谢!
通过查看您的 y[0]
,您似乎有 3 类 的单热编码格式。 sklearn
的机器学习算法通常不接受单热编码格式的目标值。此外,模型的输入 (X) 应具有 (no_samples, no_features)
的形状。因此,您必须将 3D 图像展平。
- 去除目标(y)中的one-hot编码,得到
(no_samples,)
格式的一维数组。您可以通过将 3 类 定义为1
、2
、3
. 来实现此目的
- 拼合图像。您可以使用
X = [data[0].flatten() for data in much_data]