zoukankan      html  css  js  c++  java
  • 机器学习的建议

    机器学习的建议

    开始设计一个机器学习系统

    • 在刚刚开始入手一个机器学习项目的时候, 应该着手于如何将快速实现机器学习算法, 并立刻使用交叉验证的数据集合进行验证, 计算出损失值(J_{cv}), 而不是在一开始设计的时候就考虑很多的因素, 比如是否需要更多的特征, 或者需要更多的样本, 实际上, 在没有一个已经实现了的机器学习算法的情况下, 是否需要更多的特征或者更多的样本是未知的, 因此建议先实现一个简单粗暴的机器学习算法, 发现其中的问题, 有哪些地方可以优化, 应该朝那个方向优化, 是需要更多的特征, 还是更多的样本, 还是修改学习率, 还是修改正则化参数。

    第一次快速实现了一个简单的机器学习算法之后

    • 绘制出学习曲线, 也就是说上面提到的误差值与样本数量或者特征数量关系
      • 假设我们现在有100个样本, 3个特征, 将其中60个划分为训练样本, 20个划分为交叉验证样本, 20个划分为测试样本
      • 我们的目标是画出(J_{train}), (J_{cv})与样本数量的学习曲线
      • 写一个for循环, 将输入的样本数量从1一直迭代到60, 在每一个循环中, 我们都计算出模型的参数(也就是生成一个模型), 计算训练误差值(J_{train}), 将这个误差保存到列向量中, 同时计算出交叉验证误差(J_{cv}), 也保存到另外一个列向量中。
      • 在回顾一个一遍, 在for循环中, 我们通过输入训练样本获取到了模型, 接着再一次将训练样本输入到模型中得到一个误差值, 这个就是训练误差; 接着将交叉验证样本输入到模型中, 得到一个误差值, 这个就是交叉验证误差
      • 画出学习曲线
      • 从学习曲线的结果来看, 主要还是看(J_{cv})的变化, 因为(J_{train})的结果可能会比较乐观
      • 注意点: 在绘制学习曲线的时候, (J_{train}), (J_{cv})都是必要求的, 值得注意的是, 这里的(J_{train})和在训练的时候使用到的(J_{train})还是有一点区别的, 后者是在不点迭代更新参数产生的误差, 当这个值达到了我们的阈值则表示我们的参数已经训练好了, 也就是我们的模型出来了, 这里更加强调训练的概念; 而前者则更加强调测试的概念, 也就说从训练集中出来的模型在使用训练集中的数据进行测试。
  • 相关阅读:
    119. Pascal's Triangle II
    118. Pascal's Triangle
    112. Path Sum
    111. Minimum Depth of Binary Tree
    110. Balanced Binary Tree
    108. Convert Sorted Array to Binary Search Tree
    88. Merge Sorted Array
    83. Remove Duplicates from Sorted List
    70. Climbing Stairs
    陌陌面试经历
  • 原文地址:https://www.cnblogs.com/megachen/p/9981380.html
Copyright © 2011-2022 走看看