跳转到主要内容

特征基础编码方法

demi 提交于

<a href=""><font color="#9a9a9a">来源:Coggle数据科学</font></a>

<hr>

在之前的文章中我们讲解了<a href="https://imgtec.eetrend.com/blog/2024/100585548.html"><font color="#3a6694">特征工程的实操的范式</font></a>,但有读者留言说文章太过深奥。小编想表达的是特征工程有很多种方式,特征范式是创建特征的方法。

本文将介绍的更加基础,包括基础的特征编码方法,建议与之前的文章结合一起阅读。

<hr>

<font size="4" style="line-height: 45px;" color="#c200ff"><strong>缺失值填充</strong></font>

缺失值是数据分析中常见的问题,指的是数据集中某些变量的取值缺失或未知。缺失值可能由于多种原因产生,包括数据收集过程中的错误、设备故障、被调查者拒绝提供信息等。

处理缺失值的主要目标是尽量保留数据的完整性和可用性,同时不引入过多的偏差。常见的填充逻辑包括:

<style type="text/css">
.ko th{padding:5px;}
.ko td{padding:5px;}
</style>
<table border="1" class="ko" width="100%">
<tr><th>方法</th><th>数值变量</th><th>分类变量</th></tr>
<tr><td>用均值或中位数替换缺失值</td><td>√</td><td>×</td></tr>
<tr><td>用指定的任意数值替换缺失值</td><td>√</td><td>×</td></tr>
<tr><td>用分布的尾部值替换缺失值</td><td>√</td><td>×</td></tr>
<tr><td>用最频繁的类别值或指定的任意类别值替换缺失值</td><td>√</td><td>√</td></tr>
<tr><td>从变量中随机抽取值替换缺失值</td><td>√</td><td>√</td></tr>
<tr><td>添加一个二元变量来指示缺失值</td><td>√</td><td>√</td></tr>
<tr><td>删除数据集中包含缺失值的观测</td><td>√</td><td>√</td></tr>
</table><br>

不是所有模型都能处理缺失值,但有些模型能够在训练过程中直接处理缺失值,包括:

<ul><li>决策树模型(如随机森林、梯度提升树):这些模型可以自然地处理缺失值,因为它们在决策过程中只需考虑已知特征的信息。</li></ul>

<ul><li>K近邻算法:K近邻算法的基本原理是根据数据点的相似性进行预测,对于含有缺失值的数据,K近邻算法能够利用其他特征值相似的样本进行预测。</li></ul>

<ul><li>神经网络模型:神经网络模型可以通过适当的数据处理和网络架构设计来处理缺失值,例如使用特殊的填充层或者在训练过程中对缺失值进行处理。</li></ul>

<hr>

<font size="4" style="line-height: 45px;" color="#c200ff"><strong>类别编码</strong></font>

类别编码是将分类变量转换为模型可接受的数值形式的过程,以便机器学习算法能够有效地处理它们。在进行类别编码之前,首先需要识别数据中的分类变量类型,然后选择合适的编码方法进行转换。需要注意的是,不同的类别编码方法可能会重复信息,甚至可能导致维度爆炸,因此选择合适的编码方法至关重要。

在识别类别类型时,主要有两种情况:

<ul><li>名义型(Nominal)变量:名义型变量是没有顺序或等级关系的分类变量,例如颜色、城市等。对于名义型变量,通常使用独热编码(One-Hot Encoding)等方法进行转换。</li></ul>

<ul><li>有序型(Ordinal)变量:有序型变量是具有顺序或等级关系的分类变量,例如教育程度(小学、初中、高中等)。对于有序型变量,可以使用序数编码(Ordinal Encoding)等方法进行转换。</li></ul>

