python实现随机森林回归建模,10折交叉分析,自动优化参数,重要特征排序
时间: 2023-12-14 11:02:33 浏览: 81
好的,我可以帮你解答这个问题。
首先,我们需要导入相关的库:
```python
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import GridSearchCV, KFold
from sklearn.metrics import mean_squared_error
```
接下来,我们读取数据集,并将其分成特征和目标变量:
```python
data = pd.read_csv('dataset.csv')
X = data.drop('target', axis=1)
y = data['target']
```
然后,我们可以定义一个随机森林回归模型,并使用 GridSearchCV 进行参数优化:
```python
rf = RandomForestRegressor()
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [5, 10, 20, None],
'max_features': ['auto', 'sqrt'],
'min_samples_split': [2, 5, 10],
'min_samples_leaf': [1, 2, 4],
'bootstrap': [True, False]
}
grid = GridSearchCV(rf, param_grid=param_grid, cv=10, n_jobs=-1)
grid.fit(X, y)
```
在这里,我们使用了 10 折交叉验证,并开启了 n_jobs=-1,以便在所有可用的 CPU 上并行运行网格搜索。
接下来,我们可以输出最佳参数和最佳得分:
```python
print("Best parameters: ", grid.best_params_)
print("Best score: ", grid.best_score_)
```
现在,我们可以使用最佳参数来训练模型:
```python
rf = RandomForestRegressor(**grid.best_params_)
kf = KFold(n_splits=10, shuffle=True, random_state=42)
mse_list = []
for train_index, test_index in kf.split(X):
X_train, X_test = X.iloc[train_index], X.iloc[test_index]
y_train, y_test = y.iloc[train_index], y.iloc[test_index]
rf.fit(X_train, y_train)
y_pred = rf.predict(X_test)
mse_list.append(mean_squared_error(y_test, y_pred))
print("10-fold RMSE: ", np.sqrt(np.mean(mse_list)))
```
这里,我们使用了 KFold 进行 10 折交叉验证,并计算了均方根误差(RMSE)的平均值。
最后,我们可以使用 feature_importances_ 属性来获取特征的重要性分数,并将其按降序排列:
```python
importances = pd.Series(rf.feature_importances_, index=X.columns)
importances_sorted = importances.sort_values(ascending=False)
print(importances_sorted)
```
这样,我们就完成了随机森林回归建模、参数优化、交叉分析和特征排序的实现。
阅读全文