【问题标题】:reshape machine learning input data for different algorithms为不同算法重塑机器学习输入数据
【发布时间】:2022-01-10 13:42:17
【问题描述】:

我正在使用一些 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),但不确定在哪里。任何提示在这里都不是很多智慧。

【问题讨论】:

    标签: python machine-learning scikit-learn classification training-data


    【解决方案1】:

    据我所知,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) 来执行此操作,它将返回沿指定轴具有最大值的元素的索引。看看documentation

    【讨论】:

    • 感谢发布这个答案现在很有意义......
    猜你喜欢
    • 2020-02-21
    • 2020-04-04
    • 2018-08-29
    • 2021-01-18
    • 2015-09-30
    • 2011-08-01
    • 2021-05-09
    • 2018-03-09
    • 2019-05-27
    相关资源
    最近更新 更多