科技女王范儿 一文读懂机器学习( 三 )


Training,Testing,andValidationSets不同数据集的作用
现在 , 我们需要三组数据:
训练集trainset:用于实际训练算法的训练集 , 把它拿来做函数拟合 , 使得模型好一点 。 验证集validation:用于跟踪算法学习情况,观察函数好不好调整(改模型的时候依赖它) , 每次训练完后把模型拿到它的上面去测试一下看看模型好不好 , 用于没见过的数据 , 防止模型过拟合 , 虽然没有训练模型 , 但是改模型是依据模型的 , 对于模型来说 , validation实际上是见过的 , 测试真正的效果应该给模型从来没有见过的数据 。 测试集testset:当我们的模型都能忍受两个值的时候就定了 , 最后一步就是拿test来模型上作用看最终的看好坏(用过一次就不用第二次) 。 如果test数据上了效果还是不好 , 就要重新选择这三个数据了 , 因为test数据集已经被见过了 。数据集划分
每种算法都需要一些合理量的数据去学习(精确度有所不同 , 但是算法看到的数据越多 , 看到每种可能输入类型的示例的可能性就越大 , 尽管更多的数据也会增加计算时间) 。
平衡的分配
一般来说 , 数据划分比例取决于你 , 如果有大量数据 , 通常执行2:1:1 , 否则进行3:1:1 。 拆分方式也很重要 。 如果你选择前几个作为训练集 , 接下来选择测试集 , 依此类推 , 那么结果将是非常糟糕的 , 因为训练没有看到所有的类别 。 这可以通过以下方法解决:首先对数据进行随机重新排序 , 或者将每个数据点随机分配给一组数据 , 如下图 。
科技女王范儿 一文读懂机器学习
文章图片
缺乏训练数据
如果你确实缺乏训练数据 , 那么如果你有单独的验证集 , 可能会担心算法将无法得到充分训练;那么就可以执行leave-some-out,multi-foldcross-validation 。 这个想法如下图所示 。 数据集被随机分为K个子集 , 一个子集用作验证集 , 而算法对其他所有数据进行训练 。 然后遗漏另一个子集 , 并在该子集上训练一个新模型 , 并对所有不同的子集重复相同的过程 。 最后 , 测试并使用产生最小验证误差的模型 。 由于我们不得不训练K个不同的模型 , 而不仅仅是一个模型 , 因此我们权衡了数据的运行时间 。 在最极端的情况下 , 存在留一法交叉验证 , 该算法仅对一项数据进行验证 , 并对其余所有数据进行训练 。
科技女王范儿 一文读懂机器学习
文章图片
TheConfusionMatrix无论我们使用多少数据来测试训练过的算法 , 我们仍然需要确定结果是否良好 。 我们将在这里介绍一种适用于分类问题的方法 , 称为混淆矩阵 。
混淆矩阵:制作一个包含水平和垂直方向上所有可能类别的方矩阵 , 并沿着表格顶部列出这些类别作为预测输出 , 然后在左侧向下列出目标类别 。
因此 , 例如矩阵(i , j)的元素告诉我们输入的数据中 , 本来是i类的 , 结果算法判别它呈j类的数据有多少个 。 算法判断对的数据是对角线上的任何内容 。 假设我们有三个类:C1 , C2和C3 。 现在 , 我们计算次数 , 当类别是C1时候 , 算法判别它是C1的次数 , 判别它是C2的次数 , 等等 。 直到填写完表格:
科技女王范儿 一文读懂机器学习
文章图片
该表告诉我们 , 对于这三个类 , 大多数示例已正确分类 , 但是C3类的两个示例被错误分类为C1 , 依此类推 。 对于类少的时候 , 这是查看输出的好方法 。 如果只需要一个数字 , 则可以将对角线上的元素之和除以矩阵中所有元素的总和 , 这就是所谓的准确性accuracy , 我们将看到它并不是评估机器学习算法结果的唯一方法 。
AccuracyMetrics我们不仅可以测量准确性 , 还可以做更多分析结果的工作 。 如果考虑这些类的可能输出 , 则可以将它们安排在这样的简单图表中 , turepositive是真实情况 , predictedcondition是预测情况 , conditionpositive是真实情况是真的 , conditionnegative是真实情况是假的 , predictedconditionpositive是预测情况是真的 , predictedconditionnegative是预测情况是假的 。


推荐阅读