0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

常见的11个分类变量编码方法

新机器视觉 来源:Deephub IMBA 作者:Deephub IMBA 2022-11-28 15:45 次阅读

机器学习算法只接受数值输入,所以如果我们遇到分类特征的时候都会对分类特征进行编码,本文总结了常见的11个分类变量编码方法。

1、ONE HOT ENCODING

最流行且常用的编码方法是One Hot Enoding。一个具有n个观测值和d个不同值的单一变量被转换成具有n个观测值的d个二元变量,每个二元变量使用一位(0,1)进行标识。

例如:

e6159f14-6d8f-11ed-8abf-dac502259ad0.png

编码后:

最简单的实现是使用pandas的' get_dummies

new_df=pd.get_dummies(columns=[‘Sex’], data=df)

2、Label Encoding

为分类数据变量分配一个唯一标识的整数。这种方法非常简单,但对于表示无序数据的分类变量是可能会产生问题。比如:具有高值的标签可以比具有低值的标签具有更高的优先级。

例如上面的数据,我们编码后得到了下面的结果:

e623e682-6d8f-11ed-8abf-dac502259ad0.png

sklearn的LabelEncoder 可以直接进行转换:

from sklearn.preprocessing import LabelEncoder le=LabelEncoder() df[‘Sex’]=le.fit_transform(df[‘Sex’])

3、Label Binarizer

LabelBinarizer 是一个用来从多类别列表创建标签矩阵的工具类,它将把一个列表转换成一个列数与输入集合中惟一值的列数完全相同的矩阵。

例如这个数据:

转化后结果为:

from sklearn.preprocessing import LabelBinarizer lb = LabelBinarizer() new_df[‘Sex’]=lb.fit_transform(df[‘Sex’])

4、Leave one out Encoding

Leave One Out 编码时,目标分类特征变量对具有相同值的所有记录会被平均以确定目标变量的平均值。在训练数据集和测试数据集之间,编码算法略有不同。因为考虑到分类的特征记录被排除在训练数据集外,因此被称为“Leave One Out”。

对特定类别变量的特定值的编码如下。

ci = (Σj != i tj / (n — 1 + R)) x (1 + εi) where ci = encoded value for ith record tj = target variable value for jth record n = number of records with the same categorical variable value R = regularization factor εi = zero mean random variable with normal distribution N(0, s)

例如下面的数据:

e634c3bc-6d8f-11ed-8abf-dac502259ad0.png

编码后:

为了演示这个编码过程,我们创建数据集:

importpandasaspd; data = [[‘1’, 120], [‘2’, 120], [‘3’, 140], [‘2’, 100], [‘3’, 70], [‘1’, 100],[‘2’, 60], [‘3’, 110], [‘1’, 100],[‘3’, 70] ] df = pd.DataFrame(data, columns = [‘Dept’,’Yearly Salary’])

然后进行编码:

import category_encoders as ce tenc=ce.TargetEncoder() df_dep=tenc.fit_transform(df[‘Dept’],df[‘Yearly Salary’]) df_dep=df_dep.rename({‘Dept’:’Value’}, axis=1) df_new = df.join(df_dep)

这样就得到了上面的结果。

5、Hashing

当使用哈希函数时,字符串将被转换为一个惟一的哈希值。因为它使用的内存很少可以处理更多的分类数据。对于管理机器学习中的稀疏高维特征,特征哈希是一种有效的方法。它适用于在线学习场景,具有快速、简单、高效、快速的特点。

例如下面的数据:

e64761ca-6d8f-11ed-8abf-dac502259ad0.png

编码后:

e653dbc6-6d8f-11ed-8abf-dac502259ad0.png

代码如下:

from sklearn.feature_extraction import FeatureHasher # n_features contains the number of bits you want in your hash value. h = FeatureHasher(n_features = 3, input_type =’string’) # transforming the column after fitting hashed_Feature = h.fit_transform(df[‘nom_0’]) hashed_Feature = hashed_Feature.toarray() df = pd.concat([df, pd.DataFrame(hashed_Feature)], axis = 1) df.head(10)

6、Weight of Evidence Encoding

(WoE) 开发的主要目标是创建一个预测模型,用于评估信贷和金融行业的贷款违约风险。证据支持或驳斥理论的程度取决于其证据权重或 WOE。

如果P(Goods) / P(Bads) = 1,则WoE为0。如果这个组的结果是随机的,那么P(Bads) > P(Goods),比值比为1,证据的权重(WoE)为0。如果一组中P(Goods) > P(bad),则WoE大于0。

