机器学习中的特征工程

一、特征工程

特征:从原始数据中抽取出对结果预测更有用或表达更充分的的信息

特征工程:使用专业的背景知识和技巧处理数据,使得特征能在机器学习算法上发生更好的作用的过程

特征工程的意义:更好的特征意味着更强的灵活性+只需简单模型+更好的结果

“数据决定了机器学习的上限,而算法只是尽可能逼近这个上限”,这里的数据指的就是经过特征工程得到的数据。

特征工程在机器学习中占有非常重要的作用,一般认为包括特征构建、特征提取、特征选择三个部分。

实际工程中不能只追求很复杂的模型,工业中最喜欢的是简单的模型,因为简单的模型可控度很高,意味着线上的复杂度很小,也意味着出现问题的时候可以第一时间去找到根源从而解决,也就是模型的透明度很高,可解释性好,复杂的网络很难处理。

所以,如果我们能够对某个场景挖掘的很充分,之后送入相对简单/不复杂的模型中,让模型去解决问题。

数据驱动=开发技能+理论技能+特征工程(和场景相关)

深度学习火的根本原因:

有些场景中的机器学习没法做到很好的原因是我们没有给他提供一个很有用的数据的表达,比如将图像数据变为向量传递给机器学习的模型,就会损失掉很多结构信息,表达不充分,无法使得计算机从中学到有用的信息。

所以,并不是机器学习的算法有问题,而是说深度学习的模式本身就适合做一个表达学习,对于很抽象的数据,例如图像,深度学习能够直接从原始输入像素表达上学习到很有用的特征表达(end-to-end)。

所以深度学习因为有了很深层很有用的特征表达,从而达到了一个很好的效果。

二、数据与特征处理

2.1 数据采集


2.2 数据格式化


2.3 数据清洗



2.4 数据采样


2.5 特征处理


不同类型特征的处理方式:

1、数值型




2、统计型

基于统计信息得到的特征,可以通过离散化并确定阈值的方法来得到预测结果。

年龄是连续的,我们要求解根据年龄判断是否需要给目标人让座,比如小孩60岁让座。

可以利用sigmoid函数来求解,可以给60岁的老人一个正的权值,其他人权值为0。

3、类别型


① one-hot编码就是哑变量编码

为什么要用one-hot(0,0,1,0),而不用数字1,2,3,4呢?

假如我们队四个变量分别编码为1,2,3,4,则相当于不同种类的样本的权重不同了,w如果大于0,则编码为4的特征出现的概率会变得很高,如果w小于0,编码为1的特征出现的概率会变得很高,所以我们应该让不同的特征出现的概率是等价的,所以选择可以正交的one-hot编码。

比如颜色编码:


② Hash技巧


只要是出现的词,下面都会出现1,上面的编码太稀疏,下面的编码是在有词表的情况下,统计三个文档(doc1,doc2,doc3)落在不同类型的词表(财经bucket1、体育bucket2、政治bucket3等)当中的词有多少个,从而体现当前文本内容分布的倾向性。

可以将词块用哈希函数来确定它在特征向量的索引位置,可以不创建词典,这称为哈希技巧(hashing trick)。

哈希技巧是无固定状态的(stateless),它把任意的数据块映射到固定数目的位置,并且保证相同的输入一定产生相同的输出,不同的输入尽可能产生不同的输出。

4、时间型


5、文本型

① 词袋模型(Bag of words)

词集模型:单词构成的集合,集合自然每个元素都只有一个,也即词集中的每个单词都只有一个。

词袋模型:假定对于一个文本,忽略其词序和语法,句法,将其仅仅看做是一个词集合,或者说是词的一个组合,文本中每个词的出现都是独立的,统计其出现的次数。

词袋是在词集的基础上增加了频率的维度,词集只关注有和没有,词袋还要关注有几个。


李雷喜欢韩梅梅(韩梅梅喜欢李雷),词完全一样,但顺序改变意思就完全变化了。

词袋模型特点:是一个0多1少的稀疏矩阵,并且丢失了文本的顺序信息

词袋模型改进:将词袋中的词扩展到二元(2-gram)
李雷/雷喜/喜欢/欢韩/
可以将语序捕捉到

② TF-IDF模型

TF-IDF是一种统计方法,用以评估一个词对一个文件集或一个语料库中的一份文件的重要程度,字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

TF-IDF=TF * IDF

TF:Term Frequency——某个词在该文件中出现的频率


IDF:逆序文档频度(inverse document frequency)


也就是IDF是一个以(总文档数量/包含t的文档数量)为自变量的ln函数,lb函数是单调增函数,且”总文档数量/包含t的文档数量>1”,故ln函数是一个大于0且单调增的函数,也就是包含t文档的数量越少,IDF值越大。

