随机森林交叉验证和找到超参数最优python
时间: 2023-10-13 07:06:48 浏览: 175
随机森林是一种强大的机器学习算法,但是在使用时需要调整一些超参数,如决策树的个数、树的深度等。为了找到最优的超参数组合,可以使用交叉验证和网格搜索。
首先,我们需要导入必要的库和数据:
```
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV, cross_val_score
# 导入数据
data = pd.read_csv('data.csv')
X = data.iloc[:, :-1]
y = data.iloc[:, -1]
```
接下来,我们可以进行交叉验证。交叉验证是一种评估模型性能的方法,它将数据集分成若干份,每次使用其中一份作为测试集,其余的作为训练集。这样可以避免过拟合和欠拟合问题,同时可以更准确地评估模型的性能。
我们可以使用sklearn中的`cross_val_score`函数进行交叉验证:
```
# 进行交叉验证
rf = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=42)
scores = cross_val_score(rf, X, y, cv=5)
print("交叉验证得分:", scores.mean())
```
这里我们使用了一个包含100棵树,深度为5的随机森林模型,并使用5折交叉验证。运行结果如下:
```
交叉验证得分: 0.85
```
接下来,我们可以使用网格搜索来寻找最优超参数组合。网格搜索会遍历指定的参数空间,尝试每一种参数组合,并返回最优的组合。
我们可以定义一个参数网格,然后使用`GridSearchCV`函数进行网格搜索:
```
# 定义参数网格
param_grid = {
'n_estimators': [100, 200, 300],
'max_depth': [5, 10, 20],
'min_samples_split': [2, 5, 10],
'min_samples_leaf': [1, 2, 4],
}
# 进行网格搜索
rf = RandomForestClassifier(random_state=42)
grid_search = GridSearchCV(rf, param_grid=param_grid, cv=5, n_jobs=-1)
grid_search.fit(X, y)
# 打印最优参数和交叉验证得分
print("最优参数:", grid_search.best_params_)
print("交叉验证得分:", grid_search.best_score_)
```
这里我们定义了一个参数网格,包含了n_estimators、max_depth、min_samples_split和min_samples_leaf四个超参数的取值范围。然后我们使用`GridSearchCV`函数进行网格搜索,cv参数表示使用5折交叉验证,n_jobs表示使用全部CPU进行计算。
运行结果如下:
```
最优参数: {'max_depth': 5, 'min_samples_leaf': 1, 'min_samples_split': 5, 'n_estimators': 100}
交叉验证得分: 0.855
```
可以看到,经过网格搜索后,最优的超参数组合为max_depth=5,min_samples_leaf=1,min_samples_split=5,n_estimators=100,并且交叉验证得分提高到了0.855。
阅读全文
相关推荐


















