贝叶斯优化随机森林预测数据代码
时间: 2023-08-11 12:17:46 浏览: 130
以下是使用贝叶斯优化优化随机森林超参数的 Python 代码:
```python
from bayes_opt import BayesianOptimization
from sklearn.ensemble import RandomForestRegressor
# 定义随机森林超参数优化的目标函数
# x 是一个字典,包含树的数量、树的深度和特征选择的方法
def objective_function(n_estimators, max_depth, max_features):
clf = RandomForestRegressor(n_estimators=int(n_estimators), max_depth=int(max_depth), max_features=max_features)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_val)
score = -mean_squared_error(y_val, y_pred) # 因为贝叶斯优化是求最大值,所以将 MSE 取负
return score
# 定义随机森林超参数的搜索范围
pbounds = {'n_estimators': (10, 100),
'max_depth': (5, 20),
'max_features': ['auto', 'sqrt', 'log2']}
# 使用贝叶斯优化优化随机森林超参数
optimizer = BayesianOptimization(f=objective_function, pbounds=pbounds)
optimizer.maximize(n_iter=10)
# 使用最优的超参数训练随机森林模型
best_n_estimators = int(optimizer.max['params']['n_estimators'])
best_max_depth = int(optimizer.max['params']['max_depth'])
best_max_features = optimizer.max['params']['max_features']
clf = RandomForestRegressor(n_estimators=best_n_estimators, max_depth=best_max_depth, max_features=best_max_features)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
test_score = r2_score(y_test, y_pred)
print(f'Test score: {test_score:.4f}')
```
其中 `X_train`, `y_train`, `X_val`, `y_val`, `X_test`, `y_test` 分别表示训练集、验证集和测试集的特征和标签。`BayesianOptimization` 是使用贝叶斯优化的实现代码,可以使用 `pip install bayesian-optimization` 安装。
阅读全文