首页 > 解决方案 > 对多标签 predict_proba 的输出进行切片

问题描述

我正在使用 scikit-learn MultiOutputClassifier 并使用以下方法为 7 个不同的类创建多标签输出:

multilabel_model.predict_proba(X_test)

(7, 14545, 2)这给了我一个形状为 0 和为 1 的类的概率的数组:

[array([[9.7169727e-01, 2.8302711e-02],
        [9.9807453e-01, 1.9254771e-03],
        [9.9955606e-01, 4.4392250e-04],
        ...,
        [9.9957782e-01, 4.2216384e-04],
        [9.9833119e-01, 1.6688267e-03],
        [9.9959826e-01, 4.0173010e-04]], dtype=float32),
 array([[9.7968739e-01, 2.0312620e-02],
        [9.9961036e-01, 3.8966016e-04],
        [9.9990100e-01, 9.8974662e-05],
        ...,

现在我正在寻找一种对数组进行切片的方法,以便输出仅包含 7 个可能类中的每一个等于 1 的概率,即输出如下所示:

[[0.3,0.45,0.2,0.1,0.1,0.45,0.2],
[0.1,0.45,0.2,0.3,0.45,0.2,0.1],
...]

有没有办法使用一些切片魔法来实现这一点,或者这是否需要一个复杂的自定义函数?

标签: pythonnumpyscikit-learn

解决方案


要提取1(第二个位置)的概率,请使用:

probas = multilabel_model.predict_proba(X_test)
# probas.shape == (7, 14545, 2)

one_probas = probas[:, :, 1].reshape((probas.shape[1], probas.shape[0]))
# one_probas.shape == (14545, 7)

推荐阅读