因为Logit转换只是概率的对数,或ln(P(Goods)/P(bad)),所以WoE非常适合于逻辑回归。当在逻辑回归中使用wo编码的预测因子时,预测因子被处理成与编码到相同的尺度,这样可以直接比较线性逻辑回归方程中的变量。

例如下面的数据:

会被编码为:

e69af4fc-6d8f-11ed-8abf-dac502259ad0.png

代码如下:

from category_encoders import WOEEncoder df = pd.DataFrame({‘cat’: [‘a’, ‘b’, ‘a’, ‘b’, ‘a’, ‘a’, ‘b’, ‘c’, ‘c’], ‘target’: [1, 0, 0, 1, 0, 0, 1, 1, 0]}) woe = WOEEncoder(cols=[‘cat’], random_state=42) X = df[‘cat’] y = df.target encoded_df = woe.fit_transform(X, y)

7、Helmert Encoding

Helmert Encoding将一个级别的因变量的平均值与该编码中所有先前水平的因变量的平均值进行比较。

反向 Helmert 编码是类别编码器中变体的另一个名称。它将因变量的特定水平平均值与其所有先前水平的水平的平均值进行比较。

e6adb0ba-6d8f-11ed-8abf-dac502259ad0.png

会被编码为:

代码如下:

import category_encoders as ce encoder=ce.HelmertEncoder(cols=’Dept’) new_df=encoder.fit_transform(df[‘Dept’]) new_hdf=pd.concat([df,new_df], axis=1) new_hdf

8、Cat Boost Encoding

是CatBoost编码器试图解决的是目标泄漏问题,除了目标编码外,还使用了一个排序概念。它的工作原理与时间序列数据验证类似。当前特征的目标概率仅从它之前的行(观测值)计算,这意味着目标统计值依赖于观测历史。

TargetCount:某个类别特性的目标值的总和(到当前为止)。

Prior:它的值是恒定的,用(数据集中的观察总数(即行))/(整个数据集中的目标值之和)表示。

featucalculate:到目前为止已经看到的、具有与此相同值的分类特征的总数。

编码后的结果如下:

代码:

import category_encoders category_encoders.cat_boost.CatBoostEncoder(verbose=0, cols=None, drop_invariant=False, return_df=True, handle_unknown=’value’, handle_missing=’value’, random_state=None, sigma=None, a=1) target = df[[‘target’]] train = df.drop(‘target’, axis = 1) # Define catboost encoder cbe_encoder = ce.cat_boost.CatBoostEncoder() # Fit encoder and transform the features cbe_encoder.fit(train, target) train_cbe = cbe_encoder.transform(train)

9、James Stein Encoding

James-Stein 为特征值提供以下加权平均值:

观察到的特征值的平均目标值。

平均期望值(与特征值无关)。

James-Stein 编码器将平均值缩小到全局的平均值。该编码器是基于目标的。但是James-Stein 估计器有缺点:它只支持正态分布。

它只能在给定正态分布的情况下定义(实时情况并非如此)。为了防止这种情况,我们可以使用 beta 分布或使用对数-比值比转换二元目标,就像在 WOE 编码器中所做的那样(默认使用它,因为它很简单)。

10、M Estimator Encoding:

Target Encoder的一个更直接的变体是M Estimator Encoding。它只包含一个超参数m,它代表正则化幂。m值越大收缩越强。建议m的取值范围为1 ~ 100。

11、 Sum Encoder

Sum Encoder将类别列的特定级别的因变量(目标)的平均值与目标的总体平均值进行比较。在线性回归(LR)的模型中,Sum Encoder和ONE HOT ENCODING都是常用的方法。两种模型对LR系数的解释是不同的,Sum Encoder模型的截距代表了总体平均值(在所有条件下),而系数很容易被理解为主要效应。在OHE模型中,截距代表基线条件的平均值,系数代表简单效应(一个特定条件与基线之间的差)。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码
    +关注

    关注

    6

    文章

    914

    浏览量

    54643
  • 变量
    +关注

    关注

    0

    文章

    607

    浏览量

    28254

