我正在使用一些 NLTK 型别的教程在 sklearn 学习分类中进行试验。有人可以帮我理解为什么sklearn MLP 神经网络可以处理不同的输入形状而其他分类器不能吗?
我的输入training
资料是一个numpy.ndarray
形状(62, 2)
这是我唯一知道如何进行训练测验拆分的事情(如果有更好的建议,任何提示都值得赞赏)
train_x = list(training[:,0])
train_y = list(training[:,1])
如果我,资料看起来像这样print(train_y)
:
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
MLP 分类器似乎作业得很好。
model = MLPClassifier(learning_rate_init=0.0001,max_iter=9000,shuffle=True).fit(train_x, train_y)
但是,如果我尝试使用其他 sklearn 分类器,例如:
model = GaussianNB().fit(train_x, train_y)
我得到错误:
ValueError: y should be a 1d array, got an array of shape (62, 15) instead.
我想我需要.reshape(-1,1)
在我的代码中加入某个地方,但不确定在哪里。任何提示在这里都不是很多智慧。
uj5u.com热心网友回复:
据我所见,标签y
在one-hot
表格中。基本上标签是一个大小等于类数的矢量。该矢量的每个元素都为零,除了代表确切类的索引。那个元素是一个。这就是为什么 y 的形状是(62, 15)
您需要将标签y
转换为您的标签将表示为整数的形式。
示例:在此示例中,我们有 6 个类: ranging from 0 to 5
[0, 0, 0, 1, 0, 0] -> 3
[1, 0, 0, 0, 0, 0] -> 0
[0, 1, 0, 0, 0, 0] -> 1
您可以通过使用numpy.argmax(y, axis=1)
which来执行此操作,它将回传沿指定轴具有最大值的元素的索引。看看档案
0 评论