Низкая оценка F1 за первые несколько фолдов - PullRequest
0 голосов
/ 08 октября 2019

Я создал модель классификации, используя Случайный лес. Для проверки модели я использую метод K-Fold с 10 разделениями и измеряю производительность модели по f1. когда я выполняю это, у меня очень мало очков f1 для первых нескольких сгибов и очень много очков f1 для остальных сгибов.

Я ожидаю одинаковый диапазон очков в каждом сплите.

код:

from sklearn.ensemble.forest import RandomForestClassifier
from sklearn.model_selection._split import KFold
kf = KFold(n_splits=20,random_state=41) 

f1list = []

for train_index, test_index in kf.split(XX):
    print("Train:", train_index, "Validation:",test_index)
    X_train, X_test = XX[train_index], XX[test_index] 
    Y_train, Y_test = YY[train_index], YY[test_index]
    LR1 = RandomForestClassifier(n_estimators=10,criterion='entropy',random_state=1,max_depth=25,warm_start=True,bootstrap=True, oob_score=True,n_jobs=-1)

    model1 = LR1.fit(X_train,Y_train)
    pred1 = model1.predict(X_test)

    from sklearn.metrics import f1_score

    f1list.append(f1_score(pred1,Y_test))

, а список f1 для 10 сплитов:

[0.3659305993690852, 0.32, 0.3440860215053763, 0.3668639053254438, 0.4183381088825215, 0.9969525468001741, 0.9979652345793849, 0.9984892504357932, 0.9980234856412045, 0.9977904407489243]

1 Ответ

0 голосов
/ 08 октября 2019

Код кажется мне правильным, поэтому проблема может быть в ваших данных. Проблема здесь в том, что результаты сильно зависят от раздела ... вы можете попробовать следующее:

  1. Убедитесь, что у вас достаточно данных для создания 20-кратного резюме ,Возможно, вы могли бы рассмотреть меньшее количество сгибов.
  2. Перемешать данные. Хорошая практика, как объяснено здесь .
  3. Повторите несколько раз резюме. раз. Для того, чтобы иметь одну метрику, вы можете усреднить f1-оценку для каждого сплита, а затем усреднить среднее значение f1 для каждого резюме.

Дайте мне знать, если это работает!

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