在使用python机器学习模型时,精度和f分数是定义不清的警告

bqucvtff  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(280)
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

我得到的结果如上所述。

7kjnsjlb

7kjnsjlb1#

您的标签似乎有问题。里面有一些标签 y_true ,而这些信息不会出现在中 y_pred 因此,它的定义不明确。
你应该仔细检查你的 y_truey_pred 使用相同的标签。从您的代码片段中,看起来您正在修改 labels 数组,而不是 y_pred .

相关问题