Передача данных 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])))
Оба должны дать одинаковые результаты.