from sklearn import OneClassSVM
check = OneClassSVM(kernel='rbf', gamma='scale')
check.fit(X_train, y_train)
check.predict(X_test)
check.decision_function(X_train)
我目前正在使用oneclasssvm模型。然而,为了与其他机器学习模型相结合,我对此做了一些修改。最初,oneclasssvm模型返回的标签值为-1和1,但我将它们修改为返回0和1 Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. 'precision', 'predicted', average, warn_for
错误。
分类.py
def classification_report(y_true, y_pred, labels=None, target_names=None,
sample_weight=None, digits=2, output_dict=False):
y_type, y_true, y_pred = _check_targets(y_true, y_pred)
labels_given = True
if labels is None:
labels = unique_labels(y_true, y_pred)
labels_given = False
else:
labels = np.asarray(labels)
labels = [0 if i==-1 else i for i in labels]
我不明白为什么会发生错误,因为没有特殊的错误。就我个人而言,我认为标签可能有问题。但是,在oneclass模型中,我确实需要0和1的标签,而不是-1和1的标签。我还检查了错误可能是由于数据集不足造成的,因此我将数据集增加了一倍,但仍然会出现错误。
结果
precision recall f1-score support
A 0.0000 0.0000 0.0000 185698
B 0.0059 0.7211 0.0117 735
accuracy 0.0059 0.0028 0.0038 186433
macro avg 0.0030 0.3605 0.0059 186433
weighted avg 0.0000 0.0028 0.0000 186433
我得到的结果如上所述。
1条答案
按热度按时间7kjnsjlb1#
您的标签似乎有问题。里面有一些标签
y_true
,而这些信息不会出现在中y_pred
因此,它的定义不明确。你应该仔细检查你的
y_true
及y_pred
使用相同的标签。从您的代码片段中,看起来您正在修改labels
数组,而不是y_pred
.