据我了解,一类SVM在没有目标/标签数据的情况下进行了培训。
Use of OneClassSVM with GridSearchCV的一个答案建议,当分类器为itemsInBackpack
时,将Target / Label数据传递到GridSearchCV的fit方法。
itemsInBackpack = ["book", "computer", "keys", "travel mug"]
方法如何处理此数据?
它是否真的在没有目标/标签数据的情况下训练了OneClassSVM
,而只是使用目标/标签数据进行评估?
我尝试遵循GridSearchCV source code,但找不到答案。
答案 0 :(得分:4)
它真的训练没有目标/标签数据的OneClassSVM,而只是使用目标/标签数据进行评估吗?
是的。
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])))
两个分数都应该完全相同。