类别特征

3.18 推荐系统特征处理:类别特征、数值特征、序列特征的处理方法 推荐系统特征处理主要包括三类特征:类别特征(One-Hot/Embedding)、数值特征(归一化/分桶)和序列特征(Embedding/RNN)。类别特征适合使用One-Hot编码或低维Embedding;数值特征需标准化处理或分桶离散化;序列特征可通过Embedding或RNN提取模式。特征工程最佳实践包括:高基数类别用Embedding(8-16维),数值特征标准化,序列特征考虑时序模式,并合理组合各类特征。不同特征处理方法的选择直接影响模型性能和训练效率。 阅读详情

特征工程的完整流程是:特征设计 -> 特征获取 -> 特征处理 -> 特征存储 -> 特征监控。本篇主要介绍如何对类别特征进行处理。

类别特征即特征的属性值是一个有限的集合,常见几种处理方法为:

  • 序号编码

  • One-Hot(独热)编码

  • 哑变量(虚拟)编码

  • 二进制编码

  • 效应编码

  • 哈希编码

  • 统计学中常用编码

1、序号编码

序号编码(Label Encoding)即通过数字序号和值进行一一映射达到编码的目的。但它适用于处理具有大小关系或递进关系的特征,比如成绩的优良中差可以进行序列编码为:差->0,中->1,良->2,优->3,比如上学的不同阶段可以进行序列编码为:幼儿园->0,小学->1,初中->2,高中->3,大学->4,硕士->5,博士->6。但对于一些平级的特征则不适合用序号编码进行表示,比如性别(男、女),全国的省份,这些都是平级的,转变为序号数值之后会增加一层大小关系,这对于数值大小敏感的模型(比如SVM、LR等)则是致命的,因为会影响损失函数之类的计算结果。

sklearn中包含了序号编码的处理模块(LabelEncoder),其使用方式如下:

# 序号编码
from sklearn.preprocessing import LabelEncoder
print("sklean版本为:" + sklearn.__version__)

score_level = ["优","良","中","差"]
le = LabelEncoder()
le.fit(score_level)
print("原始的类别数据为:%s" % score_level)
print("不重复的类别值有:%s" % le.classes_)
print("经过序号编码后的数据为:%s" % le.transform(score_level))
print("序号编码后的数据还原为:%s" % le.inverse_transform( le.transform(score_level) ))

输出结果为:

sklean版本为:0.22.1
原始的类别数据为:['优', '良', '中', '差']
不重复的类别值有:['中' '优' '差' '良']
经过序号编码后的数据为:[1 3 0 2]
序号编码后的数据还原为:['优' '良' '中' '差']

这里需要注意的是,经过转换后的数据格式为 numpy.ndarray。

2、One-Hot(独热)编码

One-Hot编码也叫独热编码,指的是将原始特征变量转换为原始特征值分类的多维度变量,在每个维度上使用0/1来进行是/否、有/无的量化。通俗来说就是,把每个取值作为一个新特征,一行数据中,取到了这个值就是1,没取到这个值就是0。

比如上文描述的成绩的优良中差,我们认为产出的4维特征数组表示的含义为:[是否是优,是否是良,是否是中,是否是差],是为1,否为0,那么优可以表示为:[1,0,0,0],良可以表示为:[0,1,0,0],中可以表示为:[0,0,1,0],差可以表示为:[0,0,0,1]。

sklearn中包含了序号编码的处理模块(OneHotEncoder),其使用方式如下:

# 序号编码
from sklearn.preprocessing import OneHotEncoder
print("sklean版本为:" + sklearn.__version__)

