• 机器学习进度(十)—— 模型选择与调优


    模型选择与调优

    1、为什么需要交叉验证

    交叉验证目的:为了让被评估的模型更加准确可信

    2、什么是交叉验证(cross validation)

    交叉验证:将拿到的训练数据,分为训练和验证集。以下图为例:将数据分成5份,其中一份作为验证集。然后经过5次(组)的测试,每次都更换不同的验证集。即得到5组模型的结果,取平均值作为最终结果。又称5折交叉验证。

    2.1 分析

    我们之前知道数据分为训练集和测试集,但是为了让从训练得到模型结果更加准确。做以下处理

    • 训练集:训练集+验证集
    • 测试集:测试集

    问题:那么这个只是对于参数得出更好的结果,那么怎么选择或者调优参数呢?

    通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。

    3.1 模型选择与调优

    • sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)
      • 对估计器的指定参数值进行详尽搜索
      • estimator:估计器对象
      • param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]}
      • cv:指定几折交叉验证
      • fit:输入训练数据
      • score:准确率
      • 结果分析:
        • bestscore:在交叉验证中验证的最好结果_
        • bestestimator:最好的参数模型
        • cvresults:每次交叉验证后的验证集准确率结果和训练集准确率结果

    4、Facebook签到位置预测K值调优

    • 使用网格搜索估计器
    # 使用网格搜索和交叉验证找到合适的参数
    knn = KNeighborsClassifier()
    
    param = {"n_neighbors": [3, 5, 10]}
    
    gc = GridSearchCV(knn, param_grid=param, cv=2)
    
    gc.fit(x_train, y_train)
    
    print("选择了某个模型测试集当中预测的准确率为:", gc.score(x_test, y_test))
    
    # 训练验证集的结果
    print("在交叉验证当中验证的最好结果:", gc.best_score_)
    print("gc选择了的模型K值是:", gc.best_estimator_)
    print("每次交叉验证的结果为:", gc.cv_results_)
  • 相关阅读:
    计算最大公因数
    最大子序列和问题
    C++三大函数:析构函数、复制构造函数和operator=
    C++函数返回值传递
    C++动态内存分配
    Halcon Assistants
    网格细分算法
    HDevelop Guide
    MeshLab
    point cloud registration
  • 原文地址:https://www.cnblogs.com/wendi/p/14283800.html
Copyright © 2020-2023  润新知