【问题标题】:How to modify the labels of the target variable in OneClassSVM in python如何在python中修改OneClassSVM中目标变量的标签
【发布时间】:2021-09-14 03:45:46
【问题描述】:

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

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

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

【问题讨论】:

    标签: python scikit-learn sklearn-pandas


    【解决方案1】:

    例如,您可以将值从 -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])
    

    正如您在这两种情况下看到的,前两个样本分别被分配了相同的标签。

    【讨论】:

    • 我知道如何简单地将输出数组中的值替换为其他值,但我想知道是否可以故意将 OneClassSVM 中输出的标签值更改为 -1 和 1。
    • 我更新了我的答案。为方便起见,您可以更改标签并将其用于其他模型。
    • 谢谢!我使用了其他模型,例如额外树模型或决策树模型。
    猜你喜欢
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    相关资源
    最近更新 更多