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_pred
是 list 或 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])
如您所见,在这两种情况下,第一个和最后两个样本分别分配了相同的标签。
我知道在 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_pred
是 list 或 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])
如您所见,在这两种情况下,第一个和最后两个样本分别分配了相同的标签。