sklearn.ensemble.RandomForestClassifier 输出不一致
sklearn.ensemble.RandomForestClassifier with non-consistent output
我有一个训练有素的 sklearn randomforest 多标签 classifier,在训练集中,一个 class 总是存在,这意味着你希望 classifier 总是 return 1 个 class。发生这种情况,但是 classifier returns [1] 而不是 [0, 1]。请参阅下面的输出:
[array([[0.05, 0.95]]), array([[0.97, 0.03]]),
array([[0.95, 0.05]]), array([[1., 0.]]), array([[1., 0.]]),
array([[1., 0.]]), array([[0.65, 0.35]]), array([[1.]])]
为什么会这样,我该如何防止这种情况发生?在这个例子中,它只是一个输入的结果,但在我的例子中,我有一个完整的数据帧作为输入,我将其转换为 class 预测。如果其中一个数组只有一个维度,这是不可能的:[1] 而不是像其他 classes.
的预测那样的二维 [0,1]
这可以通过 sklearn 中的设置进行更改吗?
额外说明为什么我的训练集只有正 class 个样本:这是推荐系统的一部分,有时每种类型的客户每次都会购买一种产品。
我使用简单的列表理解检查解决了这个问题,该检查将第二列添加到不一致的输出数组。执行此操作的代码如下,其中 rfc_output 是存在不一致列的随机森林输出。
rfc_output = [np.c_[x, np.zeros(window_size)] if len(x[1])<2 else x for x in rfc_output ]
我有一个训练有素的 sklearn randomforest 多标签 classifier,在训练集中,一个 class 总是存在,这意味着你希望 classifier 总是 return 1 个 class。发生这种情况,但是 classifier returns [1] 而不是 [0, 1]。请参阅下面的输出:
[array([[0.05, 0.95]]), array([[0.97, 0.03]]),
array([[0.95, 0.05]]), array([[1., 0.]]), array([[1., 0.]]),
array([[1., 0.]]), array([[0.65, 0.35]]), array([[1.]])]
为什么会这样,我该如何防止这种情况发生?在这个例子中,它只是一个输入的结果,但在我的例子中,我有一个完整的数据帧作为输入,我将其转换为 class 预测。如果其中一个数组只有一个维度,这是不可能的:[1] 而不是像其他 classes.
的预测那样的二维 [0,1]这可以通过 sklearn 中的设置进行更改吗?
额外说明为什么我的训练集只有正 class 个样本:这是推荐系统的一部分,有时每种类型的客户每次都会购买一种产品。
我使用简单的列表理解检查解决了这个问题,该检查将第二列添加到不一致的输出数组。执行此操作的代码如下,其中 rfc_output 是存在不一致列的随机森林输出。
rfc_output = [np.c_[x, np.zeros(window_size)] if len(x[1])<2 else x for x in rfc_output ]