据我了解,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
.参数如 y
在 fit
仅存在这样的元估计器,如 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_score
在 cv_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/