Как изменить метки целевой переменной в OneClassSVM на python

#python #scikit-learn #sklearn-pandas

Вопрос:

Я знаю в OneClassSVM, что метка -1 является выбросом, а 1 встроена. Тогда я понимаю, что ноль-это граница. Есть ли способ сделать так, чтобы этикетка печаталась в 2, а не в 3 в общей сложности? Что я хочу сделать, так это интегрировать метку OneClassSVM, как и другие модели. Например, я нашел другую модель, помеченную как «0» и «1». Но код, который я использовал для запуска модели, не соответствовал модели OneClassSVM, потому что он возвращает метки «-1» и «1».

 for item in y_pred:
    item.replace("-1","0")
 

Я попытался изменить «-1» на «0», но я уверен, что это неправильное решение. Необходимо, наконец, распечатать только две этикетки, не нарушая значения этикеток.

Ответ №1:

Вы можете изменить значения от -1, 1 до 0,1, например, для представления выборок, которые являются выбросами и выбросами соответственно. Это только для вашего удобства. На самом деле это ничего не изменит.

В этом преобразовании нет ничего плохого. Однако вам следует быть осторожным в интерпретации результатов.

Чтобы изменить метки:

Если y_pred это список или массив numpy:

 y_pred = [-1, 1, -1]

y_pred_new = [0 if i==-1 else 1 for i in y_pred]

print(y_pred_new)
[0, 1, 0]
 

Почему это на самом деле не имеет значения?

 import numpy as np
from sklearn.svm import SVC

X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([1, 1, 2, 2])

clf = SVC(kernel='linear')
clf.fit(X, y)
print(clf.predict(X))
# array([1  1  2  2])
 

измените этикетки и установите их заново

 X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([-1, -1, 1, 1])

clf = SVC(kernel='linear')
clf.fit(X, y)
print(clf.predict(X))
# array([-1 -1  1  1])
 

как вы можете видеть в обоих случаях, первому и последним 2 образцам присвоены одинаковые метки соответственно.

Комментарии:

1. Я знаю, как просто заменить значения в выводимом массиве другими значениями, но мне интересно, могу ли я намеренно изменить значения меток, которые выводятся на -1 и 1 в OneClassSVM.

2. Я обновил свой ответ. Вы можете изменить этикетки для вашего удобства и использовать их в других моделях.

3. Спасибо Тебе! Я использовал другие модели, такие как модель дополнительного дерева или модель дерева решений.