from sklearn import OneClassSVMcheck = 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
错误。
classification.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 = Trueif labels is None: labels = unique_labels(y_true, y_pred) labels_given = Falseelse: labels = np.asarray(labels) labels = [0 if i==-1 else i for i in labels]
我不知道为什么会出现这个错误,因为没有特别的错误。个人认为可能与标签有关。然而,我确实需要OneClass模型中的标签为0和1,而不是-1和1。我还检查了是否是因为数据集不足导致的错误,所以我将数据集翻倍,但仍然会出现错误。
result
precision recall f1-score support A 0.0000 0.0000 0.0000 185698 B 0.0059 0.7211 0.0117 735accuracy 0.0059 0.0028 0.0038 186433macro avg 0.0030 0.3605 0.0059 186433weighted avg 0.0000 0.0028 0.0000 186433
我得到的结果如上所示。
回答:
看起来你的标签有问题。在y_true
中有一些标签在y_pred
中没有出现,因此它是未定义的。
你应该仔细检查你的y_true
和y_pred
是否使用了相同的标签。从你的代码片段来看,你似乎是在修改labels
数组,而不是y_pred
。