机器学习全生命周期

本系列博客是结合coursera的加州大学圣地亚哥分校的机器学习的课程和Medium的系列文章整合而成。

本系列是给机器学习的初级学者编写的机器学习全周期的步骤。机器学习分五个部分:本篇博客是系列的第一篇。本博客的目的是尽量给读者一个概览,篇幅要小,具体内容的展开读者可以自行google/bing/百度各关键词。会英语的读者请看直接看文后的英文原版,然后自行总结。翻译难免会走样。

1. 获得数据:

    这个阶段的目标是辨别和获得所有和业务场景/命题有关的数据,就是收集到所有需要的,有关的数据。

    在这个阶段中,i)我们要辨别数据源 ii)采集数据 iii)集成数据。

i)辨别数据源

ii)采集数据

iii)集成数据

2. 预备数据:

    这个阶段有两步。第一步是 探索数据,第二步是 预处理数据, 我们这里探讨的是结构性数据。结构性数据的解释在这博客中有详细解释。

     探索数据 (Exploratory data analysis EDA):

      探索数据的目标是理解数据,即数据在业务场景中可能起的因果关系,数据和数据之间的关系。

      i)为什么要探索数据

      探索数据是为了理解数据之间的内在关系,也理解数据和业务输出的因果关系。 通常有 A)数据和数据之间的耦合(correlations), B) 数据的趋势  C)异常值的检测。

      A)数据和数据之间的耦合(correlations) 

为了量化不同变量之间的关系,我们可以用Pearson交互系数Pearson Correlation Coefficient. 这个参数是用来度量两个变量之间的关系:强度和方向的夹角。如果Pearson交互系数是+1,那么两个变量是正向,线性的关系。如果Pearson交互系数是-1, 那么两个变量是负向,线性的关系。下面环节提到的分散图就是很好直观地看两个变量之间的关系。如果两个数据是正向关系,那么很多时候,我们会删减其中一个数据。这个我们会在预处理删减特征值部分也会提到。

机器学习全生命周期_第1张图片

   详细可以阅读此wiki链接, 虽然Pearson关系系数不能用来捕捉非线性关系,但仍然是观测连个变量之间关系的好方法。使用Pandas库的dataFrame类里,我们可以非常容易的看两个变量之间的关系。

    B)数据的趋势:

我们也通过直线图,看数据的趋势,以获得直观的观察。

     C) 异常值观察:

异常值检测的目的是将一些异常值删去或排除掉,因为异常值会误导算法。在这个步骤中,我们主要用统计学的方法,看一下数据集是否有异常值,在下面预处理数据,我们会去除异常值。观察异常值,我们有时可以用画图来直观观察到:比如直方图箱型图的结合(histogram plot and box plot)和分散图(scatter plot):

机器学习全生命周期_第2张图片

                          图:直方图和箱型图来观察异常值

      详细的异常值识别可以从这个链接看到,英文读者请读原文。有时异常值是因为采集时的异常照成,这需要除去。有时,异常值是业务场景容许的,是要认真查考的。要区分这两种场景。

      ii)理解描述数据

     正如上面看到的,为了理解描述数据(describe data),我们可以描述一下我们的数据,通俗的讲就是熟悉数据,比如数据的平均值,中位值,最大值,最小值,正态分布等等。这个环节是读懂数据。

      iii)数据可视化

     理解数据也可以利用工具使数据可视化,也就是直观地用图的形式表现出来。一般的方法有 直方图(histogram),热力图(heat map),直线图(line plot),和分散图(scatter plot)。

      A)直方图:直方图是显示数据和其出现的频率的图。可以很方便看出高频数据。

      机器学习全生命周期_第3张图片

      B)热力图:热力图看数据的密度, 密度高,颜色就会深。

       机器学习全生命周期_第4张图片

      C)直线图:可以大致看看数据的趋势和走势。

      机器学习全生命周期_第5张图片 

      D)分散图:可以看出两个数据的...

       机器学习全生命周期_第6张图片

     预处理数据:

       这个阶段的目的是为了产生可以用来分析,训练的数据。

      这里会有三个过程,清洁数据,选取数据,和数据转换。

      i)数据清洁:

      a) 数值缺少或丢失

除去有50%的数据缺省字段, 怎样计算字段的缺省百分比,50%是人为订下来的值,到底这个阀值是多少百分比,是基于业务场景的。这个链接有讨论 

如果不多,也可以用平均值代替缺少项,但要看业务场景,有时也用最大值,或最小值替代缺少项。  如果是时序数据,统计学也有不少其他方法填补缺少的值。               

      b) 数据重复

pandas 的 dataframe 有api可以去除重复的数值。但数据重复有时也可能是真实的数据分布,看业务场景。

      c) 数据不一致

      d) 噪音

      这里主要指白噪声,通过过滤的方法去除。

       机器学习全生命周期_第7张图片 

      

      e) 异常值

也要除去不合理的数据(remove outliers)。在某些业务场景,我们会去除不合理的数据依据这个链接的公式

Below the first quartile − 3 ∗ interquartile range

Above the third quartile + 3 ∗ interquartile range

      ii)特征值选取:

首先特征值是对采集的数据的进一步处理得到的,有时特征值就是采集的数据,有时是对采集的数据加工后的,能成为特征值表明这个值是可以直接输入算法模型的或者在特征工程环节之后,可以输入算法模型的。

       a) 删除数据

           这里是指两个数据的Pearson交互系数为1,其中一个就可以删除。Person 数值对Category数值是不适用的。 下面篇幅所讲的特征值工程中的降维也会删除数据。

        b) 添加特征数据

