将 OneClassSVM 与 GridSearchCV 结合使用

Posted

技术标签:

【中文标题】将 OneClassSVM 与 GridSearchCV 结合使用【英文标题】:Use of OneClassSVM with GridSearchCV 【发布时间】:2018-10-03 09:16:20 【问题描述】:

我正在尝试在 OneClassSVM 上执行 GridSearchCV 函数,但我似乎无法为 OCSVM 找到正确的评分方法。从我收集的内容来看,OneClassSVM.score 不存在,因此它没有 GridSearchCV 所需的默认评分功能。不幸的是,文档中的任何评分方法都不起作用,因为它们专用于有监督的 ML,而 OCSVM 是一种无监督的方法。

有没有办法在 OneClassSVM 上执行 GridSearch(或类似的东西,让我用正确的参数调整模型)??

这是我的 GridSearchCV 代码

nus = [0.001, 0.01, 0.1, 1]
gammas = [0.001, 0.01, 0.1, 1]
tuned_parameters = 'kernel' : ['rbf'], 'gamma' : gammas, 'nu': nus
grid_search = GridSearchCV(svm.OneClassSVM(), tuned_parameters, 
scoring="??????????????????????", n_jobs=4)
grid_search.fit(X_train)

是的,我知道 .fit 只需要一个参数,但由于它是无监督的方法,我没有任何 Y 可以放在那里。感谢您的帮助。

【问题讨论】:

你有什么内点和外点的清单(基本事实)吗? 您的意思是表中的列,用于指示某事是否异常?是的,但我不想将它用作 y bc 最后我只想给它一个训练文件并希望它决定参数。不确定是否可能 请看这个:stats.stackexchange.com/q/192530/133411 有人有一个使用 GridSearchCV 和 OneClassSVM 的完整示例的链接吗? 【参考方案1】:

我知道这是一个迟到的回复,但希望它对某人有用。 要调整参数,您需要有正确的标签(离群值/内联值)。 然后,当您有正确的参数时,您可以以无监督的方式使用 OneClassSVM。

所以这种方法的评分函数可以是例如:

f1 精度 召回

检查精度和召回分数的代码:

scores = ['precision', 'recall']
for score in scores:
    clf = GridSearchCV(svm.OneClassSVM(), tuned_parameters, cv=10,
                           scoring='%s_macro' % score, return_train_score=True)

    clf.fit(X_train, y_train)

    resultDf = pd.DataFrame(clf.cv_results_)
    print(resultDf[["mean_test_score", "std_test_score", "params"]].sort_values(by=["mean_test_score"], ascending=False).head())

    print("Best parameters set found on development set:")
    print()
    print(clf.best_params_)

这里是使用 GridSearchCV 的 ElipticEnvelope(另一种异常检测算法)示例用法的链接: https://sdsawtelle.github.io/blog/output/week9-anomaly-andrew-ng-machine-learning-with-python.html

您可以在此处找到使用分类算法的准确率和召回率评分的示例: https://scikit-learn.org/stable/auto_examples/model_selection/plot_grid_search_digits.html

【讨论】:

你能解释一下你的 y_train 是由什么组成的吗?您似乎在暗示它由 +1 和 -1 标签组成。在训练一类 SVM 时不应使用这些。话虽这么说,我不知道打电话是否适合这件事。调用可能会意识到这一点,并且仅使用 +1 标签进行训练,使用 +1 和 -1 标签进行评估/测试。任何澄清将不胜感激。 是的,它包含 1 和 -1。我也可能错了,但我的理解是,如果评分是精确度,召回率或 f1(反映异常值检测的好坏,而不是正确预测了多少数据点)评分 gridsearchcv 将根据此分数评估参数。跨度> 我了解 GridSearchCV 如何使用 +/- 1 真值/标签来评估经过训练的模型。对于评估,这是有道理的。但是,被评估的模型会有所不同,具体取决于它是否使用 +/-1 真值/标签(即监督训练与无监督训练)。因此,我的好奇心是 GridSearchCV 如何处理您传递真实/标签但想要训练无监督系统的事实。我想它在训练期间不使用标签,但是按照我无法通过示例验证的源代码。

以上是关于将 OneClassSVM 与 GridSearchCV 结合使用的主要内容,如果未能解决你的问题,请参考以下文章

将目标/标签数据传递给 Scikit-learn GridSearchCV 的 OneClassSVM 拟合方法

Classifier.fit for oneclassSVM 抱怨浮点类型。 TypeError 浮点数是必需的

用于二进制分类的 OneClassSVM

scikit learn Pipeline中的后处理分类器输出

选择超参数 - 网格搜索

图像的深度学习异常检测