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

标签 scikit-learn svm unsupervised-learning gridsearchcv one-class-classification

据我了解,One-Class SVM 是在没有目标/标签数据的情况下进行训练的。

一个答案在 Use of OneClassSVM with GridSearchCV当分类器是 OneClassSVM 时,建议将目标/标签数据传递给 GridSearchCV 的拟合方法。 .
GridSearchCV怎么办方法处理这些数据?

它真的训练OneClassSVM吗?没有目标/标签数据,只使用目标/标签数据进行评估?

我尝试关注 GridSearchCV source code ,但我找不到答案。

最佳答案

Does it actually train the OneClassSVM without the Target/label data, and just use the Target/label data for evaluation?



是的。

GridSearchCV does实际上在 fit 中将标签发送到 OneClassSVM调用,但 OneClassSVM 只是 ignores它。注意在第二个链接中如何将一个数组发送到主 SVM 训练器而不是给定的标签数组 y .参数如 yfit仅存在这样的元估计器,如 GridSearchCV可以以一致的方式工作,而无需担心有监督/无监督的估计器。

为了实际测试这一点,让我们首先使用 GridSearchCV 检测异常值:
X,y = load_iris(return_X_y=True)
yd = np.where(y==0,-1,1)
cv = KFold(n_splits=4,random_state=42,shuffle=True)
model = GridSearchCV(OneClassSVM(),{'gamma':['scale']},cv=cv,iid=False,scoring=make_scorer(f1_score))
model = model.fit(X,yd)
print(model.cv_results_)

注意所有 splitx_test_scorecv_results_ .

现在让我们手动完成,无需发送标签 yd期间fit称呼:
for train,test in cv.split(X,yd):
    clf = OneClassSVM(gamma='scale').fit(X[train])  #Just features
    print(f1_score(yd[test],clf.predict(X[test])))

两者应该产生完全相同的分数。

关于scikit-learn - 将目标/标签数据传递给 Scikit-learn GridSearchCV 的 OneClassSVM 拟合方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58177110/

相关文章:

matlab - 使用 SVM 回归进行预测?

python - 将 HDBSCAN 标签与软聚类结果进行比较

machine-learning - 使用 scikit 选择层次凝聚聚类中的簇数

python - 朴素贝叶斯 scikit learn 警告 "DeprecationWarning: Passing 1d arrays"

numpy - 如何为 sklearn.svm.SVC 定义自定义内核函数?

python - 如何从 Python 中的混淆矩阵中获取精度、召回率和 f-measure

c# - SVM 可以增量学习吗?

python - 增加决策树中节点的大小

python - 为什么带有 SVM 的 AdaBoostClassifier 效果更差

python - 亲和性传播偏好参数