背景:
近年来机器学习的热度不断升高,前端领域也在不断布局,从大的研究方向来看,有前端智能化、端智能;从框架这个角度来看,也有很多js版的框架,例如TensorFlow.js、Ml.js、Brain.js等。虽然当前来看其在前端落地的应用还不是很多,但是把握趋势就是把握未来。本文将通过上下两篇来对机器学习的内容进行阐述,这是第一篇,主要介绍一些基础知识和特征工程;后续推出的一批主要利用阐述机器学习中的监督学习算法和非监督学习算法。
一、基础
1.1 定义
机器学习是从数据中自动分析获得模型,并利用模型对未知数据进行预测。
1.2 算法分类
机器学习的前提是数据,根据数据中是否有目标可以划分为:监督学习算法和无监督学习算法。
- 监督学习算法——输入数据是由输入特征值和目标值所组成。
- 无监督学习算法——输入数据是由输入特征值和目标值所组成
1.3 如何选择合适算法
机器学习有这么多算法,面对一个问题时应该如何选择合适的算法成为了不可避免的问题,下面就来叙述两条选择合适算法的黄金法则。
1.确定使用机器学习算法的目的。
- 将数据划分为离散的组是唯一需求——聚类算法
- 除将数据划分为离散的组,还需要估计数据与每个组的相似度——密度估计算法
- 目标变量为离散型——分类算法
- 目标变量为连续型——回归算法
- 若想要预测目标变量的值——监督学习算法
- 若无目标变量值——无监督学习
2.需要分析或收集的数据是什么,了解其数据特征
- 特征值是离散型变量还是连续型变量
- 特征值中是否存在缺失的值
- 何种原因造成缺失值
- 数据中是否存在异常值
- 某个特征发生的频率如何
- ……
1.4 整体流程
不管多么复杂的内容经过前人的总结最会有一套方法论供我们这样的小白使用,下面就来阐述一下机器学习通用的流程。
获取数据
获取数据是机器学习的第一步,例如使用公开的数据源、爬虫获取数据源、日志中获取数据、商业数据等。
数据处理
得到数据后并不一定符合使用需求,所以需要进行数据清洗、数据填充、数据格式转换,达到减小训练的数据量,加快算法的训练时间的目的。
特征工程
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程,直接影响机器学习的效果,主要包含特征提取、特征预处理、特征降维。
算法训练
将处理之后的数据输入到合适的算法进行训练。
模型评估
使用测试集来评估模型的性能.模型性能指标有很多,比如在分类模型中常用的有错误率,精准率,召回率,F1指标,ROC等。
应用
将机器学习算法转换为应用程序执行实际任务,从而检验该算法是否可以在实际工作中正常使用。
二、特征工程
业界流传着一句话 “数据决定了机器学习的上限,而算法只是尽可能逼近这个上限”,这里的数据指的就是经过特征工程处理后的数据。特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程,可见特征工程在机器学习中的重要地位。对于特征工程主要分为三步:特征抽取、特征预处理、特征降维。
注:特征工程是一个很深的学科,此处不展开阐述。
2.1 特征提取
特征提取指的就是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,常用的主要包含:字典特征提取、文本特征提取、图像特征提取。
2.2 特征预处理
通过特征提取,能得到未经处理的特征,该特征具有以下问题:
量纲不同:特征可能具有量纲,导致其特征的规格不一样,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征,需要进行无量纲化处理。
信息冗余:对于某些定量特征,其包含的有效信息为区间划分,需要进行二值化处理。
定性特征不能直接使用:某些机器学习算法和模型只接受定量特征的输入,则需要将定性特征转换为定量特征,可通过哑编码实现。
2.2.1 无量纲化
无量纲化使不同规格的数据转换到同一规则,常用方法有归一化和标准化
1.归一化
- 定义
对原始数据进行线性变换,使得结果映射到[0,1]之间。
- 计算公式
- 特点
最大最小值容易受到异常点影响,稳定性较差。
2.标准化
- 定义
将原始数据进行变换到均值为0、标准差为1的范围内
- 计算公式
- 特点
较少的异常点对结果影响不大,稳定性较好。
2.2.2 定量特征二值化
对于定量特征可进行二值化,通过选取一个合适的阈值,大于某阈值的为1,小余等于某阈值的为0。
2.2.3 定性特征哑编码
大部分算法对于定性特征无法训练模型,利用哑编码(one-hot)可以将定性特征处理为定量特征用于模型训练,其基本思想是:将离散特征的每一种值看成一种状态,若该特征有N个值,则存在N种状态,例如女孩子的头发按照辫子的多少可以划分为:无辫子、一个辫子、两个辫子、多个辫子,则该特征有4种状态,利用哑编码可以表示为:
- 无辫子 ====》[1, 0, 0, 0]
- 一个辫子 ====》[0, 1, 0, 0]
- 两个辫子 ====》[0, 0, 1, 0]
- 多个辫子 ====》[0, 0, 0, 1]
2.3 特征降维
在机器学习中对维度较高的数据进行处理时会极大消耗系统资源,甚至产生维度灾难。在某些限定条件下,通过降维的方式可降低随机变量的个数,用一个低维度向量来表示原始高维度的特征。常用的降维的方式有:特征选择、PCA、LDA等。
2.3.1 特征选择
数据预处理完毕之后需要选择有意义的特征进行训练,特征选择从以下两方面考虑:
特征是否发散:若某特征不发散(例如方差接近为0),则认为该特征无差异。
特征与目标的相关性:优先选择与目标相关性较高的特征。
常用的特征选择方式有:Filter(过滤法)、Wrapper(包装法)、Embedded(集成法)。
2.3.1.1 Filter(过滤法)
先进行特征选择,然后去训练学习器,其特征选择的过程与学习器无关。其主要思想是给每一维的特征赋予权重,权重代表该特征的重要性,然后设定阈值或者待选择阈值的个数选择特征。常用方法有方差选择法(低方差特征过滤)、相关系数法等。
一、低方差特征过滤
方差指的是各变量值与其均值离差平方的平均数,是测算数值型数据离散程度的重要方法,方差越大则表征数据的离散程度越大,反之越小。对于数据中的特征值,方差小则表示特征大多样本的值比较相近;方差大则表示特征很多样本的值都有差别。低方差特征过滤正是基于该思想,通过设定方差阈值来去掉小于该阈值的特征。方差计算公式如下:
二、相关系数法
皮尔逊相关系数(r)定义为两个变量之间的协方差和标准差的商,是反映变量之间相关关系密切程度的统计指标,其值r范围为[-1, 1],含义为:
- 当r > 0时表示两变量正相关
- r < 0时,两变量为负相关
- 当|r|=1时,表示两变量为完全相关
- 当r=0时,表示两变量间无相关关系
- 当0<|r|<1时,表示两变量存在一定程度的相关。且|r|越接近1,两变量间线性关系越密切;|r|越接近于0,表示两变量的线性相关越弱
2.3.1.2 Wrapper(包装法)
把要使用的分类器作为特征选择的评价函数,对于特定的分类器选择最优的特征子集。其主要思想是将子集的选择看作是一个搜索寻优问题,生成不同的组合,对组合进行评价,再与其它的组合进行比较。常用方法有递归特征消除法。
- 递归特征消除的主要思想是反复的构建模型(如SVM或者回归模型)然后选出最好的(或者最差的)的特征(可以根据系数来选),把选出来的特征选择出来,然后在剩余的特征上重复这个过程,直到所有特征都遍历了。这个过程中特征被消除的次序就是特征的排序。因此,这是一种寻找最优特征子集的贪心算法。
2.3.1.3 Embedded(集成法)
将特征选择嵌入到模型训练当中。其主要思想是通过使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。常用方法有:基于惩罚项的特征选择法(L1、L2)、决策树的特征选择法(信息熵、信息增益)。
注:该方法与算法强相关,所以在算法实现的时候进行阐述。
2.3.2 PCA(主成分分析法)
主成分分析(Principal components analysis,PCA)是一种分析、简化数据集的技术。主成分分析经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征(旨在找到数据中的主成分,并利用这些主成分表征原始数据,从而达到降维的目的)。这是通过保留低阶主成分,忽略高阶主成分做到的。
一、 优缺点
1.优点:
- 降低数据的复杂性,识别最重要的多个特征
- 仅需方差衡量信息量,不受数据集以外的因素影响
- 各主成分之间正交,可消除原始数据成分间的相互影响的因素
- 计算方法简单,主要运算式特征值分解,易于实现
2.缺点:
可能损失有用信息(由于没有考虑数据标签,容易将不同类别数据完全混合在一起,很难区分)
- 二适用数据类型——数值型数据
2.3.3 LDA(线性判别分析法)
LDA是一种监督学习的降维技术,它的数据集的每个样本是有类别输出的。PCA与此不同,PCA是不考虑样本类别输出的无监督降维技术。LDA的思想是“最大化类间距离和最小化类内距离”(将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大)
1.优点:
- 在降维过程中可以使用类别的先验知识经验
- LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优
2.缺点:
- LDA不适合对非高斯分布(非正态分布)样本进行降维
- LDA降维后可降为[1, 2,……,k-1]维,其中k为类别数
- LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好
- LDA可能过度拟合数据
参考文献
- 特征工程到底是什么
- LDA和PCA降维
- 机器学习实战
本文转载自微信公众号「执鸢者」,可以通过以下二维码关注。转载本文请联系执鸢者公众号。