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

Насколько я понимаю, SVM One-Class обучаются без данных цели / метки.

Один ответ на Использование OneClassSVM с GridSearchCV предлагает передавать данные цели / метки в метод подгонки GridSearchCV, когдаклассификатор - OneClassSVM.

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

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

Я пытался следовать исходному коду GridSearchCV , но не смог найти ответ.

1 Ответ

4 голосов
/ 11 октября 2019

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

Да для обеих сторон.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...