机器学习之特征工程

特征工程是机器学习的关键步骤,包括特征提取、清洗、选择和降维。特征提取涉及数据的数值化表示,如词袋法、N-Gram和词嵌入。特征清洗涵盖缺失值处理、固定值移除、低方差特征剔除和数值化转换。特征选择通过过滤式、包裹式和嵌入式方法减少无关特征,提高模型效率。特征降维如PCA、LDA和流形学习有助于减少计算量和可视化。在数据不平衡场景下,可通过生成模型、聚类、采样和特定算法选择来改善模型性能。

1. 为什么做特征工程

       我们学习编程语言时被告知程序=数据结构+算法,那么对于机器学习,我认为也可以类比为机器学习=大数据+机器学习算法+运行平台。面对一个机器学习问题,一般有两种解题思路:传统机器学习算法或者深度学习算法。一般而言,传统机器学习需要的样本数量相对少、算法运行快、内存开销小、算法的运行和部署难度小,但困难是对数据的表示:特征工程,也可以形容为沙里淘金;而深度学习算法,可以让算法自己学习数据的特征表示,因此易上手但需要海量的数据样本、需要的计算资源和内存大、算法模型的调参难度大。

      就我个人的感觉,传统机器学习算法的运用需要仔细构建数据特征,数据和特征工程决定了算法容量的上限。深度学习的算法容量上限主要受限于数据的规模和计算能力,对人的要求比传统机器学习相对低一些,降低了机器学习问题解决的门槛。不幸的是,很多时候运用机器学习算法的问题领域数据受限或者计算资源受限,较为适宜于运用传统机器学习算法,此时做特征工程尤为重要。

2. 什么是特征工程

      特征工程就是挖掘对数据的特征表示,寻找表征数据内在特点的性质,将其用用特征向量的形式表示,这一步骤被称为特征提取。例如一条数据的特征向量是x=<x1,x2,..., xn>,即数据有n个特征,特征xi的取值是连续的实数或者描述型的整数。以文本分类为例,文本数据中所有的词就是文本的特征,一个文本中词出现的频率可以作为该文本的特征取值,这种方法在文本分类中被称为词袋法,寓意是文本是由词袋中抽取的一个个词构成的。

    数据被抽取特征生成特征向量后,我们获得了数据的内在特征表示,需要进一步对特征进行分析:对数据进行量纲上的统一、看看特征的内在相关性、特征是否对所要解决问题有用,数据特征能否进行直观的展示等。以上这些可以被归纳为特征工程的步骤包括:特征提取、特征清洗、特征选择、特征降维、数据特征可视化,下面一一介绍。

3. 怎么做特征工程

3.1 特征提取

    特征工程的第一步是特征提取,提取数据内在表征的性质,将其转换为数值表示的特征向量。假设有N个数据样本,每个数据样本提取M个特征,则数据集进行特征提取后得到N*M维度的特征向量。

    那么如何提取数据的特征呢?一种方法是通用型的方法,将数据进行某种散列式的处理,得到数据散列后的所有特征,然后进行数值化的表示,例如文本分类时对文本数据进行分词,将文本中出现的词作为文本的特征,然后将词在文本中的统计特征作为该词的数值化表示。另一种方法是根据数据要解决的问题,寻找对要解决该问题有针对性的特征,将其进行数值化。这要求机器学习的应用者对所要解决的问题的领域有很深的理解,具有较深的专家知识才能做到,一种取巧的方法是看该问题领域内的学术论文,让专家帮助咱们寻找特征,但这只能帮助帮助我们将机器学习模型调到不错的性能,机器学习算法性能的上界还是取决于我们自己对真正所要应用数据的特征挖掘。

    特征提取是用机器学习算法解决应用问题的基础,会占用了我们机器学习实施过程的大部分时间和精力,也没有系统性的通用方法,只能由我们不断迭代的优化提取。但在有些研究领域,也有一些指向性的方法,例如文本分类,提取文本数据特征的方法一般是将文本散列化,有两种较通用方法:1)词袋法,先将文本分词,然后将所有的词作为文本的特征;2)N-Gram语言模型,文本中的每个词只与其之前的N个词有关,我们按照N=2或3将文本散列成每2或3个字(对于中文是字,对于英文是字符)组成的字组,然后将所有的字组作为文本的特征。得到文本特征之后需要进行数值化,也有两类方法:a)一种是统计型数值方法,统计一个文本数据中每个特征词(或者字组)出现的词频、文档频、在文本不同类别中出现的次数,构成一个特征权重计算公式,计算特征词的权重作为数值化表示,例如TF-IDF; b)将词(或者字组)进行词嵌入表示,例如word2vec/gloVe,词嵌入能够表示词之间的语义相关性,是一种词的稠密表示,即将一个特征值数值化为一个K维的向量(k=50,100,200等)。据我个人的经验,如果文本数据样本较多,且每个文本数据的长度较大,直接用词袋法+统计型数值化方法即可;对于数据样本有限,且文本多为短文本时,用N-Gram+词嵌入方法可能更好。更一般的做法是,将以上方法进行两两组合,然后放到不同算法模型中迭代,寻找最优的组合。

3.2 特征清洗

    数据特征被提取后,需要对特征进行统计分析,然后做如下处理:

    3.2.1. 缺失值填充

    有些数据样本中的特征可能由于某些原因存在缺失值,对于缺失值存在三种处理方法:

         a) 如果某个特征的缺失值比较多:可能就直接舍弃。
       b) 如果缺失值不是很多,而且是连续特征:可以考虑用回归方法去拟合,或者直接用众数、中位数、平均数等具体的值去替代即可。

         c) 如果缺失值不是很多,而且是非连续特征:可以尝试把缺失值当做一个新的类目去处理,可能也揭示了一定的客观现实。

  Python的sklearn库也有缺失值处理的功能:

from numpy import vstack, array, nan
from sklearn.preprocessing import Imputer
#缺失值计算,返回值为计算缺失值后的数据
#参数missing_value为缺失值的表示形式,默认为NaN
#参数strategy为缺失值填充方式,默认为mean(均值)
Imputer().fit_transform(vstack((array([nan, nan, nan, nan]), iris.data)))

     3.2.2. 移除固定值的特征

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值