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

    文章

    1015

    浏览量

    56657
  • 变量
    +关注

    关注

    0

    文章

    615

    浏览量

    29371

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

    编码常见的故障详细说明

    运行和加工精度。本文将详细说明编码常见的故障及其排除方法,以帮助用户更好地维护和使用编码器。 一、信号输出故障 1. 无信号输出:编码器无
    的头像 发表于 04-16 18:28 3215次阅读

    电子元器件的分类方式

    电子元器件可以按照不同的分类标准进行分类,以下是一些常见分类方式。
    的头像 发表于 04-16 14:52 2096次阅读

    各类电机有没有编码器?如何分类

    工业电机中,有些电机自带编码器,而有些则不带。编码器通常用于提供电机的位置、速度或方向等反馈信息,以实现更精确的控制。以下是对电机及其编码器的分类和特点的详细分析:   一、电机
    的头像 发表于 03-16 11:09 1418次阅读

    伺服电机编码器怎么选型

    伺服电机编码器的选型是一综合性的过程,需要考虑多个因素以确保所选编码器能够满足系统的性能要求。以下是一些关键的选型步骤和考虑因素: 一、明确应用需求 首先,需要明确伺服电机编码器的应
    的头像 发表于 03-11 12:01 1467次阅读
    伺服电机<b class='flag-5'>编码</b>器怎么选型

    321Y驱动器的常见故障及解决方法

    ‌ 321Y驱动器常见故障及解决方法 ‌: ‌ 过载故障 ‌ ‌ 现象 ‌:驱动器连续使用超过额定负载两倍时,会产生异常警报‌1。 ‌ 解决方法 ‌:降低负载、调整减速箱传动比、增加电动机容量等‌1
    的头像 发表于 03-07 15:50 1420次阅读

    编码常见的故障问题及案例分析

    编码器作为自动化控制系统中的重要组件,负责将机械位移转换为电信号,以供上位机、PLC或驱动器等设备读取和处理。然而,在使用过程中,编码器可能会遇到多种故障。以下是对编码常见故障及案例
    的头像 发表于 03-07 11:05 3678次阅读

    半导体激光器的常见分类

    半导体激光器的用途非常广泛,按照不同的类型,有不同的分类方式。松盛光电来介绍半导体激光器的常见分类情况,来了解一下吧。
    的头像 发表于 03-05 11:47 1430次阅读
    半导体激光器的<b class='flag-5'>常见分类</b>

    对于绝对式编码器的常见故障如何解决呢?

    电缆、电源、安装等多个方面。本文将详细介绍绝对式编码常见的故障及其解决方法,以帮助用户更好地维护和使用设备。       首先,编码器本身的故障是导致其无法正常工作的重要原因之一。
    的头像 发表于 01-24 14:43 1735次阅读

    伺服电机编码器故障及维修

    伺服电机编码器故障及维修,伺服电机编码器4大常见故障,编码器信号丢失或不稳定,编码器零点偏移,编码
    的头像 发表于 01-21 14:49 4025次阅读
    伺服电机<b class='flag-5'>编码</b>器故障及维修

    常见xgboost错误及解决方案

    XGBoost(eXtreme Gradient Boosting)是一种流行的机器学习算法,用于解决分类和回归问题。尽管它非常强大和灵活,但在使用过程中可能会遇到一些常见的错误。以下是一些常见
    的头像 发表于 01-19 11:22 4652次阅读

    SMT元器件的编码与识别

    SMT元器件的编码通常遵循一定的国际标准,以确保全球供应链中的兼容性和一致性。以下是一些常见编码规则: 1.1 制造商编码 每个元器件都会有一
    的头像 发表于 01-10 18:01 2741次阅读

    bcd编码的优缺点 bcd编码常见错误

    。以下是BCD编码的一些优缺点以及常见的错误: BCD编码的优点: 直观易懂 :BCD编码直接将十进制数转换为二进制,对于人类来说非常直观,易于理解和检查。 减少错误 :由于BCD
    的头像 发表于 12-20 17:17 2388次阅读

    伺服编码器接线方法 伺服编码器线可以自己延长吗?

    伺服编码器是伺服电机系统中的关键组件,负责监测电机的位置和运动状态,从而实现精确的位置控制。本文将详细介绍伺服编码器的接线方法,并探讨伺服编码器线是否可以自行延长的问题。       
    的头像 发表于 12-09 01:02 3464次阅读