<table border="1" class="ko" width="100%">
<tr><th>方法</th><th>单调编码</th><th>适用回归</th><th>适用二元分类</th><th>适用多类分类</th><th>描述</th></tr>
<tr><td>OneHotEncoder</td><td>√</td><td>√</td><td>√</td><td>√</td><td>从每个类别创建虚拟/二元变量</td></tr>
<tr><td>CountFrequencyEncoder</td><td>×</td><td>√</td><td>√</td><td>√</td><td>用观测次数或频率替换类别</td></tr>
<tr><td>OrdinalEncoder</td><td>若按目标排序,则为√;否则为×</td><td>√</td><td>√</td><td>若数字被任意分配,则为√;否则为×</td><td>将类别按顺序替换为整数,可以是任意的顺序或按目标平均值排序</td></tr>
<tr><td>MeanEncoder</td><td>√</td><td>√</td><td>√</td><td>数字将被返回,但不同类别的平均值没有数学意义</td><td>按类别的目标平均值替换类别</td></tr>
<tr><td>WoEEncoder</td><td>√</td><td>×</td><td>√</td><td>×</td><td>将类别替换为权重值</td></tr>
<tr><td>PRatioEncoder</td><td>√</td><td>×</td><td>√</td><td>×</td><td>用概率比率替换类别</td></tr>
<tr><td>DecisionTreeEncoder</td><td>√</td><td>√</td><td>√</td><td>√</td><td>用决策树的预测替换类别</td></tr>
<tr><td>RareLabelEncoder</td><td>&nbsp;</td><td>√</td><td>√</td><td>√</td><td>将不常见的类别分组到一个新类别中</td></tr>
</table><br>

在进行类别编码时,需要注意以下几点:

<ul><li>选择适当的编码方法根据变量的类型和业务需求。</li></ul>
<ul><li>处理编码可能导致的维度爆炸问题,特别是在独热编码等方法中。</li></ul>
<ul><li>考虑类别的数量和稀疏性,选择合适的编码方法以平衡信息损失和计算效率。</li></ul>

<hr>

<font size="4" style="line-height: 45px;" color="#c200ff"><strong>离散化</strong></font>

离散化是数据预处理中常用的一种技术,可以将连续变量转换为离散的分箱,以便更好地与一些模型进行配合,或者使得数据更符合实际问题的特性。

<table border="1" class="ko" width="100%">
<tr><th>方法</th><th>介绍</th></tr>
<tr><td>EqualFrequencyDiscretiser()</td><td>将值分为具有相似观测数的区间。</td></tr>
<tr><td>EqualWidthDiscretiser()</td><td>将值分为相等大小的区间。</td></tr>
<tr><td>ArbitraryDiscretiser()</td><td>将值分为用户预定义的区间。</td></tr>
<tr><td>DecisionTreeDiscretiser()</td><td>用决策树的预测值替换值,这些值是离散的。</td></tr>
<tr><td>GeometricWidthDiscretiser()</td><td>将变量分为几何区间。</td></tr>
<tr><td>KBinsDiscretizer</td><td>使用K均值对变量进行离散化。</td></tr>
</table><br>

<hr>

<font size="4" style="line-height: 45px;" color="#c200ff"><strong>异常值处理</strong></font>

异常值处理能够提高模型的稳定性和预测能力,提高模型的鲁棒性。

<table border="1" class="ko" width="100%">
<tr><th>方法</th><th>描述</th></tr>
<tr><td>Winsorizer()</td><td>将变量的值限制在自动确定的极值上</td></tr>
<tr><td>ArbitraryOutlierCapper()</td><td>将变量的值限制在用户确定的值上</td></tr>
<tr><td>OutlierTrimmer()</td><td>从数据框中删除异常值</td></tr>
</table><br>

<hr>

<font size="4" style="line-height: 45px;" color="#c200ff"><strong>缩放</strong></font>

缩放方法可以帮助调整数据的分布,使其更符合模型的假设,从而提高模型的性能和鲁棒性。缩放方法比较适合用于线性模型、KNN和神经网络中。