原文标题:11 个常见的分类特征的编码技术

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    编码器的常见故障及解决方法

    编码器作为工业自动化系统中不可或缺的一部分,其稳定性和可靠性对于整个系统的运行至关重要。然而,在实际应用中,编码器也时常会遇到各种故障,导致系统性能下降甚至无法正常运行。本文将详细探讨编码器的
    的头像 发表于 05-29 16:01 2465次阅读

    旋转编码器的常见类型

    详细介绍旋转编码器的常见类型,包括增量式编码器和绝对式编码器两大类,并对它们的特点、工作原理、应用场合等进行深入探讨。
    的头像 发表于 05-29 15:59 557次阅读

    波形编码是?常见的波形编码方法主要包括哪些?

    波形编码是基于对语音信号波形的数字化处理,试图使处理后重建的语音信号波形与原语音信号波形保持一致。
    的头像 发表于 05-01 17:17 1818次阅读
    波形<b class='flag-5'>编码</b>是?<b class='flag-5'>常见</b>的波形<b class='flag-5'>编码方法</b>主要包括哪些?

    常见的视觉编码器有哪些 图像编码和视觉编码的区别

    视觉编码器是一种能够处理视频理解任务的模型,它能够通过单一冻结模型,处理各种视频理解任务,包括分类、本地化、检索、字幕和问答等。
    的头像 发表于 02-26 14:24 1423次阅读

    编码器7种常见故障及解决方法是什么?

    编码器7种常见故障及解决方法是什么? 编码器是一种用于将物理量转换为数字信号的设备,常用于工业自动化、机械控制等领域。然而,在使用编码器的过
    的头像 发表于 01-26 14:56 9970次阅读

    编码器的6种常见问题

    编码器是一种非常有用的工具,能够用于各种信息转换任务。在使用编码器时,有几个常见的问题需要注意,并根据实际情况选择合适的解决方案。
    的头像 发表于 01-22 14:57 1005次阅读

    MES常见功能与分类

    电子发烧友网站提供《MES常见功能与分类.docx》资料免费下载
    发表于 01-19 14:00 0次下载

    Linux环境变量配置方法

    想必大家平时工作中也会配置Linux的环境变量,但是可能也仅仅是为解决某些工具的运行环境,对于Linux环境变量本身的配置学问还没深入了解。今天浩道跟大家分享Linux环境变量的硬核干货,让你一次盘
    的头像 发表于 01-04 09:51 411次阅读

    python环境变量的配置pip

    Python环境变量的配置和使用是每个Python开发者都需要了解和掌握的基本技能之一。在本文中,我们将详细介绍如何正确配置Python环境变量,并展示一些常见问题的解决方法。我们将从
    的头像 发表于 12-15 15:41 2083次阅读

    ec11编码器 有什么驱动芯片吗

    EC11编码器是一种常用的编码器,通常用于工业自动化、机器人、数控机床等领域。为了驱动EC11编码器的正常工作,需要使用相应的驱动芯片。下面
    的头像 发表于 12-13 10:43 1161次阅读

    如何在嵌入式C编码中规范变量

    ◎ 不用或者少用全局变量 说明:单个文件内部可以使用static的全局变量,可以将其理解为类的私有成员变量。全局变量应该是模块的私有数据,不能作用对外的接口使用,使用static类型定
    的头像 发表于 12-07 14:42 258次阅读

    Python怎样存储变量性能最优

    工作时我们经常会遇到需要临时保存结果变量的场景,尤其是一些数据处理、模型开发的场景,加载处理速度是很漫长的过程,于是经常会把这些变量储存起来。 而储存变量
    的头像 发表于 10-30 15:33 301次阅读
    Python怎样存储<b class='flag-5'>变量</b>性能最优

    LLaMA2上下文长度暴涨至100万tokens,只需调整1超参数

    目前的Transformer位置编码方法,有绝对位置编码(将位置信息融入到输入)、相对位置编码(将位置信息写入attention分数计算)和旋转位置编码几种。其中,最火热的要属旋转位置
    的头像 发表于 10-22 10:20 377次阅读
    LLaMA2上下文长度暴涨至100万tokens,只需调整1<b class='flag-5'>个</b>超参数

    Python怎样存储变量性能最优

    工作时我们经常会遇到需要临时保存结果变量的场景,尤其是一些数据处理、模型开发的场景,加载处理速度是很漫长的过程,于是经常会把这些变量储存起来。 而储存变量
    的头像 发表于 10-17 11:34 310次阅读
    Python怎样存储<b class='flag-5'>变量</b>性能最优

    Linux环境变量的配置方法

    在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法
    发表于 09-27 09:50 216次阅读