网格搜索后的微不足道的改进

Insignificant improvement after Grid Search

我正在 运行使用一些算法对有关公交时刻表的数据集进行分类。具体来说,我 运行 一些随机森林和我的部分源代码如下:

# Instantiate random forest
from sklearn.ensemble import RandomForestClassifier
random_forest = RandomForestClassifier()

# K-Fold Cross Validation (for grid search)
inner_cross_validator = StratifiedKFold(n_splits=k_fold, shuffle=True)


from sklearn.model_selection import GridSearchCV

# Define parameters for grid search
number_of_trees = {'n_estimators': [100, 300, 500]}
max_features_per_tree = {'max_features': [0.2, 0.5, 0.8]}
min_samples_split_per_node = {'min_samples_split': [0.2, 0.5, 0.8]}
parameters = {**number_of_trees, **max_features_per_tree, **min_samples_split_per_node}

# Execute grid search and retrieve the best classifier
best_random_forest = GridSearchCV(estimator=random_forest, param_grid=parameters, scoring='average_precision', cv=inner_cross_validator, n_jobs=3)
best_random_forest.fit(X_train, y_train)

但是经过Grid Search后precision和recall几乎没有提升

总的来说,根据我过去对其他数据集的经验,与默认值相比,网格搜索后各种指标的得分没有提高超过 5%,很少有 10% 的提高像 SkLearn 这样的图书馆。

我可以做些什么(在特征工程阶段之后)来显着提高我的分类模型的性能吗?

超参数调整增加 5%-10% 是一个显着的增加。您不应期望比 GridSearch 的增长更大。

除了特征工程(性能提升空间非常大)以外,您可以尝试:

  1. 随机搜索:在定义的范围内搜索随机选择的超参数值。这应该 http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html

  2. 使用不同的算法:您目前正在使用 RandomForest。这是一种非常有效的方法,可以减少预测的方差并略微提高性能。然而,梯度提升等其他方法应该会给你更好的性能。

  3. 不同算法的集成:这是一个非常广泛的主题,涵盖了组合模型以提高性能的许多不同方法。 https://www.analyticsvidhya.com/blog/2018/06/comprehensive-guide-for-ensemble-models/