机器学习模型是否可以通过将其概率指定为“两者都不”来预测新数据不适合用于训练的任何类别?

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

我在 python 中使用 sklearn.ensemble 中的 RandomForestClassifier 来训练 ML 模型。我有 2 个类/模型(比如 A 和 B)可以生成曲线。在输入中,每行代表一条曲线,每列给出不同 x 值的 y 值。这些值是从 .txt 文件中读取的。

我想训练 ML 模型,以便当我提供新曲线时,它可以预测新曲线属于模型 A、模型 B 或两者都不属于的概率。例如如果我提供一条假曲线(不属于任何模型),我希望它被标记为“两者都不是”或类似的东西。

我面临的问题是,使用 Predict.proba() 的两个类(A 和 B)的概率之和为 1,即随机森林将每条新曲线分配给一个模型,但我无法得到新曲线不属于两者的情况。在上述情况下有没有办法执行此操作?或者是否可以使用随机森林以外的其他东西?

下面是代码的工作示例:

import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier


X_train = pd.read_csv(‘training_dataset.txt')
X_test = pd.read_csv(‘test_dataset.txt')
y_train = pd.read_csv('training_dataset_label.txt')
y_test = pd.read_csv('test_dataset_label.txt')

X_train1 = X_train.values
X_test1 = X_test.values

y_train1 = y_train.values
y_test1 = y_test.values

model = RandomForestClassifier()
model.fit(X_train1, y_train1.ravel())
predictions = model.predict(X_test1)
probabilities = model.predict_proba(X_test1)

这是我得到的输出,其中每一行给出新曲线属于 A 或 B 的概率

A B
0.94 0.06
0.14 0.86
1.00 -
0.41 0.59
0.15 0.85
0.83 0.17
0.77 0.23
0.65 0.35
0.99 0.01

如果新曲线不属于任何一个,我预计 A 和 B 的输出(预测概率)均为 0。

python-3.x machine-learning probability random-forest supervised-learning
1个回答
0
投票

您需要制作一个多类分类器。不确定 SkLearn 是否附带任何好的开箱即用的功能。但它们并不难构建。您只需构建 N 个单类分类器,即可输出属于特定类的样本的估计概率。

在推理时,您在同一个实例上运行所有 N 个模型,然后查看概率估计。您还需要选择一些阈值。如果您的所有分类器都给出了属于其类别的对象的概率估计,那么您将该对象放入类中既不是

与机器学习中的任何事物一样,适合您的案例的最佳模型和最佳阈值取决于数据的性质。如果您的数据属于几个非常紧密的集群,并且有一些异常值位于正常数据之外,那么您将获得非常高的准确性。如果您的数据更加模糊,预计会出现一些误报或误报,具体取决于您设置的阈值有多高。

您可以使用 MLFlow 等工具来微调模型参数

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