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

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

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

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

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

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


person user3731622    schedule 01.10.2019    source источник
comment
Если у вас есть данные метки, то зачем вам обучать OneClassSVM?   -  person MaximeKan    schedule 01.10.2019
comment
Чтобы протестировать OneClassSVM. :) Если я тренируюсь, система с данными поезда и моими тестовыми данными система узнает о тестовых данных. Я создал синтетический тестовый пример, который я хотел бы использовать для оценки того, как поведет себя OneClassSVM, если встретится с данным типом.   -  person user3731622    schedule 01.10.2019
comment
Если цель состоит в том, чтобы протестировать OneClassSVM, вы можете сделать это без GridSearchCV, потому что вы не будете настраивать свой алгоритм. Однако, если у вас также есть метки поездов, то в чем преимущество этого по сравнению с контролируемым классификатором, обучающимся на ваших метках поездов?   -  person MaximeKan    schedule 02.10.2019
comment
Причина использования GridSearchCV состоит в том, чтобы выяснить, насколько хорошо алгоритм может работать на примере гипотетического подкласса синтетического теста. Я могу сделать это, написав свой собственный код, но я бы хотел использовать структуру scikit-learn, если это возможно. Преимущество этого вместо использования контролируемого классификатора заключается в том, что я хочу научить систему узнавать что-то об 1 обычном классе и выполнять обнаружение новинок. Опять же, тестовый пример, который у меня есть, является гипотетическим и не включает все типы данных.   -  person user3731622    schedule 02.10.2019
comment
GridSearchCV предназначен для настройки параметров, чтобы модель лучше всего соответствовала меткам поездов. Если вы просто хотите посмотреть, насколько хорошо алгоритм может работать на примере гипотетического синтетического тестового подкласса, то для этого вам не нужен GridSearchCV. Вы можете просто использовать скорректированную рандомную оценку или какую-либо другую метрику, чтобы оценить это после обучения.   -  person MaximeKan    schedule 03.10.2019
comment
Утверждение GridSearchCV предназначено для настройки параметров таким образом, чтобы модель лучше всего соответствовала меткам поездов, по крайней мере, не всегда верно. Я считаю, но могу ошибаться, что он использует перекрестную проверку, которая вообще не использует данные обучения. Кроме того, GridSearchCV поддерживает неконтролируемое обучение, при котором не используются обучающие метки в процессе обучения. Это описано в документации. для метода подгонки GridSearchCV   -  person user3731622    schedule 04.10.2019
comment
Вы правы, я написал это слишком быстро. Проблема, если вы используете GridSearchCV, заключается в том, что он выберет лучшую модель. Но лучший по сравнению с чем?   -  person MaximeKan    schedule 04.10.2019
comment
Вы спрашиваете о лучшей модели относительно того, что также обсуждается в документации scikit-learn (я думаю) в нескольких местах, включая документация по GridSearchCV. Если вам интересно узнать об этом, я предлагаю вам прочитать ссылку в этом комментарии и внимательно изучить обсуждение перекрестной проверки и оценки.   -  person user3731622    schedule 04.10.2019


Ответы (1)


Действительно ли он обучает 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])))

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

person Shihab Shahriar Khan    schedule 11.10.2019
comment
Отличный ответ! Я чувствую, что это следует привести в качестве примера в документах scikit-learn GridSearchCV и OneClassSVM. - person user3731622; 11.10.2019