zoukankan      html  css  js  c++  java
  • 验证集的作用和在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。

  • 相关阅读:
    Jenkins插件开发(一)--环境搭建
    Jenkins插件开发(二)-- HelloWorld
    Jenkins插件开发(三)-- 插件编写
    持续交付——发布可靠软件的系统方法
    python-字典练习
    python-编写认证登录
    nodejs pm2教程(转载)
    PM2实用入门指南
    删除Remote Desktop的连接历史记录
    Vue中如何使用axios发送jsonp跨域验证
  • 原文地址:https://www.cnblogs.com/ycycn/p/14063848.html
Copyright © 2011-2022 走看看