Python 当我有未受污染的训练数据(无异常值)时,使用Scikit learn实现新颖性检测的最佳方法是什么?

Python 当我有未受污染的训练数据(无异常值)时,使用Scikit learn实现新颖性检测的最佳方法是什么?,python,machine-learning,scikit-learn,hyperparameters,anomaly-detection,Python,Machine Learning,Scikit Learn,Hyperparameters,Anomaly Detection,我有一个带标签的数据库,它有一个单独的类“-1”,所有的异常值都在其中 我目前正在使用sklearn的LocalOutlierFactor和OneClassSVM对无离群值的训练数据进行拟合,然后在包含离群值的测试数据上对其进行测试。我的目标是在使用分类模型对它们进行分类之前,检查新的看不见的示例是否是异常值 看来,由于我用于拟合模型的训练数据没有异常值,而且每个类中的示例都非常相似,因此如果我将LocalOutlierFactor的超参数污染设置得尽可能低,我会在测试数据上获得最佳结果(精度和

我有一个带标签的数据库,它有一个单独的类“-1”,所有的异常值都在其中

我目前正在使用sklearn的
LocalOutlierFactor
OneClassSVM
对无离群值的训练数据进行拟合,然后在包含离群值的测试数据上对其进行测试。我的目标是在使用分类模型对它们进行分类之前,检查新的看不见的示例是否是异常值

看来,由于我用于拟合模型的训练数据没有异常值,而且每个类中的示例都非常相似,因此如果我将
LocalOutlierFactor
的超参数
污染
设置得尽可能低,我会在测试数据上获得最佳结果(精度和召回率),类似于
10**-100
。我设置的这个值越高,我的模型在新数据上检测到的错误异常值就越多。 我使用
OneClassSVM
观察到类似的行为。超参数
gamma
nu
必须非常低,以使模型达到最佳效果

根据Scikit学习,训练数据不得被异常值污染,以执行新颖性检测。这在顶部解释


鉴于此,我的问题是我是否遗漏了什么,或者我的方法是否合法。如果训练数据不被污染,我甚至不明白为什么我必须设置
污染
超参数。在我的情况下,它非常干净,
污染
无法设置为0,手动将其设置为如此低的值似乎很奇怪。

如果您已经标记了可用的异常值,为什么没有它们就要进行培训?如果您有足够的标签来创建一个合适的验证集,那么使用交叉验证进行超参数搜索,其中,污染系数是超参数之一。选择性能最佳的模型如果您有可用的标记异常值,为什么要在没有这些异常值的情况下进行培训?如果您有足够的标签来创建一个合适的验证集,则使用交叉验证进行超参数搜索,其中污染因子是超参数之一。选择性能最好的型号