Матрица путаницы и классификационный отчет StraifiedKFold - PullRequest
0 голосов
/ 05 марта 2019

Я использую StratifiedKFold для проверки производительности моего классификатора. У меня есть два класса, и я пытаюсь построить классификатор логистической регрессии. Вот мой код

skf = StratifiedKFold(n_splits=10, shuffle=True, random_state=0)
for train_index, test_index in skf.split(x, y):
    x_train, x_test = x[train_index], x[test_index]
    y_train, y_test = y[train_index], y[test_index]

    tfidf = TfidfVectorizer()
    x_train = tfidf.fit_transform(x_train)
    x_test = tfidf.transform(x_test)

    clf =  LogisticRegression(class_weight='balanced')
    clf.fit(x_train, y_train)
    y_pred = clf.predict(x_test)
    score = accuracy_score(y_test, y_pred)
    r.append(score)
    print(score)

print(np.mean(r))

Я мог бы просто напечатать счет исполнения, но не мог понять, как распечатать матрицу путаницы и отчет о классификации. Если я просто добавлю оператор печати внутри цикла,

print(confusion_matrix(y_test, y_pred))

он напечатает его 10 раз, но я хочу сообщить и матрицу окончательной производительности классификатора.

Любая помощь о том, как для расчета матрицы и отчета. Спасибо

1 Ответ

0 голосов
/ 05 марта 2019

Перекрестная проверка используется для оценки производительности отдельных моделей или гиперпараметров в разных разделах набора данных.В конце концов, у вас нет окончательной производительности как таковой, у вас есть индивидуальная производительность каждого разделения и совокупная производительность по разделениям.Вы можете потенциально использовать tn, fn, fp, tp для каждого из них, чтобы создать агрегированную точность, отзыв, чувствительность и т. Д., Но затем вы можете просто использовать предопределенные функции для этих метрик в sklearn и агрегировать их в конце.

например

skf = StratifiedKFold(n_splits=10, shuffle=True, random_state=0)
accs, precs, recs = [], [], []
for train_index, test_index in skf.split(x, y):
    x_train, x_test = x[train_index], x[test_index]
    y_train, y_test = y[train_index], y[test_index]

    tfidf = TfidfVectorizer()
    x_train = tfidf.fit_transform(x_train)
    x_test = tfidf.transform(x_test)

    clf =  LogisticRegression(class_weight='balanced')
    clf.fit(x_train, y_train)
    y_pred = clf.predict(x_test)
    acc = accuracy_score(y_test, y_pred)
    prec = precision_score(y_test, y_pred)
    rec = recall_score(y_test, y_pred)
    accs.append(acc)
    precs.append(prec)
    recs.append(rec)
    print(f'Accuracy: {acc}, Precision: {prec}, Recall: {rec}')

print(f'Mean Accuracy: {np.mean(accs)}, Mean Precision: {np.mean(precs)}, Mean Recall: {np.mean(recs)}')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...