![c56e158e800afd38a98e9d740e73ac9d.png](https://i-blog.csdnimg.cn/blog_migrate/3ddad90c6cd6826c3486dd9994767269.jpeg)
这篇文章中,使用基于方差和偏差的调参方法,在乳腺癌数据上进行一次随机森林的调参。乳腺癌数据是sklearn自带的分类数据之一。
![39d78a485d4850dd74d2ecbf3b3caeea.png](https://i-blog.csdnimg.cn/blog_migrate/a3f13498faa3cfa19db8148c827160fa.jpeg)
案例中,往往使用真实数据,为什么我们要使用sklearn自带的数据呢?因为真实数据在随机森林下的调参过程,往往非常缓慢。真实数据量大,维度高,在使用随机森林之前需要一系列的处理,因此不太适合用来做直播中的案例演示。原本,我为大家准备了kaggle上下载的辨别手写数字的数据,有4W多条记录700多个左右的特征,随机森林在这个辨别手写数字的数据上有非常好的表现,其调参案例也是非常经典,但是由于数据的维度太高,太过复杂,运行一次完整的网格搜索需要四五个小时,因此不太可能拿来给大家进行演示。经典的泰坦尼克号数据,用来调参的话也是需要很长时间,因此我才选择sklearn当中自带的,结构相对清晰简单的数据来为大家做这个案例。大家感兴趣的话,也可以直接到kaggle上进行下载,数据集名称是Digit Recognizer(https://www.kaggle.com/c/digit-recognizer)。
那我们接下来,就用乳腺癌数据,来看看我们的调参代码。
1. 导入需要的库
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
2. 导入数据集,探索数据
data = load_breast_cancer()
data
data.data.shape
data.target
![aef4c9863ac59da5f82a6a1b761eee20.png](https://i-blog.csdnimg.cn/blog_migrate/0cc7cf0721e74cae8564793c3ca3b980.jpeg)
可以看到,乳腺癌数据集有569条记录,30个特征,单看维度虽然不算太高,但是样本量非常少。过拟合的情况可能存在。
3. 简单建模
进行一次简单的建模,看看模型本身在数据集上的效果
rfc = RandomForestClassifier(n_estimators=100,random_state=90)
score_pre = cross_val_score(rfc,data.data,data.target,cv=10).mean()
score_pre
![1a7d45c9abac360b61268c49a43456d7.png](https://i-blog.csdnimg.cn/blog_migrate/80fc83b8fbd53651f99ae54528303115.png)
这里可以看到,随机森林在乳腺癌数据上的表现本就还不错,在现实数据集上,基本上不可能什么都不调就看到95%以上的准确率。
4. 调参第一步:无论如何先来调n_estimators
在这里我们选择学习曲线,可以使用网格搜索吗?可以,但是只有学习曲线,才能看见趋势 我个人的倾向是,要看见n_esti