Как установить количество сэмплов при валидации KFold? - PullRequest
0 голосов
/ 07 мая 2020

У меня есть фреймворк из 60 тыс. Записей, помеченных как 0 или 1. Чтобы провести некоторый тест, я хотел бы провести две разные перекрестной проверки: 1-ая с использованием 20 тыс. Записей и вторая с использованием 40 тыс. Записей.

Для этого я использовал параметр n_sample в make_classification:

X, y = make_classification(n_samples=40000)

Однако у меня есть это предупреждение:


UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.

И мой результат:

              precision    recall  f1-score   support

           0       0.50      1.00      0.67     20019
           1       0.00      0.00      0.00     19981

    accuracy                           0.50     40000
   macro avg       0.25      0.50      0.33     40000
weighted avg       0.25      0.50      0.33     40000

Whit 0.00 значение для P, R и F1.

Вот снимок моего кода

X, y = make_classification(n_samples=40000)

start = time()

clf = svm.SVC(kernel='rbf',
              C=3,
              gamma=3,
              )

print("K-Folds scores:")

originalclass = []
predictedclass = []


def classification_report_with_accuracy_score(y_true, y_pred):
    originalclass.extend(y_true)
    predictedclass.extend(y_pred)
    return accuracy_score(y_true, y_pred)  # return accuracy score


inner_cv = StratifiedKFold(n_splits=10)
outer_cv = StratifiedKFold(n_splits=10)


# Nested CV with parameter optimization
nested_score = cross_val_score(clf, X=X, y=y, cv=outer_cv, 
                               scoring=make_scorer(classification_report_with_accuracy_score))

# Average values in classification report for all folds in a K-fold Cross-validation  
print(classification_report(originalclass, predictedclass))
print("10 folds processing seconds: {}".format(time() - start))

Что я делаю не так?

1 Ответ

0 голосов
/ 07 мая 2020

Я решил проблему с помощью resample

from sklearn.utilis import resample

  ...

X, y = resample (X, y, n_samples=40000, replace=False, stratify=y)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...