当目标是一个热编码时,随机森林预测任一类别

问题描述 投票:0回答:1

我相当清楚树对一个热编码(OHE)目标很敏感,但是我想了解为什么它返回这样的预测:

`array([[0, 0, 0, 0],
       [0, 0, 0, 0],
            .
            .
            .
       [0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 1, 0],
       [0, 0, 0, 0]])`

对于大多数样本,它都不会预测任何类别。我会将我的目标编码为序数(因为它适用),但如果不是的话怎么办?那该怎么办呢?这是 OHE 之前的样子:

array(['4 -8 weeks', '13 - 16 weeks', '17 - 20 weeks', ..., '9 - 12 weeks',
       '13 - 16 weeks'], dtype=object)

提前致谢!

完整代码:


from sklearn.preprocessing import LabelBinarizer
mlb = LabelBinarizer()
b = mlb.fit_transform(Class)
list(mlb.classes_)

# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(data, b, test_size=0.2, random_state=42)

# Create a multi-label classifier
classifier = RandomForestClassifier()

# Train the classifier
classifier.fit(X_train, y_train)

# Make predictions on the test set
y_pred = classifier.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
python scikit-learn classification random-forest one-hot-encoding
1个回答
1
投票

当目标是 one-hot 编码时,sklearn 会将问题视为多标签问题(每一行可以有任意数量的标签)。因此,您可以获得每个标签的预测概率,并且这些概率独立地阈值设置为 0.5,以便进行类别预测。

当目标按顺序编码时,sklearn 会将问题视为多类问题(每一行只有一个类)。尽管有数字排序,sklearn 并不关心(好吧,除了平局)并将类视为无序。预测概率之和为 1,预测类别是概率最大的类别。

您根本不需要对标签进行编码。sklearn 会在内部对它们进行编码以提高计算效率;但将字符串保留为标签是可以的,将被视为多类,并且允许类预测也是字符串(无需解码)。

© www.soinside.com 2019 - 2024. All rights reserved.