<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <blockquote>
讯享网
🧑 博主简介:曾任某智慧城市类企业,目前在美国市场的物流公司从事一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:)
💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。
特征工程是一个关键环节,它涉及从原始数据中提炼出有益于机器学习模型建立的有价值特征。这一过程可能涵盖了多种操作,如筛选原始数据中的关键特征、对特征进行转换以使其更易于处理,或是构造全新的特征,从而增强模型的预测准确性。特征工程往往被视作机器学习模型构建的初步工作,因为它对模型的表现具有至关重要的影响,所使用的特征的质量直接决定了模型的性能。
1.特征工程是什么
特征工程是一个将原始数据转化为更能反映问题核心特征的过程,这样做能够显著提高预测模型在不可见数据上的预测准确性。简而言之,特征工程就是寻找那些对目标变量y具有显著影响的特征,我们通常称这些影响目标变量的因素为自变量x,即特征。特征工程的根本目标就在于发掘这些重要的特征。
分解和聚合原始数据,以更精准地表达问题的实质,这正是特征工程所要达成的目标。在数据挖掘模型的开发过程中,特征工程往往是最耗时但也是最为关键的一步。特征处理作为特征工程的核心组成部分,包含了数据预处理、Feature Extraction(特征提取)和Feature construction(特征构造)、特征选择、降维等多个环节。对于初次接触sklearn的人来说,尽管其丰富的算法模型库极具吸引力,但不可忽视的是,sklearn所提供的特征处理工具库同样强大而全面。
2 数据预处理
通过特征提取,我们可以获取到原始、未经处理的特征,但这些特征可能存在以下问题:首先,特征的度量单位可能不一致,使得它们难以直接进行比较,这一问题可以通过无量纲化来解决;其次,某些特征可能包含冗余信息,例如学习成绩,若我们仅关心及格与否,则需将具体的分数转化为二值化的表示;再者,定性特征通常无法直接用于机器学习算法中,因此我们需要将它们转化为定量特征,常见的方式是为每种定性值指定一个定量值,但这种方式灵活度过高,可能增加参数调整的工作量,而哑编码则是一种更为有效的转换方法,它将定性特征扩展为多个定量特征,根据原始特征值的不同而赋予不同的值;另外,数据中可能存在缺失值,需要进行适当的补充;最后,不同的机器学习算法对数据的利用方式各异,因此有时我们需要对特征进行转换或多项式化等操作,以提高信息利用率。幸运的是,我们可以利用sklearn中的preprocessing库来进行数据预处理,该库提供了上述问题的解决方案。
2.1.1 标准化
标准化是一种数据预处理技术,它要求计算特征的均值和标准差。标准化的数学公式表达为:
将每个特征值减去其均值,再除以其标准差。这一过程有助于将原始数据转化为均值为0、标准差为1的标准正态分布形式。在Python的sklearn库中,我们可以使用preprocessing模块的StandardScaler类来方便地实现数据的标准化处理。
讯享网
使用preproccessing库的Normalizer类对数据进行归一化的代码如下:
讯享网
讯享网
2.4 缺失值计算
IRIS数据集原本不包含任何缺失值,但为了演示如何处理缺失数据,我们可以人为地向数据集中新增一个样本,并为其4个特征都赋予NaN值,以此模拟数据缺失的情况。随后,我们可以利用sklearn库中的preprocessing模块中的Imputer类(注意:在较新版本的sklearn中,Imputer类已被IterativeImputer或SimpleImputer替代)来计算并填充这些缺失值。以下代码展示了如何使用此类对数据集中的缺失值进行处理。
3、特征构造
使用preproccessing库的PolynomialFeatures类对数据进行多项式转换的代码如下:
讯享网
基于单变元函数的数据变换可以使用一个统一的方式完成,使用preproccessing库的FunctionTransformer对数据进行对数函数转换的代码如下:
小波变换是一种时间-频率分析方法,通过伸缩平移运算对信号(函数)逐步进行多尺度细化,最终达到高频处时间细分,低频处频率细分,能自动适应时频信号分析的要求。在信号处理中,小波变换能够有效地提取出信号中的局部特征,如突变点、奇异点等,从而揭示信号的内在结构和规律。
傅里叶变换则是一种将信号从时间域转换到频率域的数学工具。通过傅里叶变换,我们可以将复杂的时域信号分解为一系列简单的正弦波或余弦波的组合,从而便于分析信号的频率成分和特性。在图像处理中,傅里叶变换常被用于图像滤波、图像压缩和特征提取等方面,能够显著提高图像处理的效率和准确性。后续将给出一些详细的代码
4.特征选择
当数据预处理工作完成后,选取具有意义的特征并将其输入到机器学习算法和模型中进行训练是至关重要的。在选择特征时,我们通常会从两个维度来考虑:
首先是特征是否具备发散性。如果一个特征的方差接近于0,意味着样本在该特征上几乎没有差异,这样的特征对于区分样本并无太大帮助。

