因此,我正在学习并尝试实现 GridSearch。我对我写的以下代码有疑问:
from sklearn.metrics import make_scorer
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV
dtc = DecisionTreeClassifier(random_state = 42, max_features = "auto", class_weight = "balanced")
clf = AdaBoostClassifier(base_estimator= dtc, random_state= 42)
parameters = {'base_estimator__criterion': ['gini', 'entropy'],
'base_estimator__splitter': ['best', 'random'],
'base_estimator__max_depth': list(range(1,4)),
'base_estimator__min_samples_leaf': list(range(1,4)),
'n_estimators': list(range(50, 500, 50)),
'learning_rate': list(range(0.5, 10)),
}
scorer = make_scorer(fbeta_score, beta=0.5)
grid_obj = GridSearchCV(clf, parameters, scoring=scorer, n_jobs= -1)
grid_fit = grid_obj.fit(X_train, y_train)
best_clf = grid_fit.best_estimator_
predictions = (clf.fit(X_train, y_train)).predict(X_test)
best_predictions = best_clf.predict(X_test)
因此,我正在学习并尝试实现 GridSearch。我对我写的以下代码有疑问:
from sklearn.metrics import make_scorer
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV
dtc = DecisionTreeClassifier(random_state = 42, max_features = "auto", class_weight = "balanced")
clf = AdaBoostClassifier(base_estimator= dtc, random_state= 42)
parameters = {'base_estimator__criterion': ['gini', 'entropy'],
'base_estimator__splitter': ['best', 'random'],
'base_estimator__max_depth': list(range(1,4)),
'base_estimator__min_samples_leaf': list(range(1,4)),
'n_estimators': list(range(50, 500, 50)),
'learning_rate': list(range(0.5, 10)),
}
scorer = make_scorer(fbeta_score, beta=0.5)
grid_obj = GridSearchCV(clf, parameters, scoring=scorer, n_jobs= -1)
grid_fit = grid_obj.fit(X_train, y_train)
best_clf = grid_fit.best_estimator_
predictions = (clf.fit(X_train, y_train)).predict(X_test)
best_predictions = best_clf.predict(X_test)
这是矫枉过正吗?我的意思是,我有一台不错的 PC,或者至少我认为它还不错,但是这段代码运行了 5 个多小时,而且......它没有!我不得不停止它并为 GridSearch 编写一个参数更少的更简单的版本,以便它运行并提供一些结果。更简单的版本如下:
parameters = {'base_estimator__splitter': ['best'],
'base_estimator__max_depth': [2, 3, 5],
'n_estimators': [100, 250, 500],
'learning_rate': [1.0, 1.5, 2.0],
}
花了20分钟。
我对 GridSearch 了解不多,我认为代码一切都很好,我的意思是它没有错误,所以它没有提供任何结果,因为它没有结束运行......关于时间有什么好的参考吗运行网格搜索的复杂性,特别是在运行 AdaBoost 的参数时?我对此没有直觉,并且在 3 或 4 小时后,我不确定问题是否是我的 PC 不够强大,或者代码将永远运行,因为我确实写错了东西或其他任何东西。但是自从我改变了,一切都很好,所以问题一定是时间。有人告诉我运行 RandomizedSearch,直到昨天我才听说过。它可以是一个解决方案。但这总是 GridSearch 的问题吗?是否有任何代码可以帮助我告诉我算法搜索了多少参数或类似的东西?因为看着屏幕和时钟并意识到已经过去了 5 个小时,我不知道它会运行多长时间,或者即使它有一天会完成......