随机森林模型在调整后为不同的特征集提供相同的准确性

数据挖掘 Python scikit-学习 随机森林 超参数调整 网格搜索
2022-03-07 15:55:43

我遇到了这个奇怪的问题,似乎找不到解决方案。我正在尝试为每个不同的功能集调整不同的随机森林模型。基本上从给定的数据集,我创建了 3 个不同的特征集。在第一种情况下,您拥有所有功能,在第二种情况下,您的功能数量略少,最后对于第 3 个功能集,您只有 5 个功能。我正在尝试使用 RandomizedSearchCV 调整模型。

param_grid = {'n_estimators' : range(1,100),
'max_depth' : np.linspace(1, 50, 5, endpoint=True),
'min_samples_split' : np.linspace(0.1, 1.0, 10, endpoint=True),
'min_samples_leaf' : np.linspace(0.1, 0.5, 5, endpoint=True),
'max_features' : range(1,X.shape[1]),
"criterion": ["gini","entropy"],}

grid = RandomizedSearchCV(clf_rf, param_distributions = param_grid, cv = 5, scoring = 'roc_auc', verbose=True, n_jobs=-1, random_state=1, return_train_score=False)
grid.fit(X,y)

接下来,我使用 RandomizedSearchCV 找到的最佳模型 grid.best_estimator_ 来寻找交叉验证分数。

estimator_cv = grid.best_estimator_
cv_results = cross_validate(estimator_cv, X, y, cv=10)
cv_accuracy = cv_results['test_score'].mean()
cv_accuracy

我面临的问题是,在对 3 个不同的功能集执行上述步骤后,我得到了相同的交叉验证准确度得分 0.8873372903702229。然而, roc_auc 正在改变。

1个回答

他们的准确性相同但他们的 AUC 分数不同的事实令人鼓舞。首先,最好检查一下各种树所学到的知识。一个很好的方法是按照该链接上的说明进行操作。

我认为所有 3 种算法本质上都知道相同的特征是有用的,并且这些特征存在于每个特征集中。这就是随机森林所做的,考虑到很多特征,它们本质上“决定”哪些特征值得使用。