机器学习-基础知识了解

1、机器学习一些基本介绍

1.1、机器学习流程

一个机器学习的常规套路

1.数据收集与预处理

2.特征选择与模型构建

3.评估与预测

1.2、机器学习怎么动手去做?

只有实际应用啦,才觉得没白学,那么去哪里找案例呢?

最好的资源:Github,kaggle,各大资源分享点

案例的积累作用很大, 其实我们干活是什么样的呢?主要就是在模仿,我们并不是科学家,能做事才能有用的,既然人家是这么做的,并且做的不错,那我们去模仿做出来的就是我们自己的!

很少从头开始去写一个项目,通常都是按照之前的某种套路照搬过来,实际上大部分公司都这么做,建议大家先学会模仿,再去创作吧!

2、基础概念

2.1、分类和回归

        若我们欲预测的是离散值,例如“好瓜”“坏瓜”此类学习任务称为“分类”(classification); 若欲预测的是连续值,例如西瓜成熟度 0.95、0.37, 此类学习任务称为“回归”(regression). 对只涉及两个类别的“二分类”(binary classification)任务, 通常称其中一个类为“正类”(positive class), 另一个类为“反类”(negative class); 涉及多个类别时,则称为“多分类”(multi-class classification)任务. 一般地, 预测任务是希望通过对训练集\left\{ (x_1,y_1),(x_2,y_2),...,(x_m,y_m) \right\}进行学习, 建立一个从输入空间\chi到输出空间\gamma的映射f:\chi \mapsto \gamma. 对二分类任务,通常令\gamma =\left \{ -1,+1 \right \}\left \{ 0,1 \right \}; 对多分类任务,\left | \gamma \right |>2; 对回归任务, \gamma =\mathbb{R}, \mathbb{R}为实数集.

2.2、监督学习和无监督学习

        根据训练数据是否拥有标记信息,学习任务可大致划分为两大类: “监督学习”(supervised learning)和“无监督学习”(unsupervised learning), 分类和回归是前者的代表, 而聚类则是后者的代表.

2.3、过拟合和欠拟合

        当学习器把训练样本学得“太好”了的时候, 很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质, 这样就会导致泛化性能下降. 这种现象在机器学习中称为“过拟合”(overfitting). 与“过拟合”相对的是“欠拟合”(underftting), 这是指对训练样本的一般性质尚未学好. 如图给出了关于过拟合与欠拟合的一个便于直观理解的类比.

2.4、评估方法

        通常,我们可通过实验测试来对学习器的泛化误差进行评估并进而做出选择. 为此, 需使用一个“测试集”(testing set)来测试学习器对新样本的判别能力, 然后以测试集上的“测试误差”(testing error)作为泛化误差的近似. 通常我们假设测试样本也是从样本真实分布中独立同分布采样而得. 但需注意的是, 测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用过.
        测试样本为什么要尽可能不出现在训练集中呢?为理解这一点,不妨考虑这样一个场景: 老师出了 10 道习题供同学们练习, 考试时老师又用同样的这 10道题作为试题, 这个考试成绩能否有效反映出同学们学得好不好呢? 答案是否定的, 可能有的同学只会做这 10 道题却能得高分. 回到我们的问题上来, 我们希望得到泛化性能强的模型, 好比是希望同学们对课程学得很好、获得了对所学知识“举一反三”的能力;训练样本相当于给同学们练习的习题,测试过程则相当于考试. 显然, 若测试样本被用作训练了,则得到的将是过于“乐观”的估计结果.
        可是,我们只有一个包含 m 个样例的数据集 D=\left \{ (x_{1},y_{1}),(x_{2},y_{2}),...,(x_{m},y_{m}) \right \},既要训练,又要测试怎样才能做到呢?答案是通过对 D进行适当的处理,从中产生出训练集 S和测试集T下面介绍几种常见的做法.

