python 如何修改 OneClassSVM 中目标变量的标签

How to modify the labels of the target variable in OneClassSVM in python

我知道在 OneClassSVM 中,标签 -1 是异常值,1 是内联的。然后我明白零是边界。有没有办法让标签打印成 2 个,而不是总共 3 个?我想要做的是,像其他模型一样集成 OneClassSVM 标签。例如,我发现其他模型标记为“0”和“1”。但是我用来运行模型的代码不适合OneClassSVM模型,因为它returns“-1”和“1”标签。

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

我尝试过将“-1”更改为“0”,但我确信这不是正确的解决方案。需要在不破坏标签值的情况下,最终只打印出两个标签。

例如,您可以将值从 -1、1 更改为 0,1,以分别表示异常值和内部值样本。这只是为了您的方便。这不会改变现实中的任何东西。

这个转换没有任何问题。但是,您应该注意如何解释结果。

要更改标签:

如果 y_predlistnumpy 数组:

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])

如您所见,在这两种情况下,第一个和最后两个样本分别分配了相同的标签。