use*_*622 5 svm unsupervised-learning scikit-learn gridsearchcv one-class-classification
据我了解,One-Class SVM在没有目标/标签数据的情况下进行了培训。
将OneClassSVM与GridSearchCV结合使用时的一个答案是,建议在分类器为时将Target / Label数据传递给GridSearchCV的fit方法OneClassSVM。
该GridSearchCV方法如何处理这些数据?
它实际上是否在OneClassSVM没有目标/标签数据的情况下训练,而仅使用目标/标签数据进行评估?
我尝试遵循GridSearchCV源代码,但找不到答案。
它实际上是否在没有目标/标签数据的情况下训练 OneClassSVM,而仅使用目标/标签数据进行评估?
两者皆是。
GridSearchCV实际上确实在调用中将标签发送到 OneClassSVM fit,但 OneClassSVM 只是忽略它。请注意第二个链接中如何将 1 数组发送到主 SVM 训练器而不是给定的标签数组y。y像in这样的参数的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_)
Run Code Online (Sandbox Code Playgroud)
注意 中的所有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])))
Run Code Online (Sandbox Code Playgroud)
两者应该产生完全相同的分数。
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |