一类 svm 分类错误:分类指标无法处理未知目标和二元目标的混合

问题描述

X_train,X_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state = 2020,stratify=y)   

X_train_user = X_train[y_train == 'ji2hwh']
X_train_attacker = X_train[y_train != 'ji2hwh']

outlier_prop = len(X_train_user) / len(X_train_attacker)

svm = OneClassSVM(kernel='rbf',nu=outlier_prop,gamma=0.000001) 
svm.fit(X_train_user)

pred = svm.predict(X_test)

y_test[y_test == 'ji2hwh'] = 1

y_test[y_test != 1] = -1

print(accuracy_score(y_test,pred))

我发现分类指标无法处理上述代码中混合的未知目标和二进制目标错误。 'ji2hwh' 只是一个用户 ID,我将其视为我的一类分类的目标用户,而将其余用户视为攻击者。 x 是一个特征向量,y 包含用户的 ID。我不知道为什么我会收到这个错误,因为变量 pred 返回一个带有 [-1,1] 值的 ndarray 并且 y_test 似乎正确分配了适当的值,也在同一组值 [-1,1] 中。我该怎么做才能克服这个编译错误

整个错误信息:

  File "C:\Users\User\Desktop\MobileUserAuth\data_exploration.py",line 94,in <module>
    print(accuracy_score(y_test,pred))

  File "C:\Users\User\anaconda3\lib\site-packages\sklearn\utils\validation.py",line 72,in inner_f
    return f(**kwargs)

  File "C:\Users\User\anaconda3\lib\site-packages\sklearn\metrics\_classification.py",line 187,in accuracy_score
    y_type,y_true,y_pred = _check_targets(y_true,y_pred)

  File "C:\Users\User\anaconda3\lib\site-packages\sklearn\metrics\_classification.py",line 90,in _check_targets
    raise ValueError("Classification metrics can't handle a mix of {0} "

ValueError: Classification metrics can't handle a mix of unkNown and binary targets

解决方法

我发布了一个解决我几天后发现的问题的解决方案,也许它可以帮助面临同样问题的人,因为我没有。

只需简单类型转换的y_testint,并关于未知目标的错误将被解决。因此调用前的accuracy_score类型:

y_test = y_test.astype('int')

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...