Как уменьшить количество выбросов в OneClassSVM в sklearn в python? - PullRequest
0 голосов
/ 03 июня 2019

Я использую oneclasssvm следующим образом.

from sklearn.svm import OneClassSVM

clf = OneClassSVM(random_state=42)
clf.fit(X)
y_pred_train = clf.predict(X)

print(len(np.where(y_pred_train == -1)[0]))

Тем не менее, я получаю более 50% своих данных в виде выбросов. Я хотел бы знать, если есть способ уменьшить количество выбросов в одном классе SVM.

Я пытался contamination. Однако, похоже, oneclasssvm не поддерживает заражение.

Есть ли другой подход, который я могу использовать?

Я рад предоставить более подробную информацию, если это необходимо.

Ответы [ 2 ]

2 голосов
/ 03 июня 2019

Вы можете контролировать, сколько точек данных в ваших данных обучения помечаются как выбросы, управляя параметром nu в OneClassSVM.

Из API документов, nu is, An upper bound on the fraction of training errors and a lower bound of the fraction of support vectors. Should be in the interval (0, 1]. By default 0.5 will be taken.

Я полагаю, что у вас есть помеченный набор проверки, а затем настройте гиперпараметры SVM, например nu. kernel и т. Д. Для лучшей производительности на маркированном наборе проверки.

1 голос
/ 03 июня 2019

Мне было бы интересно понять дисперсию, размерность, количество точек выборки, которые вы используете, но мое первое предложение было бы попробовать:

clf = OneClassSVM(random_state=42, gamma='scale')

Из Документов

Текущим значением по умолчанию является 'auto', которое использует 1 / n_features, если передано gamma = 'scale', то оно использует 1 / (n_features * X.var ()) в качестве значения гаммы.Текущее значение гаммы по умолчанию «auto» изменится на «scale» в версии 0.22.'auto_deprecated', устаревшая версия 'auto' используется в качестве значения по умолчанию, указывающего, что не было передано явное значение гаммы.

...