score_level = [["优"],["良"],["中"],["差"]]
enc = OneHotEncoder(handle_unknown='ignore')
enc.fit(score_level)
print("原始的类别数据为:%s" % score_level)
print("不重复的类别值有:%s" % enc.categories_)
print("经过One-Hot编码后的数据为:\n %s" % enc.transform(score_level).toarray())
print("One-Hot编码复原后的数据为:\n %s" % enc.inverse_transform([[0., 1., 0., 0.], [0., 0., 0., 1.], [1., 0., 0., 0.], [0., 0., 1., 0.]]))
print("打印输出特征的名字:\n %s" % enc.get_feature_names(['score_level']))

输出结果为:

sklean版本为:0.22.1
原始的类别数据为:[['优'], ['良'], ['中'], ['差']]
不重复的类别值有:[array(['中', '优', '差', '良'], dtype=object)]
经过One-Hot编码后的数据为:
 [[0. 1. 0. 0.]
 [0. 0. 0. 1.]
 [1. 0. 0. 0.]
 [0. 0. 1. 0.]]
One-Hot编码复原后的数据为:
 [['优']
 ['良']
 ['中']
 ['差']]
打印输出特征的名字:
 ['score_level_中' 'score_level_优' 'score_level_差' 'score_level_良']

同时OneHotEncoder也支持多个特征的转化,使用案例如下:

score_level_gender = [["优", "男"],["良", "女"],["中", "男"],["差", "女"]]
enc_more = OneHotEncoder(handle_unknown='ignore')
enc_more.fit(score_level_gender)
print("原始的类别数据为:%s" % score_level_gender)
print("不重复的类别值有:%s" % enc_more.categories_)
print("经过One-Hot编码后的数据为:\n %s" % enc_more.transform(score_level_gender).toarray())
print("独热One-Hot复原后的数据为:\n %s" % enc_more.inverse_transform([[0., 1., 0., 0., 0., 1.], [0., 0., 0., 1., 1., 0.], [1., 0., 0., 0., 0., 1.], [0., 0., 1., 0., 0., 1.]]))
print("打印输出特征的名字:\n %s" % enc_more.get_feature_names(['score_level', "gender"]))

输出结果为:

原始的类别数据为:[['优', '男'], ['良', '女'], ['中', '男'], ['差', '女']]
不重复的类别值有:[array(['中', '优', '差', '良'], dtype=object), array(['女', '男'], dtype=object)]
经过One-Hot编码后的数据为:
 [[0. 1. 0. 0. 0. 1.]
 [0. 0. 0. 1. 1. 0.]
 [1. 0. 0. 0. 0. 1.]
 [0. 0. 1. 0. 1. 0.]]
One-Hot编码复原后的数据为:
 [['优' '男']
 ['良' '女']
 ['中' '男']
 ['差' '男']]
打印输出特征的名字:
 ['score_level_中' 'score_level_优' 'score_level_差' 'score_level_良'
 'gender_女' 'gender_男']

Pandas中也提供了相应的函数来进行特征的One-Hot编码,使用举例如下:

import pandas as pd
print("pandas版本为:%s" % pd.__version__)

df = pd.DataFrame([["优", "男"],["良", "女"],["中", "男"],["差", "女"]])  
df.columns = ['score_level', "gender"] 
print("经过One-Hot编码后的数据为:")
pd.get_dummies(df).values

输出结果为:

pandas版本为:1.0.1
经过One-Hot编码后的数据为:
array([[0, 1, 0, 0, 0, 1],
       [0, 0, 0, 1, 1, 0],
       [1, 0, 0, 0, 0, 1],
       [0, 0, 1, 0, 1, 0]], dtype=uint8)

采用One-Hot编码的特征,特征时间没有大小和级别关系,对于一些线性模型比较友好,同时扩充了特征,在一定程度上降低了过拟合的风险。同样如果类别值过多,则会导致One-Hot编码后的特征变得维度骤增,增加模型训练的成本和数据存储的空间。而且One-Hot编码之后的特征对于树模型并不友好,如果特征很多,取这个值的数量又很少,那么一些特征变量很可能因为树模型的参数配置而无法向下分裂,导致这些信息白白丢失掉了。

