这是多标签/多输出分类的情况。您有一个数据语料库,其中多个类对于单个样本可能是正确的。此外 - 其中一个类实际上是其他两个类的混合。一个比我们许多人希望的更常见的问题。
注意:我将类 1、2 和 3 分别重命名为类 0、1 和 2;因为这就是sklearn枚举它们的方式。
sklearn'sRandomForest支持开箱即用的多标签分类,因此无需按如下方式组织数据:
X | y
feature1 feature2 | label
--------------------+------
0.1 0.3 | 0
0.2 0.1 | 1
0.7 0.5 | 1
0.8 0.3 | 1
0.6 0.6 | 1 (but also 0 - so probably should be 0 and 1 - class 2?)
0.3 0.9 | 0
0.5 0.5 | 0 (but also 1 - so probably should be both as well- class 2?)
按以下方式组织数据:
X | Y
feature1 feature2 | class0? class1?
--------------------+-----------------
0.1 0.3 | 1 0
0.2 0.1 | 0 1
0.7 0.5 | 0 1
0.8 0.3 | 0 1
0.6 0.6 | 1 1
0.3 0.9 | 1 0
0.5 0.5 | 1 1
换句话说,将你的标签向量变成一个矩阵——即和都将有两个维度。 's将接受它的内部和内部的方法(以及内部)。XYsklearnRandomForestfit()predict()predict_proba()
唯一棘手的可能是predict_proba()多标签/多输出分类中输出的解释,例如(注意拼写错误,我正在从内存中执行此代码):
import numpy as np
from sklearn.ensemble import RandomForestClassifier
X = np.random.random((3, 3))
Y = np.array([[0, 1],
[1, 0],
[1, 1]])
model = RandomForestClassifier()
model.fit(X, Y)
model.predict(X)
np.array([[0., 1.],
[1., 0.],
[1., 1.]])
model.predict_proba(X)
[np.array([[0.6, 0.4],
[0.7, 0.3],
[0.1, 0.9]]),
np.array([[0.9, 0.1],
[1., 0. ],
[0.2, 0.8]])]
总之,predict_proba确实返回了一个包含两个元素的列表:第一个元素是第 0 类独立于第 1 类的概率,而列表中的第二个元素是第 1 类独立于第 0 类的概率。第 0 类和第 1 类的高概率,那么你有一个预测[1, 1]。