|11个常见的分类特征的编码技术( 二 )


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

编码后

代码如下:
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编码的预测因子时 , 预测因子被处理成与编码到相同的尺度 , 这样可以直接比较线性逻辑回归方程中的变量 。
例如下面的数据

会被编码为:

代码如下:
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 EncodingHelmert Encoding将一个级别的因变量的平均值与该编码中所有先前水平的因变量的平均值进行比较 。
反向 Helmert 编码是类别编码器中变体的另一个名称 。它将因变量的特定水平平均值与其所有先前水平的水平的平均值进行比较 。

会被编码为

代码如下:
import category_encoders as ce
encoder=ce.HelmertEncoder(cols=’Dept’)
new_df=encoder.fit_transform(df[‘Dept’
)
new_hdf=pd.concat([dfnew_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)