少女祈祷中...

随机森林是一种强大的集成学习方法,通过构建多个决策树并取它们的平均值来进行预测。为了获得最佳性能,需要对随机森林模型进行调参。以下是一些常见的参数和调参方法:

常见参数

  1. n_estimators: 决策树的数量。通常,增加树的数量可以提高模型的性能,但也会增加计算成本。
  2. max_depth: 每棵树的最大深度。限制树的深度可以防止过拟合。
  3. min_samples_split: 内部节点再划分所需最小样本数。增加这个值可以防止过拟合。
  4. min_samples_leaf: 叶子节点最少样本数。增加这个值可以防止过拟合。
  5. max_features: 寻找最佳分割时要考虑的特征数量。通常,默认值(“auto"或"sqrt”)效果较好。
  6. bootstrap: 是否进行自助采样。通常设置为True。

调参方法

网格搜索是一种穷举搜索方法,通过遍历给定的参数组合来找到最佳参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestRegressor

# 定义参数网格
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [None, 10, 20, 30],
'min_samples_split': [2, 5, 10],
'min_samples_leaf': [1, 2, 4],
'max_features': ['auto', 'sqrt']
}

# 创建随机森林模型
rf_model = RandomForestRegressor(random_state=42)

# 创建GridSearchCV对象
grid_search = GridSearchCV(estimator=rf_model, param_grid=param_grid,
cv=3, n_jobs=-1, verbose=2, scoring='neg_mean_squared_error')

# 训练模型
grid_search.fit(X_train, y_train)

# 获取最佳参数
best_params = grid_search.best_params_
print(f"Best Parameters: {best_params}")

随机搜索是一种在参数空间中随机采样的方法,适用于参数空间较大的情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint as sp_randint

# 定义参数分布
param_dist = {
'n_estimators': sp_randint(50, 200),
'max_depth': [None, 10, 20, 30],
'min_samples_split': sp_randint(2, 11),
'min_samples_leaf': sp_randint(1, 5),
'max_features': ['auto', 'sqrt']
}

# 创建随机森林模型
rf_model = RandomForestRegressor(random_state=42)

# 创建RandomizedSearchCV对象
random_search = RandomizedSearchCV(estimator=rf_model, param_distributions=param_dist,
n_iter=100, cv=3, n_jobs=-1, verbose=2, scoring='neg_mean_squared_error')

# 训练模型
random_search.fit(X_train, y_train)

# 获取最佳参数
best_params = random_search.best_params_
print(f"Best Parameters: {best_params}")

3. 基于贝叶斯优化的调参

贝叶斯优化是一种更高效的调参方法,通过构建概率模型来选择最有可能改善性能的参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from skopt import BayesSearchCV
from skopt.space import Integer, Categorical

# 定义参数空间
param_space = {
'n_estimators': Integer(50, 200),
'max_depth': Categorical([None, 10, 20, 30]),
'min_samples_split': Integer(2, 11),
'min_samples_leaf': Integer(1, 5),
'max_features': Categorical(['auto', 'sqrt'])
}

# 创建随机森林模型
rf_model = RandomForestRegressor(random_state=42)

# 创建BayesSearchCV对象
bayes_search = BayesSearchCV(estimator=rf_model, search_spaces=param_space,
n_iter=50, cv=3, n_jobs=-1, verbose=2, scoring='neg_mean_squared_error')

# 训练模型
bayes_search.fit(X_train, y_train)

# 获取最佳参数
best_params = bayes_search.best_params_
print(f"Best Parameters: {best_params}")

本文作者:戴诺斯·拉姆 @ 拉姆的小树屋

本文链接:https://sherry14love.github.io/2024/07/15/learn/data6/

本文版权:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

留言