Передача данных Target/Label в метод подгонки Scikit-learn GridSearchCV для OneClassSVM

Насколько я понимаю, виртуальные машины одного класса обучаются без данных цели / метки.

Один ответ при использовании OneClass SVM с GridSearchCV предлагает передать данные Target/Label методу соответствия GridSearchCV, когда классификатор являетсяOneClassSVM.

Каким образом GridSearchCV метод обработки этих данных?

Это действительно тренирует OneClassSVM без данных Target / label и просто использовать данные Target / label для оценки?

Я пробовал следовать исходному коду GridSearchCV, но не нашел ответа.

1 ответ

Решение

Действительно ли он обучает OneClassSVM без данных Target/label и просто использует данные Target/label для оценки?

Да обоим.

GridSearchCV ли на самом деле отправить этикетки на OneClassSVM вfitвызов, но OneClassSVM просто игнорирует его. Обратите внимание во второй ссылке, как массив единиц отправляется основному тренеру 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])))

Оба должны дать одинаковые результаты.

Другие вопросы по тегам