概念
机器学习主要任务
分类是机器学习的一项主要任务,主要是将实例数据划分到合适的分类中。
机器学习的另外一项任务是回归,主要是预测数值型的数据,比如通过数据值拟合曲线等。
分类和回归属于监督学习,这类算法必须知道预测什么,即目标变量的分类信息。与监督学习相对应的是无监督学习,此时数据没有类别信息,也不会给定目标值。在无监督学习中,将数据集合分成由类似的对象组成的多个类的过程称为“聚类”
分类:
| 色泽 | 根蒂 | 敲声 | 好瓜 |
|---|---|---|---|
| 青绿 | 蜷缩 | 浊响 | 是 |
| 乌黑 | 蜷缩 | 浊响 | 是 |
| 青绿 | 硬挺 | 清脆 | 否 |
| 乌黑 | 稍蜷 | 沉闷 | 否 |
这是一系列关于西瓜的数据,这里的每个实体,或者每一行被称为一个样本或数据点,而每一列(用来描述这些实体的属性)则被称为特征。假如说,我们现在想通过色泽、根蒂、敲声这几个特征来区分一个西瓜是好瓜与不是好瓜,这就是一个分类问题。分类问题的目标是预测类别标签。在这个例子中,“是”与“否”则是预测类别的两个不同的标签。分类问题有时可分为二分类和多分类,西瓜的例子则是一个二分类问题,多分类指的是数据不止两个类别,它有多个类别。
回归:
回归任务的目标是预测一个连续值,编程术语叫作浮点数。假如说我们现在手里得到的是如下数据:
| 色泽 | 根蒂 | 敲声 | 价格 |
|---|---|---|---|
| 青绿 | 蜷缩 | 浊响 | 2.1 |
| 乌黑 | 蜷缩 | 浊响 | 1.9 |
| 青绿 | 硬挺 | 清脆 | 1.6 |
| 乌黑 | 稍蜷 | 沉闷 | 1.5 |
我们要通过色泽、根蒂、敲声来预测西瓜的价格,这就是一个回归问题。区分分类任务和回归任务有一个简单方法,就是看输出是否具有某种连续性。如果在可能的结果之间具有连续性,那么它就是一个回归问题,比如说价格。
聚类:
聚类属于无监督学习,它是指我们的数据只有输入,没有输出,并需要从这些数据中提取知识。聚类算法将数据划分成不同的组,每组包含相似的样本。比如说:
| 色泽 | 根蒂 | 敲声 |
|---|---|---|
| 青绿 | 蜷缩 | 浊响 |
| 乌黑 | 蜷缩 | 浊响 |
| 青绿 | 硬挺 | 清脆 |
| 乌黑 | 稍蜷 | 沉闷 |
我们现在手里的数据只有色泽、根蒂、敲声这几个特征,我们通过这三个特征,把性状相似的西瓜分到一个组,这就是一个聚类问题。聚类问题与分类问题的本质区别就是有没有标签。
测试集和训练集
为什么要有训练集与测试集
我们想要利用收集的西瓜数据构建一个机器学习模型,用来预测新的西瓜的好坏,但在将模型用于新的测量数据之前,我们需要知道模型是否有效,也就是说,我们是否应该相信它的预测结果。不幸的是,我们不能将用于构建模型的数据用于评估模型的性能。因为我们的模型会一直记住整个训练集,所以,对于训练集中的任何数据点总会预测成正确的标签。这种记忆无法告诉我们模型的泛化能力如何,即预测新样本的能力如何。我们要用新数据来评估模型的性能。新数据是指模型之前没见过的数据,而我们有这些新数据的标签。通常的做法是,我们把手头上的数据分为两部分,训练集与测试集。训练集用来构建机器学习模型,测试集用来评估模型性
如何划分训练集与测试集
通常我们将手头数据的百分之 70 或 80 用来训练数据,剩下的百分之 30 或 20 作为测试用来评估模型性能。值得注意的是,在划分数据集之前,我们要先把手头上的数据的顺序打乱,因为我们搜集数据时,数据可能是按照标签排放的。比如,现在有 100 个西瓜的数据,前 50 个是好瓜,后 50 个是坏瓜,如果将后面的 30 个西瓜数据当做测试集,这时测试集中只有坏瓜一个类别,这无法告诉我们模型的泛化能力如何,所以我们将数据打乱,确保测试集中包含所有类别的数据。
欠拟合与过拟合
什么是欠拟合与欠拟合的原因
- 欠拟合:模型在训练集上误差很高;
- 欠拟合原因:模型过于简单,没有很好的捕捉到数据特征,不能很好的拟合数据。
什么是过拟合与过拟合的原因
过拟合:在训练集上误差低,测试集上误差高;
过拟合原因:模型把数据学习的太彻底,以至于把噪声数据的特征也学习到了,这样就会导致在后期测试的时候不能够很好地识别数据,模型泛化能力太差。
验证集与交叉验证
为什么需要验证集
在机器学习中,通常需要评估若⼲候选模型的表现并从中选择模型。这⼀过程称为模型选择。可供选择的候选模型可以是有着不同超参数的同类模型。以神经网络为例,我们可以选择隐藏层的个数,学习率大小和激活函数。为了得到有效的模型,我们通常要在模型选择上下⼀番功夫。从严格意义上讲,测试集只能在所有超参数和模型参数选定后使⽤⼀次。不可以使⽤测试数据选择模型,如调参。由于⽆法从训练误差估计泛化误差,因此也不应只依赖训练数据选择模型。鉴于此,我们可以预留⼀部分在训练数据集和测试数据集以外的数据来进⾏模型选择。这部分数据被称为验证数据集,简称验证集。
为了方便大家理解,举一个生活中的案例进行类比,我们一般是通过考试衡量学生的学习情况。老师上完课后,给学生布置的作业相当于训练数据集,中期的测试题相当于验证集,期末考试题相当于测试数据集。为了更加客观的衡量学生学习情况,期末考试题的内容不应该出现在平常的作业题和中期的测试题中,因为之前做过的题,对于计算机而言,相当于已经记住了,如果再次做同样的题,准确率就会很高。同样的道理,平常的作业题也不应该出现在中期的测试题里。中期的测试题,是为了掌握学生的学习情况,了解自己哪些方面内容没掌握,从而调整下一步学习的方向,为期末考试做好准备。
k折交叉验证
由于验证数据集不参与模型训练,当训练数据不够⽤时,预留⼤量的验证数据显得太奢侈。⼀种改善的⽅法是 K 折交叉验证。在 K 折交叉验证中,我们把原始训练数据集分割成 K 个不重合的⼦数据集,然后我们做K次模型训练和验证。每⼀次,我们使⽤⼀个⼦数据集验证模型,并使⽤其它 K−1 个⼦数据集来训练模型。在这 K 次训练和验证中,每次⽤来验证模型的⼦数据集都不同。最后,我们对这 K 次训练误差和验证误差分别求平均。 k 的值由我们自己来指定
还是以考试为例,交叉验证,相当于把平常的作业题和中期的测试题合并成一个题库,然后等分成几份。将题库分成了五份,第一行的意思是,先让学生做后面的四份训练题,再用第一份题进行测试。以此类推,再重复四次,每一次相当于重新进行学习。最后,取五次的平均成绩,平均成绩高,说明老师的教学方法好,对应到模型,就是超参数更好。
待完善……..