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

    文章

    1040

    浏览量

    57140
  • 变量
    +关注

    关注

    0

    文章

    616

    浏览量

    29568

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    三菱伺服电机的编码器引脚的定义

    。下面的信息是基于常见系列和通用规范整理的,供您参考。 驱动器侧 (CN2接口) 通用引脚定义 伺服驱动器的编码器接口通常标记为  CN2 。下面是常见的引脚信号定义,这是连接驱动器与伺服电机的核心。 信号
    的头像 发表于 04-14 12:12 273次阅读
    三菱伺服电机的<b class='flag-5'>编码</b>器引脚的定义

    编码器接口定义及标准接线方法

    、接线规范统一,是保证磁编码器稳定输出位置信号、提高系统抗干扰能力的关键。本文从接口类型、电气特性、引脚定义、标准接线、工程规范、故障处理六方面,系统阐述磁编码器接口定义与标准接线方法
    的头像 发表于 03-12 15:42 283次阅读

    机器学习特征工程:分类变量的数值化处理方法

    编码是机器学习流程里最容易被低估的环节之一,模型没办法直接处理文本形式的分类数据,尺寸(Small/Medium/Large)、颜色(Red/Blue/Green)、城市、支付方式等都是典型的分类
    的头像 发表于 02-10 15:58 451次阅读
    机器学习特征工程:<b class='flag-5'>分类</b><b class='flag-5'>变量</b>的数值化处理<b class='flag-5'>方法</b>

    如何规范用、但不滥用局部变量(Local Variable)

    用局部变量写它,改用数据流线或消息。 规则5:能用线就用线;能用移位寄存器/反馈节点就不要局部变量。 用什么方法避免使用局部变量(替代方案) 按
    发表于 02-04 08:42

    微电网常见分类:按电源类型、电压等级、控制模式划分详解

    、电压等级、控制模式划分是行业内最主流、最具实践指导意义的三种分类方式。本文将围绕这三大核心维度,详细拆解微电网的常见分类,剖析各类别核心特征、适配场景及技术要点,为微电网的场景化应用提供参考。
    的头像 发表于 01-30 10:59 458次阅读
    微电网<b class='flag-5'>常见分类</b>:按电源类型、电压等级、控制模式划分详解

    使用博图(TIA Portal)监控PROFINET从站通讯状态的两方法

    如何使用博图监控Profinet从站通讯状态,这里有两方法供你选择。 方法一 | 使用DeviceStates指令 创建全局数据块 在博图项目中,创建一全局数据块(DB),用于存储
    的头像 发表于 01-17 11:21 1549次阅读
    使用博图(TIA Portal)监控PROFINET从站通讯状态的两<b class='flag-5'>个</b><b class='flag-5'>方法</b>

    PEC11J系列12mm SMD长寿命编码器:特性、参数与应用全解析

    PEC11J系列12mm SMD长寿命编码器:特性、参数与应用全解析 在电子设备的设计中,编码器是一关键的组件,它能够将机械运动转化为电信号,为设备的精确控制提供支持。今天我们要介绍
    的头像 发表于 12-23 15:10 431次阅读

    用户对变量或寄存器进行位操作的方法

    嵌入式系统总是要用户对变量或寄存器进行位操作。给定一整型变量a,写两段代码,第一设置a的bit 3,第二清除a 的bit 3。在以上两
    发表于 12-23 08:16

    LED显示屏常见故障分类及处理方法

    常见故障分类LED显示屏常见故障分为三类:LED模组常见故障、室内全彩显示屏故障及户外全彩显示屏故障。针对每一类故障,我们将详细分析可能的原因,并提供具体的检测与维修步骤。LED模组
    的头像 发表于 12-18 15:48 1748次阅读
    LED显示屏<b class='flag-5'>常见</b>故障<b class='flag-5'>分类</b>及处理<b class='flag-5'>方法</b>

    增量式编码器:精准测量背后的分类智慧

    高性价比、抗干扰强等优势,成为现代制造中不可或缺的“运动语言翻译官”。而深入了解其分类体系,正是解锁高效应用的第一把钥匙。 一、通道维度:从单相到三通道,功能逐级进阶 增量式编码器的核心分类依据之一是输出通道
    的头像 发表于 10-22 08:44 821次阅读

    11编码器:工业控制领域的“精密之眼”

    在智能制造与工业自动化的浪潮中,11编码器以其高精度、高可靠性和灵活适配性,成为工业设备运动控制的核心元件。无论是精密加工机床、自动化生产线,还是新能源汽车、智能家居设备,11编码
    的头像 发表于 10-17 08:36 652次阅读
    <b class='flag-5'>11</b>型<b class='flag-5'>编码</b>器:工业控制领域的“精密之眼”

    PLC中Static和Temp变量的区别

    大家好,收到粉丝投稿,让博主讲下Static变量和Temp变量的区别,新入行的兄弟可能会对这两概念不太能理解。
    的头像 发表于 09-24 14:51 1632次阅读
    PLC中Static和Temp<b class='flag-5'>变量</b>的区别

    量子机器学习入门:三种数据编码方法对比与应用

    在传统机器学习中数据编码确实相对直观:独热编码处理类别变量,标准化调整数值范围,然后直接输入模型训练。整个过程更像是数据清洗,而非核心算法组件。量子机器学习的编码完全是另一回事。传统算
    的头像 发表于 09-15 10:27 955次阅读
    量子机器学习入门:三种数据<b class='flag-5'>编码方法</b>对比与应用

    高温电阻率测试中的5常见错误及规避方法

    测试结果出现偏差。下面为你详细剖析高温电阻率测试中的 5 常见错误,并提供有效的规避方法。​ 一、样品制备不当​ 常见错误​ 样品的形状、尺寸和表面状态对高温电阻率测试结果影响显著。
    的头像 发表于 06-09 13:07 1045次阅读
    高温电阻率测试中的5<b class='flag-5'>个</b><b class='flag-5'>常见</b>错误及规避<b class='flag-5'>方法</b>

    常见的PFC拓扑架构及控制方法

    本期,芯朋微技术团队将为各位fans分享常见的PFC拓扑架构及控制方法,为设计选型提供参考。
    的头像 发表于 04-27 18:03 8529次阅读
    <b class='flag-5'>常见</b>的PFC拓扑架构及控制<b class='flag-5'>方法</b>