其次,我们考虑特征与目标之间的相关性。显然,与目标高度相关的特征应当被优先选取。除了利用方差法外,本文还将介绍其他从相关性角度出发的特征选择方法。
根据特征选择的不同形式,我们可以将其分为三种主要方法:
- 过滤法(Filter),它基于特征的发散性或相关性对各个特征进行评分,然后设定一个阈值或选择特定数量的特征。
- 包装法(Wrapper),它依据目标函数(如预测效果的评分)来每次选择或排除一些特征。
- 集成法(Embedded),它首先利用某些机器学习的算法和模型进行训练,然后根据训练过程中得到的各特征权值系数,从大到小选择特征。这种方法类似于过滤法,但它是通过实际训练来确定特征的优劣。
为了简化特征选择的过程,我们可以利用sklearn中的feature_selection库来实现这些功能。
4.1 Filter
4.1.1 方差选择法
使用方差选择法时,首先需要计算数据集中每个特征的方差。接着,根据预设的阈值,我们可以筛选出那些方差大于该阈值的特征,因为这些特征在样本之间具有较大的变化,更有可能包含对模型训练有用的信息。为了简化这一操作过程,我们可以利用sklearn库中的feature_selection模块中的VarianceThreshold类来自动执行特征选择。通过调用这个类并设置合适的阈值,我们可以方便地从数据集中选出满足条件的特征,进而用于后续的机器学习模型训练。
讯享网
4.1.3 卡方检验
经典的卡方检验是一种用于检验定性自变量与定性因变量之间相关性的统计方法。当自变量具有N种不同的取值,同时因变量具有M种不同的取值时,卡方检验会考虑自变量取值为i且因变量取值为j的样本频数观察值与期望频数之间的差距。基于这些差距,卡方检验构建了一个统计量,用以量化自变量和因变量之间的关联程度。
不难发现,这个统计量的含义简而言之就是自变量对因变量的相关性。用feature_selection库的SelectKBest类结合卡方检验来选择特征的代码如下:
讯享网
4.1.4 互信息法
经典的互信息同样是一种衡量定性自变量与定性因变量之间相关性的方法。通过特定的计算公式,我们可以得到互信息的值,从而评估自变量和因变量之间的关联性。然而,当处理定量数据时,互信息可能并不适用。为了解决这个问题,提出了最大信息系数法,它能够有效地评估定量自变量与因变量之间的相关性。在sklearn的feature_selection库中,我们可以使用SelectKBest类并结合最大信息系数法来选择特征。通过这种方式,我们可以方便地选出与目标变量相关性最强的定量特征,为后续的机器学习模型训练提供有力的支持。
4.2 Wrapper
4.2.1 递归特征消除法
递归消除特征法是一种基于基模型进行多轮训练的特征选择方法。在每一轮的训练过程中,该方法会评估每个特征的权值系数,并据此消除若干权值系数较低的特征。随后,基于更新后的特征集,它会进行下一轮的训练。这个过程会反复进行,直到满足特定的停止条件。在sklearn的feature_selection库中,我们可以使用RFE类来实现这种递归消除特征法的特征选择过程。通过调用RFE类并指定基模型,我们可以方便地选出对模型性能贡献最大的特征,从而优化模型的表现。
讯享网
4.3 Embedded
4.3.1 基于惩罚项的特征选择法
使用带惩罚项的基模型进行特征选择时,不仅可以筛选出对模型性能贡献最大的特征,还能同时实现降维的效果。这是因为惩罚项能够使得模型在训练过程中倾向于选择较少的特征,从而避免过拟合并简化模型。在sklearn的feature_selection库中,我们可以使用SelectFromModel类与带L1惩罚项的逻辑回归模型相结合来实现这一目的。L1惩罚项能够使得逻辑回归模型的权重向量变得稀疏,即许多权重系数会变为零,从而自动筛选出重要的特征。
实际上,L1惩罚项降维的原理在于保留多个对目标值具有同等相关性的特征中的一个,所以没选到的特征不代表不重要。故,可结合L2惩罚项来优化。具体操作为:若一个特征在L1中的权值为1,选择在L2中权值差别不大且在L1中权值为0的特征构成同类集合,将这一集合中的特征平分L1中的权值,故需要构建一个新的逻辑回归模型:
讯享网
使用feature_selection库的SelectFromModel类结合带L1以及L2惩罚项的逻辑回归模型,来选择特征的代码如下:
4.3.2 基于树模型的特征选择法
梯度提升决策树(GBDT)作为一种强大的树模型,同样可以作为基模型用于特征选择。在sklearn的feature_selection库中,我们可以利用SelectFromModel类结合GBDT模型来进行特征选择。通过训练GBDT模型,我们可以得到每个特征的重要性评分,进而使用SelectFromModel类来筛选出对模型性能贡献显著的特征。这种方式不仅可以帮助我们理解数据中的关键特征,还能实现数据的降维,提高后续机器学习模型的效率和性能。
讯享网
5 降维
特征选择完成后,虽然可以开始训练模型,但实际操作中可能会遇到特征矩阵过于庞大导致的计算量大、训练时间长的问题。因此,降低特征矩阵的维度是一个关键的步骤。除了之前提到的利用带L1惩罚项的模型进行降维,还有两种常见的降维方法:主成分分析法(PCA)和线性判别分析(LDA)。LDA本身也是一个用于分类的模型。
PCA和LDA在原理上有很多相似点,它们都是将原始样本映射到维度更低的样本空间中。然而,它们的映射目标有所不同:PCA的目标是使映射后的样本具有最大的发散性,即保留数据中的主要变化方向;而LDA的目标则是使映射后的样本具有最好的分类性能,即最大化类间差异并最小化类内差异。因此,PCA被视为一种无监督的降维方法,因为它不需要利用样本的标签信息;而LDA则是一种有监督的降维方法,因为它在降维过程中充分利用了样本的类别信息。
讯享网
6、一个简单地例子
7、总结
特征工程是机器学习模型构建的初步工作,但它的重要性却贯穿整个模型生命周期。在进行特征工程时,我们需要充分利用数据科学的知识和技巧,结合具体的应用场景和业务需求,来制定出最合适的特征提取和转换策略。只有这样,我们才能为机器学习模型提供最有价值的输入,从而使其发挥出最大的潜力。
总之,特征工程是机器学习中的一项关键任务,它需要我们用心去探索、去实践、去创新。只有不断地优化和完善特征工程的过程,我们才能构建出更加准确、更加可靠的机器学习模型,为实际应用带来更大的价值。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/169080.html