【问题标题】:Use of OneClassSVM with GridSearchCV将 OneClassSVM 与 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 最后我只想给它一个训练文件并希望它决定参数。不确定是否可能
  • 有人有一个使用 GridSearchCV 和 OneClassSVM 的完整示例的链接吗?

标签: python scikit-learn svm grid-search


【解决方案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 如何处理您传递真实/标签但想要训练无监督系统的事实。我想它在训练期间不使用标签,但是按照我无法通过示例验证的源代码。
猜你喜欢
  • 1970-01-01
  • 2017-09-27
  • 2020-01-30
  • 2020-10-01
  • 2020-08-25
  • 2021-10-06
  • 2019-09-17
  • 2019-10-26
  • 2020-10-21
相关资源
最近更新 更多