前几场F1得分低

时间:2019-10-08 08:29:10

标签: machine-learning random-forest cross-validation k-fold

我使用随机森林创建了一个分类模型。为了验证模型,我使用K-Fold方法进行10次拆分,并通过f1-score评估模型性能。当我执行此操作时,前几折的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))

并且10次拆分的f1得分列表是

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

1 个答案:

答案 0 :(得分:0)

代码对我来说似乎是正确的,因此问题可能出在您的数据上。这里的问题是结果在很大程度上取决于分区...您可以尝试以下操作:

  1. 检查您是否有足够的数据来制作20倍的简历。也许您可以考虑减少折叠次数。
  2. 随机播放数据。是一种很好的做法,如here所述。
  3. 重复CV几次。对于单一指标,您可以将每个分组的f1-分数取平均值,然后对每个简历的f1-分数取平均值。

让我知道它是否有效!