一种减少数据存储空间的有效办法是使用稀疏向量保存,比如成绩中的“优”对应的One-Hot编码为:[0,1,0,0],可以表示为:[4,(2,1)]。但这样并不能降低特征的维度。

3、哑变量(虚拟)编码

哑变量(Dummy Variable),也叫虚拟变量,引入哑变量的目的是,将不能够定量处理的变量量化。哑变量编码(Dummy Encoding)的直观的解释就是任意的将一个状态位去除。整体使用0、1表示。比如上文中提到的成绩用优良中差表示,如果一个人的成绩既不是优良中,那么他的成绩就是差了,用哑变量编码优可以表示为:[1,0,0,0],良可以表示为:[0,1,0,0],中可以表示为:[0,0,1,0],差可以表示为:[0,0,0,0]。

通过对比成绩优良中差的例子,可以看出它们的“思想路线”是相同的,只是哑变量编码觉得One-Hot编码太罗嗦了(一些很明显的事实还说的这么清楚),所以它就很那么很明显的东西省去了。这种简化不能说到底好不好,这要看使用的场景。但通常情况下还是建议使用One-Hot编码,哑变量编码也可以使用,不过最好选择前者。虽然哑变量编码可以去除One-Hot编码的冗余信息,但是因为每个离散型特征各个取值的地位都是对等的,随意取舍未免来的太随意。

4、二进制编码

二进制编码(Binary Encoding)即采用二进制来表示类别,其编码过程分为两步:

  • 使用ID对每个类别值进行顺序编码,该过程类似于序号编码

  • 将类别编码对应的ID用二进制表示

比如上文提到的成绩对应优良中差四个档次,其经过第一、第二步之后的二进制编码表示为:

成绩类别ID二进制编码
优10 0 1
良20 1 0
中30 1 1
差41 0 0

可以看出,二进制编码本 质上是利用二进制对ID进行哈希映射,最终得到0/1特征向量,对比One-Hot编码或者序号编码维数较少,节省了存储空间。但因其直观性不强,在实际场景中使用很少。

5、效应编码

效应编码(Effect Coding)是一种和哑变量编码(Dummy Encoding)类似的编码方法,对于有  个分类属性的自变量,通常需要选取1个分类作为参照,因此可以产生  个虚拟变量。效应编码是使用1、0和-1来编码,来反映某个变量的不同属性,与哑变量编码相比,区别在于作为参照那一类的赋值。效应编码是将参照的那一类全部赋值为-1,而哑变量编码则是把参照的那一类全部赋值为0。

还是拿成绩的优良中差为例,用效应编码优可以表示为:[1,0,0,0],良可以表示为:[0,1,0,0],中可以表示为:[0,0,1,0],差可以表示为:[-1,-1,-1,-1]。

6、哈希编码

首先看一下什么是哈希(Hash)算法,哈希算法并不是一个特定的算法而是一类算法的统称。哈希算法也叫散列算法,一般来说满足这样的关系:,输入任意长度的data数据,经过哈希算法处理后输出一个定长的数据key。同时这个过程是不可逆的,无法由key逆推出data。

因此在面对高基数类别变量时,就可以用特征哈希法编码的方式将原始的高维特征向量压缩成较低维特征向量,且尽量不损失原始特征的表达能力,这就是哈希编码(Hash Encoding)。

哈希编码有其自己的优劣:

  • 优点

    • 降低特征数量,加速算法训练和预测过程,降低内存消耗

    • 可以添加新的任务(如新用户),或者新的原始特征而保持哈希转换后的特征长度不变,很适合任务数频繁变化的问题(如个性化推荐里新用户,新item的出现)

    • 可以保持原始特征的稀疏性,既然哈希转换时只有非0原始特征才起作用

    • 可以只哈希转换其中的一部分原始特征,而保留另一部分原始特征(如那些出现collision就会很影响精度的重要特征)

  • 缺点

    • 通过哈希编码转换学习到的模型变得很难校验,很难对训练处的模型参数作出合理解释

    • 哈希编码会把多个原始特征哈希到相同的位置上,出现哈希中的collision现象,但实际实验表明这种collision对算法的精度影响很小(具体可以参考论文:Collaborative Email-Spam Filtering with the Hashing-Trick)

