通过交叉验证获取特定班级的f1分数

时间:2018-05-29 06:47:58

标签: python scikit-learn cross-validation

我有二进制分类问题,第二类的f1 score低。{

我需要两个f1 scores都很好,因为我试图预测一件商品的销售概率。 如果有帮助,我的数据集也是不平衡的。

我认为我的模型正在推广而不是做出正确的预测。

3 个答案:

答案 0 :(得分:0)

尝试使用metrics.classification_report()

Eg) print metrics.classification_report(y_test, y_pred)


            precision    recall    f1-score   support

        0       0.11      0.21      0.14        24
        1       0.18      0.21      0.20        42
        2       0.14      0.15      0.15        39
        3       0.12      0.12      0.12        48
        4       0.19      0.13      0.16        52
        5       0.20      0.04      0.07        23

avg / total     0.16      0.15      0.15       228

答案 1 :(得分:0)

我参加聚会很晚,但是对于从“未来”中找到的人,请尝试以下方法:

from sklearn.metrics import f1_score

y_true = [1, 0, 1, 0, 0]
y_pred = [1, 1, 1, 0, 1]

f1_score(y_true, y_pred, average='binary')

它将返回肯定类的分数(True / 1)。您可以通过如上所述打印出分类报告来确认这一点。

答案 2 :(得分:-1)

1)以下是使用iris的{​​{1}}数据集的完整示例。

train-test spliting

2)以下是使用import numpy as np import matplotlib.pyplot as plt from sklearn import svm, datasets from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report # import data iris = datasets.load_iris() X = iris.data y = iris.target class_names = iris.target_names #keep only 2 classes to make the problem binary X = X[y!=2] y = y[y!=2] # Split the data into a training set and a test set X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) # Fit the classifier using the training data classifier = svm.SVC(kernel='linear', C=0.01) classifier.fit(X_train, y_train) # Predict using the trained classifier and the test data y_pred = classifier.predict(X_test) print(classification_report(y_test, y_pred, target_names=class_names)) precision recall f1-score support setosa 1.00 1.00 1.00 13 versicolor 1.00 1.00 1.00 12 avg / total 1.00 1.00 1.00 25 的{​​{1}}数据集的完整示例。

iris