数据中有时根据业务场景,数据是中立的,比如星期一,星期二,。。。星期日,如果单纯简单的用数值,就是1,2,3,4,。。。7. 但这样表示有时把业务场景的算法误认为星期日是7,数值是比星期一的数值大,其实业务本身只是让数值代表星期一和星期日,是分类(category)的概念, 所以,可以让 0000001,0000010,0000100,0001000.。。1000000来代表特征数据星期一,星期二,。。。星期日更能符合业务场景的需求。

    

添加特征数据,符合业务场景
原始数据 误导的数据转换 符合中立的业务场景的数据添加转换
星期一 1 0000001
星期二 2 0000010
星期三 3 0000100
星期四 4 0001000
星期五

5

0010000
星期六 6 0100000
星期日 7 1000000

       

 

 

 

 

 

 

 

 

c) 整合数据变成特征数据

将多个数据源中的数据合并,并存放到一个一致的数据存储(如数据仓库)中。这些数据源可能包括多个数据库、数据立方体或一般文件。具体例子比如我们有时根据业务场景把日期,小时,分钟,秒整合在一起,作为一个时间戳。可以用这个matools工具转换。

日期 小时 分钟 整合后的时间戳
13052021 11 36 23 1620876983
11042021 8 21 7 1618186867

 

 

 

 

iii)特征值工程

        a) 放大缩小

各个数据的衡量标准是不一样的。比如年龄是0-100,身高是1.4-2米,那么在算法中,有的数据的变化对输出就比较敏感,不容易训练。所以,我们都将它标准化 (normalize). 

缩放是指更改字段范围的过程。这是必要的,因为字段以不同的单位进行测量,因此涵盖不同的范围。考虑算法支持向量机和K-nearest neighbors等方法受到字段范围的显著影响,并且缩放允许他们在字段相同范围内学习。虽然线性回归和随机森林等方法实际上并不需要进行特征缩放,但在我们比较多个算法时,最佳做法仍然是采取这一步骤。

我们将通过将每个字段放在0和1之间的范围来缩放字段。这通过获取字段的每个值,减去特征的最小值,并除以最大值减去最小值(范围)来完成。这种特定方式的缩放通常称为规范化,另一种主要方式称为标准化。

虽然这个过程很容易手工实现,但我们可以使用Scikit-Learn中的MinMaxScaler对象来实现。此方法的代码与插补的代码相同,除了使用缩放器而不是imputer!

        b) 降维

sklearn 带的 特征选择类,它可以自动为开发者降维。 api 文档在这里 here.       

随机森林(Random Forest), 

下面是知乎对随机森林降维的一些解释:

随机森林是一种广泛使用的特征选择算法,它会自动计算各个特征的重要性,所以无需单独编程。这有助于我们选择较小的特征子集。

随机森林的优点:

1、具有极高的准确率

2、随机性的引入,使得随机森林不容易过拟合

3、随机性的引入,使得随机森林有很好的抗噪声能力(能够更好的处理离群点)

4、能处理很高维度的数据,并且不用做特征选择

5、既能处理离散型数据,也能处理连续性数据,数据集无需规范化

6、训练速度快,可以得到变量重要性排序

7、容易实现并行化

随机森林的缺点:

1、当随机森林中的决策树个数很多时,训练需要的空间和时间会很大

2、随机森林的解释性很差

主成分分析(PCA),  

PCA降维的详细算法和范例在这个英文网站中,日后我们也会翻译这篇博客。

下面是知乎对PCA算法的阐述:

PCA是一种很常用的降维方法,他可以通过对高维数据进行降维减少预测变量的个数,同时经过降维除去噪声,其中最直接的应用就是压缩数据,主要应用于:信号处理中的降噪,数据降维后可视化等。

数据特点:

1. 维度灾难,简单来说就是变量的个数多,如果变量的个数增加,随之需要估计的参数的个数也在增加,在训练集保持不变得情况下待估参数的方差也会随机增加,导致参数估计的质量下降。

2. 变量关系不一般,是指变量彼此之间常常存在一定程度的,有时甚至是相当高的相关性,这说明数据是有冗余的,或者说观测数据中的信息是有重叠的,这是我们利用PCA的前提条件。

在变量个数多,相互的相关性比较大的时候,我们会去寻找变量中的‘精华’,寻找个数相对较少的综合变量。

引用一个别人的例子:比如拿到一个汽车的样本,里面既有以“千米/每小时”度量的最大速度特征,也有“英里/小时”的最大速度特征,显然这两个特征有一个多余。

我们也可以通过Person 参数降维,但Pearson关系系数不能用来捕捉非线性关系. 

降维方法还有很多,我们主要介绍这些方法。

        c) 过滤   

         我们需要了解一下卡尔曼滤波(kalman filter),知乎的这篇翻译文章解释得非常好。原文在这里。

3. 分析

4. 报告

5.  执行

6. Reference:

1. coursera California San Diego (加州大学圣地亚哥分校) 的课程 Machine Learning With Big Data

2. 机器学习生命周期详解,第一部分 ,文末有第二,第三部分链接

3. 浅析机器学习中的降维方法:知乎

4. Implementing a Principle Component Analysis (PCA) - in Python, step by step 

5. stackoverflow 的一个问题

6. datascience.stackexchange 的一个问题 

7. 什么是结构性数据?

8. 卡尔曼滤波解释,翻译

9. 卡尔曼滤波解释,英文原版

10. wikipedia 的Pearson 参数的解释

7. 其他

1. 本篇博客最近修改 2021年5月13日

你可能感兴趣的