验证集的作用和在sklearn中的实现

在机器学习中,数据一般分为训练集,验证集和测试集。

训练集用于训练模型参数,测试集用于估计模型对样本的泛化误差,验证集用于“训练”模型的超参数。

一个机器学习模型通常包括两个部分的参数:模型参数和超参数。其中超参数是用于控制模型行为的参数,这些参数不是通过模型本身学习而来的。想要获得超参数,并不能直接使用训练集进行,因为如果使用训练集来选择超参数,那么超参数总是会往增加模型容量的方向发展,容易出现过拟合,那么我们就需要单独取出一部分数据进行超参数的确定,而这一部分就是验证集。
参考文章:https://blog.csdn.net/jmh1996/article/details/79838917?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare

由于我在学习机器学习,所以使用sklearn中的神器:GridSearcherCV()
它使用交叉验证的方式,对某一分类器,你制定想要调参的名称和数值,作为一个字典传入进这个函数,然后它就会告诉你最佳的参数组合.(其实就是for for for都试试).

from sklearn.model_selection import GridSearchCV


def grid(clf, x_prove, y_prove):
    tuned_parameter = [{'max_features': [2, 'auto', 'log2'], 'n_estimators': [100, 200, 1000]}]
    rfc = GridSearchCV(estimator=clf, param_grid=tuned_parameter, cv=5, n_jobs=1)
    rfc.fit(x_prove, y_prove)

    return rfc.best_params_['max_features'], rfc.best_params_['n_estimators']

代码中参数:
clf 可以是很多机器学习算法的实例化对象,比如:clf = tree.DecisionTreeClassifier(criterion=‘gini’)
x_prove,y_prove:验证集的数据和标签。
注意一下这条语句:

tuned_parameter = [{'max_features': [2, 'auto', 'log2'], 'n_estimators': [100, 200, 1000]}]

由于当时不知道随机森林不需要交叉验证,所以使用了该方法,所以字典中的内容其实是随机森林,如果大家想试试这个GridSearchCV函数,就需要把字典进行修改,改为对应机器学习算法的参数进行一个最佳参数的选择。

提一句:随机森林不需要单独的验证集交叉验证,他会使用bootstrap sampling方法从训练集中找到大约63.2%的数据进行训练,而剩下的约36.8%数据可以作为验证集来对泛化性能进行“包外估计”(和单独的验证集交叉验证我感觉功能一样,都是为了提升泛化性能),对应RandomForestClassifier函数中参数oob_score,默认为False,需要自己手动设置为True。

原文地址:https://www.cnblogs.com/ycycn/p/14063848.html