tensorflow AdaBoost的训练数据应该是什么样的?

jjjwad0x  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(199)

我目前正在使用Tensorflow解决分类问题。我训练了大约120个模型,每个模型给出3类的概率,如:

[0.2, 0.7, 0.1]

并且需要初始化我的AdaBoost分类器。所以我简单地把每个模型的输出,连接起来,然后作为X_train集合传递。在我的y_train集合中,我有一个热编码的输出。它看起来像这样:
X系列(_T):

[[3.19357822e-03 6.72347784e-01 3.24458629e-01 ... 1.10733241e-03
  9.03163731e-01 9.57289338e-02]
 [1.52293205e-01 6.48728848e-01 1.98977932e-01 ... 8.79950225e-01
  1.15971960e-01 4.07785503e-03]
 [7.07598269e-01 2.86189407e-01 6.21227315e-03 ... 4.26333368e-01
  5.70607007e-01 3.05970246e-03]
 ...
 [2.65177800e-06 6.76032901e-01 3.23964417e-01 ... 3.27477939e-02
  5.97387493e-01 3.69864702e-01]
 [7.55840586e-03 6.64247215e-01 3.28194410e-01 ... 6.18536165e-03
  2.70069510e-01 7.23745108e-01]
 [2.90204018e-01 6.98843300e-01 1.09527064e-02 ... 9.26106215e-01
  7.10975081e-02 2.79638381e-03]]

y_训练:

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

我的第一个问题是这个错误:

ValueError: y should be a 1d array, got an array of shape (49005, 3) instead.

它在试图符合我的模型时出现:

ada.fit(X_train, y_train)

我使用以下方法构建:

dt = DecisionTreeClassifier(max_depth=2, random_state=1)
 ada = AdaBoostClassifier(base_estimator=dt, n_estimators=180, random_state=1)

我的输入形状是

(49005, 360)

输出形状为

(49005, 3)

在这一点上,我不知道我的训练集AdaBoost应该看起来像什么。谁能给我一些建议,如何建立我的训练集?

qmelpv7a

qmelpv7a1#

AdaBoostClassifier需要具有类标签的数组,而不是one-hot编码值。
从fit函数的正式文档中:

yarray-like of shape (n_samples,)

    The target values (class labels).

因此,需要将y_train从one-hot编码值转换为标签:

y_train = y_train.argmax(axis=1)

y_train将类似于[0 2 1 1 2 0 0 ...]

相关问题