如果词条t在当前文档出现次数多,且包含词条t的文档越少,也就是在语料库中出现的次数越少,则IDF值越大,说明词条越重要,具有很好的类别区分能力。

③ Word2vec模型(词向量word embeddings)

作用就是将自然语言中的字词转为计算机可以理解的稠密向量(Dense Vector)。在word2vec出现之前,自然语言处理经常把字词转为离散的单独的符号,也就是One-Hot Encoder。


在语料库中,杭州、上海、宁波、北京各对应一个向量,向量中只有一个值为1,其余都为0。但是使用One-Hot Encoder有以下问题。一方面,城市编码是随机的,向量之间相互独立,看不出城市之间可能存在的关联关系。其次,向量维度的大小取决于语料库中字词的多少。如果将世界所有城市名称对应的向量合为一个矩阵的话,那这个矩阵过于稀疏,并且会造成维度灾难。

word2vec可以将独热码转化为低维度的连续值,也就是稠密向量,并且其中意思相近的词将被映射到向量空间中相近的位置。


华盛顿和纽约聚集在一起,北京上海聚集在一起,且北京到上海的距离与华盛顿到纽约的距离相近。也就是说模型学习到了城市的地理位置,也学习到了城市地位的关系。

word2vec模型解释:

该模型实际上是一个具有隐含层的神经网络,输入是one-hot编码的词汇向量表,隐含层没有激活函数,也就是线性单元,输出层维度和输入层维度相同,使用Softmax回归,我们要获取的稠密向量其实就是隐藏层的输出单元。


假如我们利用一个2x6的one-hot向量作为输入,中间层节点数为3,这就相当于分别提取出了权值矩阵中的第一行和第二行,这就和所谓的字向量的查表的意义是一样的,这就是所谓的Embedding层,该层就是以one-hot为输入,中间层节点为字向量维数的全连接层,而这个全连接层的参数,就是一个“字向量表”

严格来讲,神经网络都是有监督的,而Word2Vec之类的模型,准确来说应该是“自监督”的,它事实上训练了一个语言模型,通过语言模型来获取词向量。所谓语言模型,就是通过前n 个字预测下一个字的概率,就是一个多分类器而已,我们输入one hot,然后连接一个全连接层,然后再连接若干个层,最后接一个softmax分类器,就可以得到语言模型了,然后将大批量文本输入训练就行了,最后得到第一个全连接层的参数,就是字、词向量表,当然,Word2Vec还做了大量的简化,但是那都是在语言模型本身做的简化,它的第一层还是全连接层,全连接层的参数就是字、词向量表。

当然,由于标签数据一般不会很多,因此这样容易过拟合,因此一般先用大规模语料无监督训练字、词向量,降低过拟合风险。注意,降低过拟合风险的原因是可以使用无标签语料预训练词向量出来(无标签语料可以很大,语料足够大就不会有过拟合风险),跟词向量无关,词向量就是一层待训练参数,有什么本事降低过拟合风险?

word2vec的两种预测模型:

1、CBOW:主要用来从原始语句推测目标词汇
2、skip-gram:从目标词汇推测原始语境


Word2Vec的思想和自编码器很相似。具体来说,我们用机器学习的方法训练神经网络,但是最终我们关心的不是使用这个神经网络计算输出结果,我们想要得到的是神经网络隐藏层的参数,这个权重矩阵就是我们需要的词向量Word vector。换句话说,建模并不是我们的根本目的。

6、特征处理的统计特征:


7、特征处理之组合特征:


三、特征选择

为什么要进行特征降维:
  •   冗余:部分特征相关度太高,消耗计算性能
  •   噪声:部分特征对结果有负影响

特征选择和降维的不同:
  •   特征选择只是去除掉和结果不太相关的数据
  •   降维是做特征的计算组合成新特征

特征选择的方式:

1. 过滤型


利用Person相关系数/互信息/距离相关度,评估单个特征和结果之间的相关程度,排序留下TopK的相关特征。
缺点:没有考虑到特征间的关联作用,可能把有用的信息误踢掉

2. 包裹型


3. 嵌入型


在嵌入式特征选择中,特征选择算法本身作为组成部分嵌入到学习算法里。最典型的即决策树算法,如ID3、C4.5以及CART算法等,决策树算法在树增长过程的每个递归步都必须选择一个特征,将样本集划分成较小的子集,选择特征的依据通常是划分后子节点的纯度,划分后子节点越纯,则说明划分效果越好,可见决策树生成的过程也就是特征选择的过程。

版权声明:本文为CSDN博主「呆呆的猫」的原创文章,
遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jiaoyangwm/article/details/81180343

最新文章