为 gridsearchCV 中的每个折叠创建分类报告

问题描述 投票:0回答:1

我对 gridsearchCV 中的评分有疑问。 我有一个随机森林分类器,我正在使用 gridsearchcv 对其参数进行超调。

cross_val = sklearn.model_selection.RepeatedKFold(n_splits = 5, n_repeats = 5, random_state = 0)
grid_search = sklearn.model_selection.GridSearchCV(RandomForestClassifier(),
                           param_grid=param_grid, cv = cross_val, scoring='f1_macro')
grid_search.fit(X, y)

当我运行它时,我可以获得一个数据框,其中包含所有折叠和重复的 f1 分数:

results = grid_search.cv_results_
results = pd.DataFrame(results)

enter image description here

但是,因为我的研究很有趣,所以我想知道每个类的分类精度,就像运行 sklearn.metrics.classification_report 时一样。

enter image description here

我已经尝试过分别运行相同的交叉验证并获得每个折叠的分类报告。然而,准确度与网格搜索交叉验证的评分表中的准确度略有不同,我也没有得到。

for train, test in grid_search.cv.split(X,y):
    
    # Create subsets of data using K-fold cross validation for each iteration   
    X_tr, X_t= X[train], X[test]
    y_tr, y_t = y[train], y[test]

    # Create Random Forest Regressor
    model_grid.fit(X_tr, y_tr)
    y_pred = model_grid.predict(X_t)
    
    #Calculate accuracy
    report_dict = sklearn.metrics.classification_report(y_pred, y_t, output_dict=True)
    report = sklearn.metrics.classification_report(y_t, y_pred)
    print(report)

如果有人能帮助我,我将不胜感激! 提前致谢

scikit-learn random-forest gridsearchcv
1个回答
0
投票

您的

for
循环似乎是实现这一目标的正确方法。
如果通过定义 RandomForestClassifier
:
来修复
random_state

的“随机性”,您应该会得到一致的结果
grid_search = sklearn.model_selection.GridSearchCV(RandomForestClassifier(random_state = 0),
                           param_grid=param_grid, cv = cross_val, scoring='f1_macro')
© www.soinside.com 2019 - 2024. All rights reserved.