机器学习—特征工程

此博客只为记录自身学习,参考《百面机器学习》
对于一个机器学习问题,数据和特征往往决定了结果的上限,而模型和算法的选择及优化则是在逐步接近这个上限。

特征归一化

为了避免不同特征之间量纲的影响,我们需要对特征进行归一化处理。对于不同的特征而言,其量纲的变化范围是不同的,有的特征数量级很大,因此不同样本之间的特征差异也很大,但是有的样本可能数量级很小,那么对与这类样本的特征差异也很小。如果不做归一化处理,那么机器学习算法会认为数量级较大的特征更重要,而数量级较小的特征却不重要。但是,这合理吗???因此,我们需要将不同的特征分别映射到相同的取值范围(通常为(0,1)),根据他们在相同范围内的变化情况来决定特征的重要程度。

归一化通常由两种方法:

  1. 尺度缩放(线性函数归一化):
    . 在这里插入图片描述
  2. 零均值归一化:
    在这里插入图片描述
    当然,数据特征归一化并不适用于所有机器学习方法,比如决策树模型。

类别型特征

类别型特征主要指的是具有有限个取值的特征,比如:性别,血型等。除了决策树模型外,一般机器学习方法都不可以直接处理这类特征。对于这类特征,往往我们需要对其进行编码,通常,编码的方式包括:

  1. 序号编码
  2. 独热编码(one-hot encoding)
  3. 二进制编码

序号编码主要用于处理带有大小关系的特征
独热编码是一种稀疏向量编码,每个向量只有一个1,其他都为0,因此大大节约了空间。
二进制编码是将类别编码以二进制数的方式进行编码,通常向量维度要小于独热编码

组合特征

为了提高复杂关系的拟合能力,往往我们需要将特征组合起来作为一种新的特征,组合特征会使特征的数量大幅增多。例如:
在这里插入图片描述
在这里插入图片描述
可以看到,组合特征的个数是每个特征取值种类个数的乘积,但是对于一些复杂的情况,这个特征维度太高不便于机器学习算法进行学习,因此,需要对特征进行降维处理。

文本表示模型

词袋模型

词袋模型分为两种,一种是CounterVector,另一种是TF-IDFVector。CounterVector是根据词频来生成的一种词向量模型。对于一句话而言,它会生成一个词向量并且词向量的长度等于当前不重复词的个数,而词向量中的元素则是这个词在文本中出现的频数。

TF-IDFVector模型相比CounterVector更能体现词向量对一些敏感词的重要程度。对于一篇文章而言,通过TF-IDF检测其关键词分数,然后将检测分数替换CounterVector中的频数即可。TF-IDF分数公式如下:
在这里插入图片描述
在这里插入图片描述
直观的解释是,如果一个单词在非常多的文章里面都出现,那么它可能是一个比较通用的词汇,对于区分某篇文章特殊语义的贡献较小,因此对权重做一定惩罚。

词嵌入模型与深度学习

由于词嵌入将每个词映射成一个K维的向量,如果一篇文档有N个词,就可以用一个N×K维的矩阵(深度学习中的embeding layer)来表示这篇文档,但是这样的表示过于底层。在实际应用中,如果仅仅把这个矩阵作为原文本的表示特征输入到机器学习模型中,通常很难得到令人满意的结果。因此,还需要在此基础之上加工出更高层的特征。在传统的浅层机器学习模型中,一个好的特征工程往往可以带来算法效果的显著提升。而深度学习模型正好为我们提供了一种自动地进行特征工程的方式,模型中的每个隐层都可以认为对应着不同抽象层次的特征。从这个角度来讲,深度学习模型能够打败浅层模型也就顺理成章了。卷积神经网络和循环神经网络的结构在文本表示中取得了很好的效果,主要是由于它们能够更好地对文本进行建模,抽取出一些高层的语义特征。与全连接的网络结构相比,卷积神经网络和循环神经网络一方面很好地抓住了文本的特性,另一方面又减少了网络中待学习的参数,提高了训练速度,并且降低了过拟合的风险。

Word2Vec

2013年Google提出的一款非常NB的词向量模型。它有神经网络训练而来的,有点类似于auto-encoding,它具有两种网络结构,分别是CBOW(continues bag of word)和Skip-gram。
在这里插入图片描述
Word2Vec的网络层分别为输入层,映射层,输出层。输入层接受的是每个词的索引,并由索引生成one-hot encoding,然后将one-hot向量通过映射层,这里要注意,传统的神经网络词向量模型是采用N*K权重矩阵加激活函数将one-hot向量映射到一个稠密K维向量上,然后通过输出层映射为N维词向量,并使用softmax分类器得到我们想要预测的结果。但是这个方法的缺点在于映射层(隐藏层)到输出层softmax的参数和计算量过大,导致模型复杂度较高。因此,提出了Hierarchical softmax模型,该模型将隐藏层的激活函数去掉,只做线性映射,然后将所得的所有K维词向量相加取平均得到一个K维词向量,输出层改为由霍夫曼树组成的二叉树分类器,使得我们的计算量由n(语料库大小)变为log2(n),并且将词频较高的词作为靠近根节点的词分类器,这样我们就可以更快的将词向量做出正确的分类。但是Hierarchical softmax模型仍然没有完全解决数以前几的多分类问题,因此,又提出了Negnative Sampling模型,该模型通过使用负采样的方式将负样本和正样本同时作为输入,然后只需要做一个二分类就可以了,这大大减少了多分类带来的复杂计算量。

图像数据不足的处理方法

由于图像数据的不足,再模型训练过程中会带来过拟合等问题,因此,我们需要采取一些措施防止模型训练过拟合。模型过拟合的解决方法可以归结于两种途径:一种是基于模型的方法,包括模型简化,模型剪枝,集成学习,对损失函数添加正则项,引入Dropout等:二是基于数据的方法,包括图像数据增强,SMOTE上采样,GAN生成图像等。此外,还可以引入迁移学习和fine-turn策略,用人家已经调试好的模型和参数并在其进行训练微调,这是一种防止过拟合非常有效的方式,因为人家的数据集比你大得多!!!

今天就到这里,再见咯。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
特工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。它包括特征抽取、特征预处理和特征降维等内容。特征工程对于机器学习的效果具有直接影响。 在Python中进行机器学习特征工程,可以使用多个库和工具来完成。下面是一些常用的Python库和工具: 1. Scikit-learn:Scikit-learn是一个功能丰富的机器学习库,提供了许多特征工程的方法,包括特征抽取、特征预处理和特征降维等。你可以使用Scikit-learn来进行特征选择、标准化、缺失值处理等操作。 2. Pandas:Pandas是一个用于数据分析和处理的库,提供了丰富的数据操作功能。你可以使用Pandas来加载和清洗数据,进行数据预处理和特征选择。 3. Numpy:Numpy是Python中一个强大的数值计算库,提供了高效的数组操作功能。你可以使用Numpy来进行数值特征的处理,如归一化、标准化和缩放等。 4. Featuretools:Featuretools是一个用于自动特征工程的库,它可以根据数据的结构和关系自动生成特征。你可以使用Featuretools来创建新的特征,通过组合和聚合现有特征。 5. Feature-Engine:Feature-Engine是一个专注于特征工程的库,提供了多个特征处理方法。你可以使用Feature-Engine来处理缺失值、离群值、编码分类变量等。 在进行机器学习特征工程时,你需要根据具体的问题和数据集选择适合的方法和工具。通过合理的特征工程处理,可以提高机器学习模型的性能和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI不错哟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值