2.4.1、留出法

        “留出法”(hold-out)直接将数据集 D划分为两个互斥的集合, 其中一个集合作为训练集 S, 另一个作为测试集T, 即 D=S \cup TS \cap T= \varnothing . 在 S上训练出模型后,用 T 来评估其测试误差,作为对泛化误差的估计.

        以二分类任务为例,假定 D包含 1000 个样本, 将其划分为 S包含 700 个样本,T 包含 300 个样本,用 S 进行训练后,如果模型在 T 上有 90 个样本分类错误, 那么其错误率为 (90/300) x 100% = 30%, 相应的, 精度为 1-30% = 70%.

        需注意的是, 训练/测试集的划分要尽可能保持数据分布的一致性, 避免因数据划分过程引入额外的偏差而对最终结果产生影响, 例如在分类任务中至少要保持样本的类别比例相似.  如果从采样(sampling)的角度来看待数据集的划分过程, 则保留类别比例的采样方式通常称为“分层采样”(stratifedsampling). 例如通过对 D 进行分层采样而获得含 70% 样本的训练集 S 和含30% 样本的测试集 T, 若 D包含 500 个正例、500 个反例,则分层采样得到的S 应包含 350 个正例、350 个反例, 而T 则包含 150 个正例和 150 个反例; 若ST 中样本类别比例差别很大, 则误差估计将由于训练/测试数据分布的差异而产生偏差.

        另一个需注意的问题是, 即便在给定训练/测试集的样本比例后,仍存在多种划分方式对初始数据集 D进行分割. 例如在上面的例子中,可以把 D 中的样本排序, 然后把前 350 个正例放到训练集中, 也可以把最后 350 个正例放到训练集中,······这些不同的划分将导致不同的训练/测试集,相应的, 模型评估的结果也会有差别. 因此, 单次使用留出法得到的估计结果往往不够稳定可靠, 在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果. 例如进行 100 次随机划分,每次产生一个训练/测试集用于实验评估,100 次后就得到 100 个结果, 而留出法返回的则是这 100 个结果的平均.

        此外 我们希望评估的是用 D 训练出的模型的性能, 但留出法需划分训练/测试集, 这就会导致一个窘境: 若令训练集 S 包含绝大多数样本, 则训练出的模型可能更接近于用 D 训练出的模型, 但由于 T 比较小, 评估结果可能不够稳定准确; 若令测试集 T 多包含一些样本, 则训练集 SD 差别更大了, 被评估的模型与用 D 训练出的模型相比可能有较大差别,从而降低了评估结果的保真性(fdelity). 这个问题没有完美的解决方案, 常见做法是将大约 2/3~ 4/5 的样本用于训练, 剩余样本用于测试.

        可从“偏差-方差”的角度来理解: 测试集小时, 评估结果的方差较大; 训练集小时, 评估结果的偏差较大. 一般而言,测试集至少应含 30 个样例 [Mitchell,1997].

2.4.2、交叉验证法

        交叉验证法”(cross validation)先将数据集 D划分为k 个大小相似的互斥子集, 即D=D_{1}\cup D_{2}\cup ... \cup D_{k}, D_{i}\cap D_{j}=\varnothing (i\neq j). 每个子集 D_{i}都尽可能保持数据分布的一致性,即从 D 中通过分层采样得到. 然后,每次用k-1 个子集的并集作为训练集, 余下的那个子集作为测试集; 这样就可获得k组训练/测试集, 从而可进行 k 次训练和测试, 最终返回的是这 k 个测试结果的均值. 显然, 交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值, 为强调这一点, 通常把交叉验证法称为“k 折交叉验证”(k-fold crossvalidation). k 最常用的取值是 10, 此时称为 10 折交叉验证: 其他常用的k值有 5、20 等. 图 2.2 给出了 10 折交叉验证的示意图.

        与留出法相似,将数据集 D 划分为k 个子集同样存在多种划分方式。为减小因样本划分不同而引入的差别, k 折交叉验证通常要随机使用不同的划分重复 p 次, 最终的评估结果是这 p 次k 折交叉验证结果的均值, 例如常见的有“10 次 10 折交叉验证”.
        假定数据集 D 中包含 m 个样本,若令 k = m,则得到了交叉验证法的一个特例: 留一法(Leave-One-Out,简称 LOO). 显然,留一法不受随机样本划分方式的影响, 因为 m 个样本只有唯一的方式划分为 m 个子集--每个子集包含一个样本; 留一法使用的训练集与初始数据集相比只少了一个样本,这就使得在绝大多数情况下,留一法中被实际评估的模型与期望评估的用 D 训练出的模型很相似. 因此, 留一法的评估结果往往被认为比较准确. 然而, 留一法也有其缺陷: 在数据集比较大时, 训练 m 个模型的计算开销可能是难以忍受的(例如数据集包含 1百万个样本,则需训练 1百万个模型),而这还是在未考虑算法调参的情况下,另外,留一法的估计结果也未必永远比其他评估方法准确; “没有免费的午餐”定理对实验评估方法同样适用.

