Я пытался использовать алгоритм Random Forest на Boston наборе данных, чтобы предсказать цены на жилье medv
с помощью sklearn's RandomForestRegressor . Во всех попытках 3 iterations
, как показано ниже
Итерация 1 : Использование модели с гиперпараметрами по умолчанию
#1. import the class/model
from sklearn.ensemble import RandomForestRegressor
#2. Instantiate the estimator
RFReg = RandomForestRegressor(random_state = 1, n_jobs = -1)
#3. Fit the model with data aka model training
RFReg.fit(X_train, y_train)
#4. Predict the response for a new observation
y_pred = RFReg.predict(X_test)
y_pred_train = RFReg.predict(X_train)
Результаты итерации 1
{'RMSE Test': 2.9850839211419435, 'RMSE Train': 1.2291604936401441}
Итерация 2 : я использовал RandomizedSearchCV , чтобы получить оптимальные значения гиперпараметров
from sklearn.ensemble import RandomForestRegressor
RFReg = RandomForestRegressor(n_estimators = 500, random_state = 1, n_jobs = -1)
param_grid = {
'max_features' : ["auto", "sqrt", "log2"],
'min_samples_split' : np.linspace(0.1, 1.0, 10),
'max_depth' : [x for x in range(1,20)]
from sklearn.model_selection import RandomizedSearchCV
CV_rfc = RandomizedSearchCV(estimator=RFReg, param_distributions =param_grid, n_jobs = -1, cv= 10, n_iter = 50)
CV_rfc.fit(X_train, y_train)
Таким образом, я получил best hyperparameters следующим образом
CV_rfc.best_params_
#{'min_samples_split': 0.1, 'max_features': 'auto', 'max_depth': 18}
CV_rfc.best_score_
#0.8021713812777814
Итак, я обучил новую модель с наилучшими гиперпараметрами, как показано ниже
#1. import the class/model
from sklearn.ensemble import RandomForestRegressor
#2. Instantiate the estimator
RFReg = RandomForestRegressor(n_estimators = 500, random_state = 1, n_jobs = -1, min_samples_split = 0.1, max_features = 'auto', max_depth = 18)
#3. Fit the model with data aka model training
RFReg.fit(X_train, y_train)
#4. Predict the response for a new observation
y_pred = RFReg.predict(X_test)
y_pred_train = RFReg.predict(X_train)
Результаты итерации 2
{'RMSE Test': 3.2836794902147926, 'RMSE Train': 2.71230367772569}
Итерация 3 : я использую GridSearchCV , чтобы получить оптимальные значения гиперпараметров
from sklearn.ensemble import RandomForestRegressor
RFReg = RandomForestRegressor(n_estimators = 500, random_state = 1, n_jobs = -1)
param_grid = {
'max_features' : ["auto", "sqrt", "log2"],
'min_samples_split' : np.linspace(0.1, 1.0, 10),
'max_depth' : [x for x in range(1,20)]
}
from sklearn.model_selection import GridSearchCV
CV_rfc = GridSearchCV(estimator=RFReg, param_grid=param_grid, cv= 10, n_jobs = -1)
CV_rfc.fit(X_train, y_train)
Итак, я получил best гиперпараметры следующим образом
CV_rfc.best_params_
#{'max_depth': 12, 'max_features': 'auto', 'min_samples_split': 0.1}
CV_rfc.best_score_
#0.8021820114800677
Результаты итерации 3
{'RMSE Test': 3.283690568225705, 'RMSE Train': 2.712331014201783}
Моя функция для оценки RMSE
def model_evaluate(y_train, y_test, y_pred, y_pred_train):
metrics = {}
#RMSE Test
rmse_test = np.sqrt(mean_squared_error(y_test, y_pred))
#RMSE Train
rmse_train = np.sqrt(mean_squared_error(y_train, y_pred_train))
metrics = {
'RMSE Test': rmse_test,
'RMSE Train': rmse_train}
return metrics
ИтакУ меня были ниже вопросы после 3 итераций
- Почему результаты настроенной модели хуже, чем модель с параметрами по умолчанию, даже когда я использую RandomSearchCV и GridSearchCV.В идеале модель должна давать хорошие результаты при настройке с перекрестной проверкой
- Я знаю, что перекрестная проверка будет иметь место только для комбинации значений, присутствующих в
param_grid
. Могут быть значения, которые хороши но не входит в мой param_grid
.Итак, как мне справиться с такой ситуацией - Как мне решить, какой диапазон значений я должен попробовать для
max_features
, min_samples_split
, max_depth
или, в этом отношении, любогогиперпараметры в модели машинного обучения для повышения ее точности (чтобы я мог хотя бы получить лучшую настроенную модель, чем модель с гиперпараметрами по умолчанию)