美文网首页
评估机器学习模型

评估机器学习模型

作者: 庵下桃花仙 | 来源:发表于2019-03-24 22:42 被阅读0次

    机器学习的目的是得到泛化(generalize)的模型,因此,解决过拟合很重要。

    训练集、验证集、测试集

    将数据分为三个集合:训练集、验证集、测试集。在训练集上训练模型,验证集上评估模型,一旦找到最佳参数,在测试集上最后测试模型。

    为什么不划分为两个集合,仅有训练集和测试集?

    因为开发模型时需要调节模型配置,通过模型在验证集上的性能来调节超参数(hyperparameter),这样就导致验证集的信息泄露(informationo leak)到模型中,很快导致模型在验证集上过拟合。而我们最需要的是模型在全新数据上的性能。
    如果数据较少,有三种经典的评估方法:

    • 简单的留出验证;
    • K折验证;
    • 带有打乱数据的重复K折验证。

    简单的留出验证

    简单的留出验证数据划分.PNG
    # 留出验证
    num_validation_samples = 10000
    
    np.random.shuffle(data) # 打乱数据
    
    validation_data = data[:num_validation_samples] # 定义验证集
    data = data[num_validation_samples:]
    
    training_data = data[:] # 定义训练集
    
    model = get_model()
    model.train(training_data) # 在训练数据上训练模型
    validation_score = model.evaluate(validation_data) # 在验证数据上评估模型
    
    # 现在你可以调节模型、重新训练、评估,然后再次调节......
    
    model = get_model()
    model.train(np.concatenate([training_data,
                                validation_data])) #一旦调节好超参数,
    # 通常在所有非测试数据是哪个从头开始训练最终模型
    test_score = model.evaluate(test_data)
    

    缺点:如果数据较少,无法在统计学上代表数据。表现为不同的随机打乱,最终得到的模型性能差别很大。
    解决方法:
    1、K折验证;
    2、重复的 K 折验证。
    np.random.shuffle(x)
    https://blog.csdn.net/brucewong0516/article/details/79012233

    #现场修改序列,改变自身内容。(类似洗牌,打乱顺序)
    In [30]: arr = np.arange(10)
    In [31]: np.random.shuffle(arr)
    In [32]: arr
    Out[32]: array([5, 2, 7, 0, 6, 3, 4, 1, 8, 9])
    #对多维数组进行打乱排列时,默认是对第一个维度也就是列维度进行随机打乱
    In [37]: arr = np.arange(12).reshape(3,4)
    In [38]: arr
    Out[38]:
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    #将多维数组打乱
    In [39]: np.random.shuffle(arr)
    In [40]: arr
    Out[40]:
    array([[ 4,  5,  6,  7],
           [ 0,  1,  2,  3],
           [ 8,  9, 10, 11]])
    

    相关文章

      网友评论

          本文标题:评估机器学习模型

          本文链接:https://www.haomeiwen.com/subject/atvpvqtx.html