7、统计学中常用编码

在计量统计学中常用的几种类别特征处理方式包括:

  • Indicator Contrast(指示对比)

  • Simple Contrast(简单对比)

  • Difference Contrast(差异对比)

    • Forward Difference Coding(前向差异对比)

    • Backward Difference Coding(后向差异对比)

  • Helmert Contrast(赫尔默特对比)

  • Repeated Contrast(重复对比)

  • Polynomial Contrast(多项式对比)

  • Deviation Contrast(偏差对比,也叫Sum Contrast)

这些编码实现,在R语言中实现比较方便,有相应的基础组件可以直接使用,但在Python中实现起来就没有那么方便了。感兴趣的可以自行调研其具体的表达含义和实现方法,这里不做介绍。

8、Categorical Encoders介绍

Github上有一个开源的类别特征处理包(category_encoders,https://github.com/scikit-learn-contrib/category_encoders),其包含了上文提到的一些和没有提到的一些类别特征处理方法,主要有:

无监督类方法:

  • Backward Difference Contrast

  • BaseN

  • Binary

  • Count

  • Hashing

  • Helmert Contrast

  • Ordinal

  • One-Hot

  • Polynomial Contrast

  • Sum Contrast

有监督类方法:

  • CatBoost

  • Generalized Linear Mixed Model

  • James-Stein Estimator

  • LeaveOneOut

  • M-estimator

  • Target Encoding

  • Weight of Evidence

下面通过几个案例演示一下其使用方式(category encoders的安装可以参考github官方文档)。

无监督之序号编码

# https://github.com/scikit-learn-contrib/category_encoders 部分代码示例

import numpy as np
import pandas as pd
import category_encoders as ce

print("numpy 版本为:%s" %  np.__version__)
print("pandas 版本为:%s" % pd.__version__)
print("category_encoders 版本为:%s" % category_encoders.__version__)

# 无监督-序号编码
data = pd.DataFrame(np.array([["优", "男"],["良","女"],["中","男"],["差","女"]]), columns=["score", "sex"])
print("\n 原始数据为:\n %s" % data)
encoder = ce.OrdinalEncoder(cols=['score', "sex"]).fit(data)
print("\n 序号编码信息为:\n %s" % encoder)
result = encoder.transform(data)
print("\n 序号编码后的数据为:\n %s" % result)

输出结果为:

numpy 版本为:1.18.1
pandas 版本为:1.0.1
category_encoders 版本为:2.2.2

 原始数据为:
   score sex
0     优   男
1     良   女
2     中   男
3     差   女

 序号编码信息为:
 OrdinalEncoder(cols=['score', 'sex'], drop_invariant=False,
               handle_missing='value', handle_unknown='value',
               mapping=[{'col': 'score', 'data_type': dtype('O'),
                         'mapping': 优      1
良      2
中      3
差      4
NaN   -2
dtype: int64},
                        {'col': 'sex', 'data_type': dtype('O'),
                         'mapping': 男      1
女      2
NaN   -2
dtype: int64}],
               return_df=True, verbose=0)

 序号编码后的数据为:
    score  sex
0      1    1
1      2    2
2      3    1
3      4    2

无监督之Helmert Contrast编码

# 无监督-Helmert Contrast
encoder1 = ce.HelmertEncoder(cols=['score', "sex"]).fit(data)
print("\n Helmert Contrast编码信息为:\n %s" % encoder1)
print("\n Helmert Contrast编码后的数据为:\n %s" % encoder1.transform(data))

输出结果为:

Helmert Contrast编码信息为:
 HelmertEncoder(cols=['score', 'sex'], drop_invariant=False,
               handle_missing='value', handle_unknown='value',
               mapping=[{'col': 'score',
                         'mapping':     score_0  score_1  score_2
 1     -1.0     -1.0     -1.0
 2      1.0     -1.0     -1.0
 3      0.0      2.0     -1.0
 4      0.0      0.0      3.0
-1      0.0      0.0      0.0
-2      0.0      0.0      0.0},
                        {'col': 'sex',
                         'mapping':     sex_0
 1   -1.0
 2    1.0
-1    0.0
-2    0.0}],
               return_df=True, verbose=0)

 Helmert Contrast编码后的数据为:
    intercept  score_0  score_1  score_2  sex_0
0          1     -1.0     -1.0     -1.0   -1.0
1          1      1.0     -1.0     -1.0    1.0
2          1      0.0      2.0     -1.0   -1.0
3          1      0.0      0.0      3.0    1.0

有监督之目标编码

目标编码是一种不仅基于特征值本身,还基于相应因变量的类别变量编码方法。

对于分类问题:将类别特征替换为给定某一特定类别值的因变量后验概率与所有训练数据上因变量的先验概率的组合。对于连续目标:将类别特征替换为给定某一特定类别值的因变量目标期望值与所有训练数据上因变量的目标期望值的组合。

该方法严重依赖于因变量的分布,但这大大减少了生成编码后特征的数量。

# 训练集
x_train = pd.DataFrame(np.array([["男", 12],["男",15],["男",13],["女",56],["女",69],["女",59]]), columns=["sex", "num"])
y_train = np.array([0, 0, 0, 1, 1, 1])
# 测试集
x_test = pd.DataFrame(np.array([["男", 14],["女", 61]]), columns=["sex", "num"])
x_test.loc[2,'num'] = np.nan
# 在训练集上进行训练                 
encoder2 = ce.TargetEncoder(cols=["sex", "num"], handle_unknown='value',  handle_missing='value').fit(x_train,y_train)
print("\n 目标编码信息为:\n %s" % encoder2)

encoder_train = encoder2.transform(x_train)
print("\n 经过目标编码后的训练集数据为:\n %s" % encoder_train)

encoder_test = encoder2.transform(x_test)
print("\n 经过目标编码后的测试集数据为:\n %s" % encoder_test)

# 验证一下计算的结果,在测试集中,男性类别的编码值为 0.059601
# 先验概率
prior = y_train.mean()
# 默认为1.0
min_samples_leaf = 1.0 
# 默认为1.0
smoothing = 1.0
# 训练集中,三个样本包含‘male’这个标签
n = 3 
# 在训练集中,这三个包含‘male’标签的样本中仅有零个有正的因变量标签
n_positive = 0 
smoove = 1 / (1 + np.exp(-(n - min_samples_leaf) / smoothing))
male_encode = prior * (1-smoove) + smoove * n_positive/n
# return 0.05960146101105884,与要验证的值吻合
print("\n 校验数据,男性编码值为:\n %s" % male_encode)

输出结果为:

目标编码信息为:
 TargetEncoder(cols=['sex', 'num'], drop_invariant=False, handle_missing='value',
              handle_unknown='value', min_samples_leaf=1, return_df=True,
              smoothing=1.0, verbose=0)

 经过目标编码后的训练集数据为:
         sex  num
0  0.059601  0.5
1  0.059601  0.5
2  0.059601  0.5
3  0.940399  0.5
4  0.940399  0.5
5  0.940399  0.5

 经过目标编码后的测试集数据为:
         sex  num
0  0.059601  0.5
1  0.940399  0.5
2  0.500000  0.5

 校验数据,男性编码值为:
 0.05960146101105884

 

 

 

lightgbm处理类别特征 lightGBM的categorical_feature(类别特征)使用 http://www.luyixian.cn/news_show_253681.aspx lightGBM比XGBoost的1个改进之处在于对类别特征的处理, 不再需要将类别特征转为one-hot形式, 具体可参考这里. 在使用python API时(参考官方文档) 1.可以使用pd.DataFrame存放特征X, 每一... 阅读详情

相关推荐

catboost对类别特征处理的简单总结

catboost对类别特征处理简单总结 ctb针对类别特征的处理 怎么样做,使类别特征有更为丰富的表达? 1、Mean Encoding 1、【针对高基数的类别特征】 Mean Encoding:均值编码 场景: 如果某一个特征是定性的(categorical), 而这个特征的可能值非常多(高基数), 那么平均数编码(mean encoding)是一种高效的编码方式。 在实际应用中,这类特征工程能...

weixin_42944192的博客 7926

特征工程(四): 类别特征

向AI转型的程序员都关注了这个号????????????机器学习AI算法工程 公众号:datayx一个类别特征,见名思义,就是用来表达一种类别或标签。比如,一个类别特征能够表达世界上的...

datayx的文章 2909

CatBoost详解--原理+类别特征处理的技巧+加速

CatBoost详解

qq_42003997的博客 1万+

类别型特征

处理类别型编码时,需要综合考虑数据本身的特性:数据量,类别量,样本的分布特性,样本属性重要程度;算法的适应性:输入的数据的型式,算法效率,算法进度;实际处理问题的需要和目标.总之,针对这一类类别型特征的编码,其目的是将这类结构化的数据映射到一个易于算法处理的空间中.

fan1102958151的博客 1587

LGBM是如何处理类别特征,相比onehot编码的优势在哪

LGBM为什么可以直接输入类别特征,而不需要one-hot LGBM官方文档对如何处理类别特征的解释 Optimal Split for Categorical Features It is common to represent categorical features with one-hot encoding, but this approach is suboptimal f...

AndrewHR的博客 8716

类别特征的处理方法

1 标签编码(label encoder) from sklearn.preprocessing import LabelEncoder for col in cols: lbe= LabelEncoder() lbe.fit(pd.concat([train[col],test[col]]).values) train[col] = lbe.transform(train...

haoran_yang的博客 1059

类别特征的各种处理总结

持续更新。。。 文章目录one-hot(独热)编码为什么要独热编码?为什么特征向量要映射到欧式空间?独热编码优缺点什么情况下(不)用独热编码?什么情况下(不)需要归一化?one-hot编码为什么可以解决类别型数据的离散值问题Tree Model不太需要one-hot编码独热编码的编程实现LabelEncoder编码LabelEncoder编码的编程实现计数编码(频率编码) one-hot(独热)编...

步步心愿的博客 4275

类别特征编码 ———特征工程

特征工程中,对类别型特征进行编码的12种方式

井底小蛙的博客 1619

【漫话机器学习系列】021.类别特征(Categorical Feature)

类别特征(Categorical Feature)是指取值为有限的、不连续的类别或标签的数据特征。在机器学习和数据分析中,类别特征经常用于描述对象的分类属性,例如颜色、性别、职业等。类别特征在实际问题中非常常见,是数据分析和机器学习建模的重要组成部分。 通过选择合适的处理方法,模型可以更准确地理解类别特征的含义并提高预测性能。

IT古董 1943

快手商业化风控内容审核场景下的大模型早期探索与应用

在处理大量的自动语音识别(ASR)输出时,面临的主要挑战之一是文本的冗长和格式混乱,这严重影响了审核人员的阅读效率。为了解决这一问题,我们利用大模型的理解能力对文本进行智能总结,可以显著优化文本内容,使其更加清晰并且具有可读性。该方式极大地提高了审核过程的效率,审核人员可以更快地处理信息,减少了处理时间和劳动强度。

kuaishoutech的博客 2740

python docx设置标题中文字体rPr.rFonts.set(qn(‘w:eastAsia‘),u‘黑体‘),报错‘NoneType‘ object has no attribute ‘set‘

一、我的代码: 因为要编一个报告自动化生成的代码,所以用了python docx,在设置标题自己写了一段代码,要求将标题设置成:一级标题 黑体 小四 from docx import Document from docx.oxml.ns import qn from docx.shared import Pt def add_Head(document, level, text, font, size): # document word对象 # level 几级标题 # text 标题内容 # f

qq_40272386的博客 8858

XGBoost之类别特征的处理

目录 Label encoding与 One-Hot encoding Label encoding one-hot encoding 利用神经网络的Embedding层处理类别特征 Embedding简介 Network Embedding算法分类 Embedding实战 转载:https://www.biaodianfu.com/categor...

永远飞翔的鸟 2万+

微波无源器件 功分器1 新型方波导双模无功功分器

本名证明了一种基于有着特定功能的(dedicated)T性匹配元件(散射件)的进化结点的新型波导双模两路功分器的可行性。这个散射件,有着面向三个部分的匹配部分,提供了等效功分并且朝着对应的输出端口传输矩形波导的两个TE10/TE01正交模式。所提出的设计紧凑,易于比例变化并且能够级联来获得。

qq_45245770的博客 1391

决策树中的类别特征问题(关于label encode还是one-hot的讨论)

就决策树来说,算法本身是(为数不多的)天然支持categorical feature的机器学习算法,但是如果是high cardinality,那么理论上最优的split要遍历所有二分组合,是指数级的复杂度,Python的implementation只解决数值型feature,把这个难题丢给用户了,xgboost也是一样,作者的解释是为了给用户更多自主权决定如何处理categorical feat...

永远飞翔的鸟 8649

利用大规模生物活性挖掘,计算识别针对癌基因驱动蛋白 EGFR、BRAF 与 CDK4 的高亲和力抑制剂

背景:精准癌症治疗需要小分子抑制剂与致瘤蛋白靶点之间的精确匹配。方法:我们使用 Python 及 ChEMBL 数据库 API 开发了一套计算流程,系统性地筛选针对 EGFR、BRAF 与 CDK4 的高亲和力配体。对 IC50 < 1000 nM 的生物活性进行过滤,并检索候选化合物的分子结构(SMILES)以供后续优化。结果:本研究共识别出 [插入总数] 种独特化合物。其中,对 BRAF 激酶而言,我们挑选了一批 IC50 低至 6.0 nM 的高效实验性化合物。

u012133341的博客 96

从工具选型到落地实践:吃透 SAP Fiori Launchpad 配置工具体系

摘要: SAP Fiori Launchpad配置远非简单添加应用和分配角色,涉及技术目录、业务目录、Spaces/Pages等多层管理。官方推荐新工具分工:技术目录用FLPAM维护应用定义,业务目录用FLPCM编排应用组合,Spaces/Pages优化用户体验布局,而传统Groups模式已被标记弃用。这种分层治理模式(定义层-编排层-展示层)能有效解决传输混乱、升级兼容性问题,尤其适合大规模项目实施。关键在于区分技术配置与业务呈现,避免将所有功能堆砌在单一旧工具中。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 103

特征工程之类别特征

类别特征 一个类别特征,见名思义,就是用来表达一种类别或标签。比如,一个类别特征能够表达世界上的主要城市,一年四季,或者说一个公司的产品(石油、路程、技术)。在真实世界的数据集中,类别值的数量总是无限的。同时这些值一般可以用数值来表示。但是,与其他数值变量不一样的是,类别特征的数值变量无法与其他数值变量进行比较大小。(作为行业类型,石油与旅行无法进行比较)它们被称之为非序的。 一个简单的问题可...

Wenrui Xie的博客 2392

RuoYi-Cloud-Plus使用minio进行文件上传图片后无法预览解决_修改minio配置minio桶权限---SpringCloud工作笔记198

在文件管理的位置,发现刚刚上传的图片文件,会显示 预览图片失败 后来经过多方查看,发现是minio的配置的问题。可以看到首先登录RuoYi-Cloud-Plus系统然后,打开文件管理页面可以看到,当上传了图片文件以后。登录以后,选中左侧Buckets,可以看到有自己用的桶,找到以后点击打开。显示文件展示中,文件预览失败,那么这个时候,去修改minio的配置。可以看到,点击配置管理,这里我们启用的是minio对吧。默认是没有配置的这个时候,是允许下载,但不允许预览的.

添柴程序猿的专栏 5568

【机器学习解惑】什么是类别特征?与数值特征区别及编码方式

在机器学习应用中,特征通常分为数值特征与类别特征。数值特征可能是年龄、身高、价格等,而类别特征(Categorical Feature)则表示无法直接度量其大小关系的离散变量,比如性别(male/female)、城市(北京/上海/广州/…)等。由于类别特征与数值特征呈现不同的数据分布与含义,对类别特征的处理方式往往需要进行额外的编码或转换

人工智能(AI)技术,大模型技术,深度学习,机器学习,计算机视觉,AI工具实践应用等分享 1703

Android SELinux——neverallow问题处理(十六)

遇到 neverallow 规则问题,千万别急着去注释/剔除里面原有的规则(原生的尽量别动)。增加 allow 规则是常见的解决办法,但是随着 android 版本的升级,系统对 SELinux 的管控越来越严,增加了大量的 neverallow。一般情况下,向默认标签授予权限的做法是错误的,其中许多权限都是 neverallow 规则所不允许的。按照上面方法去添加 SELinux 可能会违反了 neverallow 规则,编译时候会报 neverallow 相关的错误。

小旭的专栏 2677

【物联网】基于LORA组网的远程环境监测系统设计(ThingsCloud云平台版)_资料编号34

实现一主多从的LORA组网远程通信,主机和两个从机都配备了STM32F103单片机与 LoRa 模块,主机作为中心设备及WIFI网关,负责接收和发送数据到远程物联网平台和手机APP,两个从机则负责采集数据并通过各自的 LoRa组网将数据发送给主机。

嵌入式阿齐Archie 1万+

【集成学习解惑】CatBoost 如何解决类别特征的处理问题?

CatBoost 如何解决类别特征的处理问题?

人工智能(AI)技术,大模型技术,深度学习,机器学习,计算机视觉,AI工具实践应用等分享 1570

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

类别特征处理与实体嵌入

常见的类别特征处理方法 one-hot (太经典这里不再介绍) histgram 映射 Entity Embeddings(实体嵌入) histgram 映射 比如我们根据人们的一些身体特征来预测这个人会不会得糖尿病 其中有一个类别特征为男或者女,这时候我们如何对这个特征进行映射处理呢。 按照histgram 的处理方式,会按照预测的类别的占比来标注属性。也是假如有这样一个统计列

张月鹏的博客 6973

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

CatBoost 完整解析:类别特征友好的梯度提升框架

CatBoost(Categorial Boosting)是由 Yandex(俄罗斯搜索引擎公司)开源的梯度提升框架,专为类别特征处理优化。无需手动 one-hot / LabelEncoding,原生支持类别特征,并解决梯度偏差问题CatBoost 的定位:与 LightGBM、XGBoost 同属 GBDT 家族专注于类别特征和小样本高维稀疏场景原生支持类别特征,不需要手动编码防止信息泄漏,泛化性能好自动特征组合,提升模型表达能力支持 GPU 加速、分布式训练CatBoost 最大亮点是。

2501_91641025的博客 984

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

推荐系统类别特征的embedding

推荐系统类别特征的embedding

u013385018的专栏 540
上一篇: 连续特征
下一篇: 数据清洗
less97
博客等级 码龄12年 60粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值