机器学习笔记

Posted hhh江月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习笔记相关的知识,希望对你有一定的参考价值。

机器学习笔记(一)

文章目录

概述

机器学习是目前信息技术中最激动人心的方向之一,其应用已经深入到生活的各个层面且与普通人的日常生活密切相关。本系列是个人学习机器学习时的一些笔记,希望对大家有一定的帮助。

机器学习的定义

机器学习正是这样的一门学科,人的“经验”对应计算机中的“数据”,让计算机来学习这些经验数据,生成一个算法模型,在面对新的情况中,计算机便能作出有效的判断,这便是机器学习。

还有一个经典教材的作者给出了如下所示的定义:
假设:

P:计算机程序在某任务类T上的性能

T:计算机程序希望实现的任务类

E:表示经验,即历史的数据集

若该计算机程序通过利用经验E在任务T上获得了性能P的改善,则称该程序对E进行了学习。

机器学习的一些基本术语

  • 所有记录的集合为:数据集
  • 每一条记录为:一个实例(instance)或样本(sample)
  • 单个的特点为特征(feature)或属性(attribute)
  • 一个样本的特征数为:维数(dimensionality)
  • 所有训练样本的集合为:训练集(trainning set)
  • 所有测试样本的集合为:测试集(test set)
  • 机器学习出来的模型适用于新样本的能力为:泛化能力(generalization),即从特殊到一般
  • 预测值为离散值的问题为:分类(classification)
  • 预测值为连续值的问题为:回归(regression)
  • 训练数据有标记信息的学习任务为:监督学习(supervised learning)
  • 训练数据没有标记信息的学习任务为:无监督学习(unsupervised learning)
    以上就是机器学习中常见的一些术语,当然还有一些其他的术语,会在后续的学习中陆续的接触到的。

误差与过拟合

我们将学习器对样本的实际预测结果与样本的真实值之间的差异成为:误差(error)。并且,误差是有不同的种类的,如下所示:
1、在训练集上的误差称为训练误差(training error)或经验误差(empirical error);
2、在测试集上的误差称为测试误差(test error);
3、学习器在所有新样本上的误差称为泛化误差(generalization error)。

显然,我们希望得到的是在新样本上表现得很好的学习器,即泛化误差小的学习器。因此,我们应该让学习器尽可能地从训练集中学出普适性的“一般特征”,这样在遇到新样本时才能做出正确的判别。然而,当学习器把训练集学得“太好”的时候,即把一些训练样本的自身特点当做了普遍特征;同时也有学习能力不足的情况,即训练集的基本特征都没有学习出来。

为了描述上述的学得太好以及学习的不足,我们引入两个概念:过拟合以及欠拟合。学习能力过强,以至于把训练样本所包含的不太一般的特性都学到了,称为:过拟合(overfitting)。学习能力过强,以至于把训练样本所包含的不太一般的特性都学到了,称为:过拟合(overfitting)。

从上面的定义我们可以发现,在过拟合问题中,训练误差十分小,但测试误差教大;但是,在欠拟合问题中,训练误差和测试误差都比较大。目前的状况是,目前,欠拟合问题比较容易克服,例如增加迭代次数等,但过拟合问题还没有十分好的解决方案,过拟合是机器学习面临的关键障碍。

评估的方法

我们希望得到的是泛化误差小的学习器,理想的解决方案是对模型的泛化误差进行评估,然后选择泛化误差最小的那个学习器。但是,泛化误差指的是模型在所有新样本上的适用能力,我们无法直接获得泛化误差。因此,通常我们采用一个“测试集”来测试学习器对新样本的判别能力,然后以“测试集”上的“测试误差”作为“泛化误差”的近似。

训练集与测试集的划分

如上所述:我们希望用一个“测试集”的“测试误差”来作为“泛化误差”的近似,因此我们需要对初始数据集进行有效划分,划分出互斥的“训练集”和“测试集”。对训练集以及测试集的划分有以下所示的集中常用的方法:

留出法

将数据集D划分为两个互斥的集合,一个作为训练集S,一个作为测试集T,常见的划分为:大约2/3-4/5的样本用作训练,剩下的用作测试。

需要注意的是:训练/测试集的划分要尽可能保持数据分布的一致性,以避免由于分布的差异引入额外的偏差,常见的做法是采取分层抽样。

同时,由于划分的随机性,单次的留出法结果往往不够稳定,一般要采用若干次随机划分,重复实验取平均值的做法。

交叉验证法

将数据集D划分为k个大小相同的互斥子集,同样地尽可能保持数据分布的一致性,即采用分层抽样的方法获得这些子集。

交叉验证法的思想是:每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集,这样就有K种训练集/测试集划分的情况,从而可进行k次训练和测试,最终返回k次测试结果的均值。交叉验证法也称“k折交叉验证”,k最常用的取值是10。

与留出法类似,将数据集D划分为K个子集的过程具有随机性,因此K折交叉验证通常也要重复p次,称为p次k折交叉验证,常见的是10次10折交叉验证,即进行了100次训练/测试。特殊地当划分的k个子集的每个子集中只有一个样本时,称为“留一法”,显然,留一法的评估结果比较准确,但对计算机的消耗也是巨大的。

自助法

我们希望评估的是用整个D训练出的模型。但在留出法和交叉验证法中,由于保留了一部分样本用于测试,因此实际评估的模型所使用的训练集比D小,这必然会引入一些因训练样本规模不同而导致的估计偏差。留一法受训练样本规模变化的影响较小,但计算复杂度又太高了。“自助法”正是解决了这样的问题。

自助法的基本思想是:给定包含m个样本的数据集D,每次随机从D 中挑选一个样本,将其拷贝放入D’,然后再将该样本放回初始数据集D 中,使得该样本在下次采样时仍有可能被采到。重复执行m 次,就可以得到了包含m个样本的数据集D’。

这样,通过自助采样,初始样本集D中大约有36.8%的样本没有出现在D’中,于是可以将D’作为训练集,D-D’作为测试集。自助法在数据集较小,难以有效划分训练集/测试集时很有用,但由于自助法产生的数据集(随机抽样)改变了初始数据集的分布,因此引入了估计偏差。在初始数据集足够时,留出法和交叉验证法更加常用。

以上就是训练集以及测试数据集的划分的三种基本的方法。

以上是关于机器学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

机器学习基本概念

怎样快速判断不好的机器学习算法是高偏差还是高方差?-ML Note 6

机器学习笔记

机器学习笔记

机器学习笔记

机器学习笔记