特征工程
- 特征工程的前提是有足够多的数据,其次是从大量数据中提取关键信息并表示为模型所需要的形式。
- 特征工程分为三部分:特征构建(这是特征交叉的一部分,属于特征提取),特征提取和特征选择。参考https://www.cnblogs.com/wxquare/p/5484636.html
特征提取
- 特征工程的第一步是理解业务数据和业务逻辑。
- 我们需要将此信息表示为数值类型,即为特征抽取的过程。
- 特征抽取则主要是从这些信息抽取出相关因素。
探索性数据分析
探索性数据分析(Exploratory Data Analysis, EDA) 是采用各种技术(大部分为可视化技术)在尽量少的先验假设条件下,探索数据内部结构和规律的一种数据分析方法或理念。
EDA的特点是从数据本身出发,不拘泥于传统的统计方法,强调数据可视化。EDA技术通常可分为两类。一类是可视化技术,如箱形图、直方图、多变量图、链图、帕累托图、散点图、茎叶图、平行坐标、让步比、多维尺度分析、目标投影追踪、主成分分析、多线性主成分分析、降维、非线性降维等;另一类是定量技术,如样本均值、方差、分位数、峰度、偏度等。
数值特征的经典处理方法包括:截断,二值化,分桶,缩放(标准化,对数变换等),缺失值处理(补值或直接忽略,直接扔给模型),特征交叉,非线性编码,行统计量作为特征(最大值,最小值,方差等)。
类别特征的处理方法包括:自然数编码(直接编号),独热编码(稀疏),分层编码,散列编码(解决独热编码的稀疏问题),计数编码(容易对异常值敏感,特征取值易冲突),计数排名编码(优化后的计数排名编码),目标编码(?),特征交叉等。
时间特征的处理方法包括:按类别特征进行处理,也可以不按。还有一些有关时间序列进行分析的特征。
空间特征的处理方法:按数值变量处理,进行散列得到类别特征,通过坐标得到街区,城市等。
文本特征的处理方法:将字符转化为小写、分词、去除无用字符、提取词根、拼写纠错、词干提取、标点符号编码、文档特征、实体插入和提取、Word2Vec 、文本相似性、去除停止词、去除稀有词、TF-IDF , LDA 、LSA等。
文本特征处理步骤:
- 语料构建
- 文本清洗。如果数据通过网页抓取,首先剔除文本中的HTML标记;停止词只用于语句的构建, 但不包含任何真实的信息,因此需要剔除;为了避免文本中的大小写差异,整个文本通常需要转换为小写形式; 统一编码;去除标点符号; 去除数字; 去除空格; 还原为词根。
- 分词。包括词性标注,词形还原和词干提取,文本统计特征,N-Gram模型(例如"the dog smelled like a skunk" ,得到3-Gram ( the dog smelled , dog smelled like , smelled like a, like a skunk ),3-Gram是常用的选择)。
- Skip-Gram模型。文档或句子转化为向量,方法包括:词集模型(向量的每个分量的取值为0和1 ,代表单同是否在文档中出现)、词袋模型(向量的每个分量的取值为单词在文档中的词频,为了避免向量的维度太大,通常会过滤掉在文档集合中词频很小的单词)、TF-IDF(用单词的重要程度表示,如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或短语具有很好的类别区分能力,在应用时一般要进行降维)。
- 余弦相似度(检索词与文档之间的相似度),jaccard相似度(文档与文档之间的相似度),Levenshtein ( 编辑距离) ,隐性语义分析(降维之后,再计算距离什么的更为可靠)。
- Word2Vec是最常用的一种单词嵌入,包含了单词的语义信息。
疑惑点解决记录:
- 数值特征分为离散型和连续型,处理之后的特征可以当成类别特征(例如分桶,但是只是可以)。
- 类别数据表示的量可以是人的性别、婚姻状况、家乡或者他们喜欢的电影类型等。类别数据的取值可以是数值类型(例如" 1 " 代表男性, "0" 代表女性),但是数值没有任何数学意义,它们不能进行数学运算。类别特征不仅可以由原始数据中直接提取, 也可以通过将数值特征离散化得到(也就是一般来说不可数)。
Tip:
- 对于线性模型,我们需要将类别变量进行独热编码等处理,对于复杂一些的模型如树模型,可以直接处理类别变量。对于更高级的深度神经网络,模型可以自动进行特征表示。
- 对于那些目标变量为输入特征的光滑函数的模型,如线性回归、逻辑回归等,其对输入特征的大小很敏感。因此,当使用光滑函数建模时,有必要对输入进行归一化(标准化)。而对于那些基于树的模型,例如随机森林、梯度提升树等,其对输入特征的大小不敏感,输入不需要进行归一化。
- 线性回归训练通常使用平方损失函数,其等价于假设预测误差服从高斯分布。因此,如果输出变量分布在不同尺度时,这个假设不再成立。
- 除了对特征进行变换以满足模型的假设,我们可以对特征进行交叉组合。特征交叉提升了模型的表达能力,让线性模型具有非线性模型的性质,而树模型天然有这种性质
- 平方根缩放或对数缩放,对数缩放对于处理长尾分且取值为正数的数值变量非常有效。
- 对于特征缺失,我们有两类处理方法。第一种是补一个值,例如最简单的方法是补一个均值;对于包含异常值的变量, 更加健壮一些的方法则是补一个中位数;除此之外还可以使用模型预测缺失值。另外一种则是直接忽略,即将缺失作为一种信息进行编码喂给模型让其进行学习,例如XGBoost模型可以处理缺失特征。
- 对于有些取值特别多的类别特征,使用独热编码得到的特征矩阵非常稀疏,因此在进行独热编码之前可以先对类别进行散列编码,这样可以避免特征矩阵过于稀疏。自然数编码和分层编码可以看作散列编码的特例。
特征选择
与特征提取是从原始数据中构造新的特征不同,特征选择是从这些特征集合中选出一个子集。去除冗余特征(比如跟某一有用的特征强相关)或无关的特征,移除这些特征并不会导致丢失信息。
特征选择一般包括产生过程、评价函数、停止准则、验证过程。为了进行特征选择,我们首先需要产生特征或特征子集候选集合,其次需要衡量特征或特征子集的重要性或者好坏程度,因此需要量化特征变量和目标变量之间的联系以及特征之间的相五联系。为了避免过拟合,我们一般采用交叉验证的方式来评估特征的好坏;为了减少计算复杂度,我们可能还需要设定一个阈值,当评价函数值达到阔值后搜索停止; 最后,我们需要再验证数据集上验证选出来的特征子集的有效性。
好处:简化模型,使模型更易于研究人员和用户理解。改善性能(特征选择的另一个作用是节省存储和计算开销),改善通用性、降低过拟合风险(特征的增多会大大增加模型的搜索空间,大多数模型所需要的训练样本数目随着特征数量的增加而显著增加,特征的增加虽然能更好地拟合训练数据,但也可能增加方差)。
过滤方法
单变量过滤方法,计算效率高、不易过拟合。由于单变量过滤方法只考虑单特征变量和目标变量的相关性,过滤方法可能选出冗余的特征,所以单变量过滤方法主要用于预处理。多变量过滤方法。常用多变量过滤方法有基于相关性和一致性的特征选择。
- 覆盖率(特征在训练集中出现的次数,排序,剔除)。
- 皮尔森相关系数(线性相关性)。(可以用在预处理中)
- Fisher得分(Fisher得分越高,特征在不同类别之间的差异性越大、在同一类别中的差异性越小,则特征越重要)。
- 假设检验(对类别特征和连续label,可以使用方差分析,对于连续特征和连续变量都为连续值的话,可以使用皮尔森卡方检验)。
- 互信息。互信息越大表明两个变量相关性越高(两个随机分布之间的距离越大,两个特征越不可能独立)。
封装方法
由于过滤方法与具体的机器学习算法相互独立,因此过滤方法没有考虑选择的特征集合在具体机器学习算法上的效果。与过滤方法不同,封装方法直接使用机器学习算法评估特征子集的效果,它可以检测出两个或者多个特征之间的交互关系,而且选择的特征子集让模型的效果达到最优。
封装方法是特征子集搜索和评估指标(通过机器学习指标进行评估)相结合的方法,前者提供候选的新特征子集,后者则基于新特征子集训练一个模型,并用验证集进行评估,为每一组特征子集进行打分。特征子集搜索方法包括完全搜索、启发式搜索、随机搜索等。
嵌入方法
嵌入方法则将特征选择嵌入到模型的构建过程中,具有封装方法与机器学习算法相结合的优点,而且具有过滤方法计算效率高的优点。嵌入方法是实际应用中最常用的方法。
在线性回归模型中,通常在模型中加入两种不同的正则化项:
- 加上所有参数(不包括θ0)的绝对值之和,即l1范数,此时叫做Lasso回归;
- 加上所有参数(不包括θ0)的平方和,即l2范数,此时叫做岭回归.Lasso能够将一些作用比较小的特征的参数训练为0,从而获得稀疏解。也就是说用这种方法,在训练模型的过程中实现了降维(特征筛选)的目的。
Lasso回归就是经典的嵌入方法案例。
另外一类嵌入方法是基于树模型的特征选择方法。在决策树中,深度较浅的节点一般对应的特征分类能力更强(可以将更多的样本区分开)。对于基于决策树的算法,如随机森林,重要的特征更有可能出现在深度较浅的节点,而且出现的次数可能越多。因此,可以基于树模型中特征出现次数等指标对特征进行重要性排序。
工具推荐
针对过滤方法,若数据量较小,可以使用Skleam里面的feature selection模块;若数据量较大,可以使用SparkMLlib 。针对嵌入方法,一般机器学习包的线性模型都支持L1正则,如SparkMLlib和Skleam等。除此之外,在实际应用中比较常用的特征选择方法还有基于树模型的算法包,如ISkleam中的随机森林以及目前在工业界广泛使用的XGBoost ,它们都支持根据不同指标(如增益或者分裂次数等)对特征进行排序。针对XGBoost模型, Xgbfi提供了多种指标对特征以及特征组合进行排序。