为不同算法重塑机器学习输入数据

reshape machine learning input data for different algorithms

我正在尝试使用一些 NLTK 类型的教程进行 sklearn 学习分类。有人能帮我理解为什么 sklearn MLP neural network 可以处理不同的输入形状而其他分类器不能吗?

我的输入 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) 但不确定在哪里。任何提示在这里都没有太多智慧。

据我所知,标签 y 的格式为 one-hot。基本上标签是一个向量,其大小等于 classes 的数量。该向量的每个元素都是零,除了代表确切 class 的索引处。该元素是 one。这就是为什么 y 的形状是 (62, 15)

您需要将标签 y 转换为您的标签将表示为整数的形式。

示例: 在此示例中,我们有 6 个 classes: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) 来做到这一点,它将 return 沿指定轴具有最大值的元素的索引。看看 documentation