<table border="1" class="ko" width="100%">
<tr><th>转换器</th><th>描述</th></tr>
<tr><td>LogTransformer</td><td>对数转换器</td></tr>
<tr><td>LogCpTransformer</td><td>对数截断转换器</td></tr>
<tr><td>ReciprocalTransformer</td><td>倒数转换器</td></tr>
<tr><td>ArcsinTransformer</td><td>反正弦转换器</td></tr>
<tr><td>PowerTransformer</td><td>幂次转换器</td></tr>
<tr><td>BoxCoxTransformer</td><td>Box-Cox转换器</td></tr>
<tr><td>YeoJohnsonTransformer</td><td>Yeo-Johnson转换器</td></tr>
<tr><td>FunctionTransformer</td><td>允许自定义的函数应用于数据的转换器</td></tr>
<tr><td>PowerTransformer</td><td>将数据进行幂次转换,可选择是Yeo-Johnson转换还是Box-Cox转换</td></tr>
</table><br>

<hr>

<font size="4" style="line-height: 45px;" color="#c200ff"><strong>新的特征</strong></font>

创造新的特征需要一定的想象力,但通常遵循一些基本模式。在创造新的特征时,需要根据数据的特点和问题的需求灵活运用不同的特征创建方法。

<table border="1" class="ko" width="100%">
<tr><th>转换器</th><th>描述</th></tr>
<tr><td>MathFeatures</td><td>数学特征</td></tr>
<tr><td>RelativeFeatures</td><td>相对特征</td></tr>
<tr><td>CyclicalFeatures</td><td>周期特征</td></tr>
<tr><td>GroupedFeatures</td><td>分组特征</td></tr>
<tr><td>PolynomialFeatures</td><td>多项式特征</td></tr>
<tr><td>SplineTransformer</td><td>样条特征</td></tr>
</table><br>

<hr>

<font size="4" style="line-height: 45px;" color="#c200ff"><strong>特征筛选</strong></font>

特征选择是指从原始特征集中选择出最具预测能力的特征子集的过程。有很多类型的方法,如下是一些基础方法:

<table border="1" class="ko" width="100%">
<tr><th>方法</th><th>描述</th></tr>
<tr><td>DropFeatures()</td><td>根据用户确定的特征名删除任意特征</td></tr>
<tr><td>DropConstantFeatures()</td><td>删除常量和准常量特征</td></tr>
<tr><td>DropDuplicateFeatures()</td><td>删除重复的特征</td></tr>
<tr><td>DropCorrelatedFeatures()</td><td>删除相关的特征</td></tr>
<tr><td>SmartCorrelatedSelection()</td><td>从相关特征组中删除不太有用的特征</td></tr>
<tr><td>SelectBySingleFeaturePerformance()</td><td>根据单个特征模型性能选择特征</td></tr>
<tr><td>RecursiveFeatureElimination()</td><td>通过评估模型性能递归地移除特征</td></tr>
<tr><td>RecursiveFeatureAddition()</td><td>通过评估模型性能递归地添加特征</td></tr>
<tr><td>DropHighPSIFeatures()</td><td>删除具有高Population Stability Index的特征</td></tr>
<tr><td>SelectByInformationValue()</td><td>删除信息值较低的特征</td></tr>
<tr><td>SelectByShuffling()</td><td>如果对特征值进行洗牌会导致模型性能下降,则选择该特征</td></tr>
<tr><td>SelectByTargetMeanPerformance()</td><td>使用目标均值作为性能代理,选择性能良好的特征</td></tr>
<tr><td>ProbeFeatureSelection()</td><td>选择重要性大于随机变量的特征</td></tr>
</table><br>

<hr>

<font color="#9a9a9a">本文转自:<a href="https://mp.weixin.qq.com/s/1NOMk0kLCKLiWs8uciDqcw"><font color="#9a9a9a"> Coggle数据科学</font></a>,转载此文目的在于传递更多信息,版权归原作者所有。如不支持转载,请联系小编demi@eetrend.com删除。</font>
<br>