我正在使用 sklearn GridSearch 使用預(yù)定義的驗(yàn)證集查找隨機(jī)森林分類的最佳參數(shù)。GridSearch 返回的最佳估計(jì)器的分?jǐn)?shù)與通過(guò)訓(xùn)練具有相同參數(shù)的單獨(dú)分類器獲得的分?jǐn)?shù)不匹配。數(shù)據(jù)拆分定義X = pd.concat([X_train, X_devel])y = pd.concat([y_train, y_devel])test_fold = -X.index.str.contains('train').astype(int)ps = PredefinedSplit(test_fold)GridSearch 定義n_estimators = [10]max_depth = [4]grid = {'n_estimators': n_estimators, 'max_depth': max_depth}rf = RandomForestClassifier(random_state=0)rf_grid = GridSearchCV(estimator = rf, param_grid = grid, cv = ps, scoring='recall_macro')rf_grid.fit(X, y)分類器定義clf = RandomForestClassifier(n_estimators=10, max_depth=4, random_state=0)clf.fit(X_train, y_train)召回率是使用 sklearn.metrics.recall_score 明確計(jì)算的y_pred_train = clf.predict(X_train)y_pred_devel = clf.predict(X_devel)uar_train = recall_score(y_train, y_pred_train, average='macro')uar_devel = recall_score(y_devel, y_pred_devel, average='macro')網(wǎng)格搜索uar train: 0.32189884516029466uar devel: 0.3328299259976279隨機(jī)森林:uar train: 0.483040291148839uar devel: 0.40706644557392435這種不匹配的原因是什么?
2 回答

慕田峪4524236
TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
這里有多個(gè)問(wèn)題:
您的輸入?yún)?shù)
recall_score
被反轉(zhuǎn)。實(shí)際正確的順序是:recall_score(y_true, y_test)
但你正在做:
recall_score(y_pred_train, y_train, average='macro')
更正為:
recall_score(y_train, y_pred_train, average='macro')
你正在做
rf_grid.fit(X, y)
網(wǎng)格搜索。這意味著在找到最佳參數(shù)組合后,GridSearchCV 將擬合整個(gè)數(shù)據(jù)(整個(gè) X,忽略 ,PredefinedSplit
因?yàn)樗鼉H在交叉驗(yàn)證期間用于搜索最佳參數(shù))。所以從本質(zhì)上講,估計(jì)者GridSearchCV
會(huì)看到整個(gè)數(shù)據(jù),所以分?jǐn)?shù)會(huì)與你得到的結(jié)果不同clf.fit(X_train, y_train)

慕村9548890
TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
添加回答
舉報(bào)
0/150
提交
取消