2.4.3、自助法

        我们希望评估的是用 D 训练出的模型. 但在留出法和交叉验证法中,由于保留了一部分样本用于测试,因此实际评估的模型所使用的训练集比 D 小. 这必然会引入一些因训练样本规模不同而导致的估计偏差. 留一法受训练样本规模变化的影响较小,但计算复杂度又太高了. 有没有什么办法可以减少训练样本规模不同造成的影响,同时还能比较高效地进行实验估计呢?

        “自助法”(bootstrapping)是一个比较好的解决方案,它直接以自助采样法(bootstrap sampling)为基础[Efron and Tibshirani,1993]. 给定包含 m 个样本的数据集 D,我们对它进行采样产生数据集 {D}':每次随机从 D 中挑选一个样本, 将其拷贝放入 {D}', 然后再将该样本放回初始数据集 D 中,使得该样本在下次采样时仍有可能被采到; 这个过程重复执行 m 次后, 我们就得到了包含 m个样本的数据集 {D}',这就是自助采样的结果. 显然,D 中有一部分样本会在 {D}'中多次出现, 而另一部分样本不出现. 可以做一个简单的估计, 样本在 m 次采样中始终不被采到的概率是(1- \frac{1}{m})^{m}, 取极限得到

\underset{m \mapsto \infty }{\lim }(1- \frac{1}{m})^{m} \mapsto {\frac{1}{e}} \approx 0.368        (1)

即通过自助采样, 初始数据集 D 中约有 36.8% 的样本未出现在采样数据集 D'中. 于是我们可将 D'用作训练集, D\D'用作测试集; 这样, 实际评估的模型与期望评估的模型都使用 m 个训练样本, 而我们仍有数据总量约 1/3 的、没在训练集中出现的样本用于测试. 这样的测试结果, 亦称“包外估计”(out-of-bagestimate).
        自助法在数据集较小、难以有效划分训练/测试集时很有用; 此外,自助法能从初始数据集中产生多个不同的训练集, 这对集成学习等方法有很大的好处. 然而,自助法产生的数据集改变了初始数据集的分布, 这会引入估计偏差,因此, 在初始数据量足够时,留出法和交叉验证法更常用一些.

3、数学概念

主要符号

3.1、数据标准化

标准化方法最常用的有两种:

  • min-max标准化(离差标准化):对原始数据进行线性变换,是结果落到【0,1】区间,转换方法为 X'=(X-min)/(max-min),其中max为样本数据最大值,min为样本数据最小值。
  • z-score标准化(标准差标准化):处理后的数据符合标准正态分布(均值为0,方差为1),转换公式:X减去均值,再除以标准差

3.2、性能度量

        对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准这就是性能度量(performance measure)。性能度量反映了任务需求, 在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果; 这意味着模型的“好坏”是相对的, 什么样的模型是好的,不仅取决于算法和数据, 还决定于任务需求

        在预测任务中,给定样例集 D=\left \{ (x_{1},y_{1}),(x_{2},y_{2}),...,(x_{m},y_{m}) \right \}, 其中 y_{i}是示例 x_{i}的真实标记. 要评估学习器f 的性能, 就要把学习器预测结果 f(x)与真实标记y进行比较.

        回归任务最常用的性能度量是“均方误差”(mean squared error)

E(f;D)= \frac{1}{m} \sum_{i=1}^{m} ( f(x_{i}) - y_{i} )^{2}        (2)

        更一般的, 对于数据分布 D 和概率密度函数 p( \cdot ), 均方误差可描述为

E(f;D)=\int_{x\sim D}( f(x)-y )^{2}p(x)dx        (3)

        下面主要介绍分类任务中常用的性能度量.

3.2.1、错误率与精度

        本章开头提到了错误率和精度, 这是分类任务中最常用的两种性能度量, 既适用于二分类任务,也适用于多分类任务. 错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例. 对样例集 D, 分类错误率定义为

E(f;D)= \frac{1}{m} \sum_{i=1}^{m}\mathbb{I}(f(x_{i})\neq y_{i})        (4)

        精度则定义为

\begin{aligned} acc(f;D)&= \frac{1}{m} \sum_{i=1}^{m}\mathbb{I}(f(x_{i})\neq y_{i}) \\ &=1-E(f;D) \end{aligned}        (5)

        更一般的, 对于数据分布 D和概率密度函数 p(\cdot ), 错误率与精度可分别描述为

E(f;D)= \int_{x\sim D} \mathbb{I}(f(x_{i})\neq y_{i})p(x)dx        (6)

\begin{aligned} acc(f;D)&= \int_{x\sim D} \mathbb{I}(f(x_{i})\neq y_{i})p(x)dx \\ &=1-E(f;D) \end{aligned}        (7)

4、sklearn仓库

4.1、数据DataSet

5、感想

        还没写完,慢慢补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值