バスのスケジュールに関するデータセットで分類の目的でいくつかのアルゴリズムを実行しています。具体的には、いくつかのランダムフォレストを実行しており、ソースコードの一部は次のとおりです。
# 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)
ただし、グリッド検索後、精度とリコールはほとんど改善されません。
一般に、過去の他のデータセットでの私の経験では、SkLearnのようなライブラリのデフォルト値と比較して、グリッド検索後のさまざまなメトリックのスコアで5%を超える、またはめったに10%の改善に気づいていません。
分類モデルのパフォーマンスを大幅に向上させるために(機能エンジニアリングの段階の後で)何かを行うことはできますか?
ハイパーパラメータ調整による5%〜10%の増加は、大幅な増加です。GridSearchからの増加よりも大きな増加を期待するべきではありません。
機能エンジニアリング(パフォーマンスの向上の余地が非常に大きい)以外に、次のことを試すことができます。
ランダム検索:定義された範囲内でランダムに選択されたハイパーパラメータ値を検索します。これはhttp://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.htmlである必要があります
別のアルゴリズムの使用:現在、RandomForestを使用しています。これは、予測の分散を減らし、パフォーマンスをわずかに向上させるための非常に効果的な方法です。ただし、Gradient Boostingのような他の方法では、パフォーマンスが向上するはずです。
さまざまなアルゴリズムのアンサンブル:これは非常に幅広いトピックであり、パフォーマンスを向上させるためにモデルを組み合わせるさまざまな方法をカバーしています。https://www.analyticsvidhya.com/blog/2018/06/comprehensive-guide-for-ensemble-models/
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加