StringSimilarityEncoder#
- class feature_engine.encoding.StringSimilarityEncoder(top_categories=None, keywords=None, missing_values='impute', variables=None, ignore_format=False)[源代码][源代码]#
StringSimilarityEncoder() 将分类变量替换为一组浮点变量,这些变量捕捉类别名称之间的相似性。新变量的值介于0和1之间,其中0表示没有相似性,1表示类别名称之间的完全匹配。
相似度度量是一个在范围 [0, 1] 内的浮点数。它定义为 2 * M / T,其中 T 是两个比较类别中元素的总数,M 是匹配的数量。注意,如果序列完全相同,则为 1,如果它们没有任何共同之处,则为 0。
例如,类别“dog”和“dig”之间的相似度为0.66。T是两个类别中元素的总数,即6。这两个词之间有2个匹配项,字母d和g,因此:2 * M / T = 2 * 2 / 6 = 0.66。
这种编码类似于独热编码,因为每个类别都被编码为一个新变量。但不同的是,这些值不是1或0,而是观测类别与虚拟变量之间的相似度。
例如,如果一个变量有3个类别:狗、挖和猫,StringSimilarityEncoder() 将创建3个新变量:var_dog、var_dig 和 var_cat,并且对于观察值狗,它们的值将是:1、0.66、0。对于观察值挖,它们的值将是:0.66、1、0。而对于猫,它们的值将是:0、0、1。
编码器可以选择仅为最受欢迎的类别生成相似性变量,即在大多数观察中存在的类别。这种行为可以通过参数
top_categories
来指定。缺失值
StringSimilarityEncoder() 默认会将缺失数据替换为空字符串,然后返回与剩余变量的相似度。或者,可以设置为在变量有缺失值时返回错误,或者忽略它们。
未见类别
StringSimilarityEncoder() 通过在
fit()
期间为其他已见类别分配相似度度量,来处理未见类别。分类变量
编码器默认情况下只会对分类变量(类型为’object’或’categorical’)进行编码。你可以传递一个变量列表进行编码。或者,编码器会自动找到并编码所有分类变量。
数值变量
使用
ignore_format=True
,您可以选择将数值变量编码。使用相似性度量对数值变量进行编码对于条形码等变量是有意义的。在这种情况下,您可以输入要编码的变量列表(推荐),或者转换器将自动选择所有变量。更多详情请参见 用户指南。
- 参数
- top_categories: int, default=None
如果为 None,将为变量的每个唯一类别创建虚拟变量。或者,我们可以指定要编码的最频繁类别的数量。在这种情况下,只会为那些流行类别创建相似变量。
- missing_values: str, default=’impute’
指示是否应忽略、引发或填充缺失值。如果为’raise’,当`fit`或`transform`的数据集包含缺失值时,转换器将返回错误。如果为’ignore’,在学习参数或执行转换时将忽略缺失数据。如果为’impute’,转换器将用空字符串’’替换缺失值,然后返回相似度度量。
- 关键词: 字典, 默认=无
包含一组用于创建相似性变量的关键词的字典。格式应为:dict(feature: [keyword1, keyword2, …])。编码器将使用这些关键词来创建相似性变量。字典可以为所有要编码的特征定义,或者仅为其中的一部分定义。在这种情况下,对于字典中未指定的特征,编码器将从数据中识别类别。
- 变量: 列表, 默认=无
将要编码的分类变量的列表。如果为 None,编码器将默认查找并转换所有类型为对象或分类的变量。你也可以让转换器接受数值变量,参见参数
ignore_format
。- ignore_format: bool, default=False
此转换器仅对对象类型或分类类型的变量进行操作。要覆盖此行为并允许转换器也转换数值变量,请设置为
True
。如果
ignore_format
为False
,编码器将自动选择类型为对象或分类的变量,或检查用户输入的变量是否为对象或分类类型。如果为True
,编码器将选择所有变量或接受用户输入的所有变量,包括那些被转换为数值类型的变量。简而言之,当你想要编码数值变量时,设置为
True
。
- 属性
- encoder_dict_:
包含将创建虚拟变量的类别的字典。
- 变量_
将被转换的变量组。
- feature_names_in_:
列出在
fit
过程中看到的特征名称。- n_features_in_:
在拟合中使用的训练集中的特征数量。
参见
feature_engine.encoding.OneHotEncoder
dirty_cat.SimilarityEncoder
注释
该编码器将通过测量已见类别与未见类别之间的字符串相似性来编码未见类别。
在计算相似度之前,不进行任何文本预处理。
在转换后,原始的分类变量会从返回的数据集中移除。取而代之的是,返回二进制变量。
参考文献
- 1
Cerda P, Varoquaux G, Kégl B. “相似性编码用于学习带有脏分类变量的数据”. 机器学习, Springer Verlag, 2018.
- 2
Cerda P, Varoquaux G. “编码高基数字符串分类变量”。IEEE 知识与数据工程汇刊,2020年。
示例
>>> import pandas as pd >>> from feature_engine.encoding import StringSimilarityEncoder >>> X = pd.DataFrame(dict(x1 = [1,2,3,4], x2 = ["dog", "dig", "dagger", "hi"])) >>> sse = StringSimilarityEncoder() >>> sse.fit(X) >>> sse.transform(X) x1 x2_dog x2_dig x2_dagger x2_hi 0 1 1.000000 0.666667 0.444444 0.0 1 2 0.666667 1.000000 0.444444 0.4 2 3 0.444444 0.444444 1.000000 0.0 3 4 0.000000 0.400000 0.000000 1.0
方法
拟合:
了解每个变量的独特类别。
fit_transform:
拟合数据,然后进行转换。
get_feature_names_out:
获取转换的输出特征名称。
get_params:
获取此估计器的参数。
设置参数:
设置此估计器的参数。
转换:
用距离变量替换分类变量。
- fit(X, y=None)[源代码][源代码]#
学习每个变量的唯一类别。如果指定了 top_categories,它将学习最流行的类别。或者,它学习每个变量的所有唯一类别。
- 参数
- X: pandas 数据框,形状为 = [样本数, 特征数]
训练输入样本。可以是整个数据框,而不仅仅是需要编码的变量。
- y: pandas series, default=None
目标。在此编码中不需要。您可以传递 y 或 None。
- fit_transform(X, y=None, **fit_params)[源代码]#
拟合数据,然后进行转换。
使用可选参数
fit_params
将转换器拟合到X
和y
,并返回X
的转换版本。- 参数
- X类似数组的形状 (n_samples, n_features)
输入样本。
- y类似数组的形状 (n_samples,) 或 (n_samples, n_outputs), 默认=None
目标值(无监督变换为 None)。
- **拟合参数dict
附加的拟合参数。
- 返回
- X_newndarray 数组的形状为 (n_samples, n_features_new)
转换后的数组。
- get_metadata_routing()[源代码]#
获取此对象的元数据路由。
请查看 用户指南 以了解路由机制的工作原理。
- 返回
- 路由MetadataRequest
一个封装了路由信息的
MetadataRequest
。
- get_params(deep=True)[源代码]#
获取此估计器的参数。
- 参数
- 深度bool, 默认=True
如果为 True,将返回此估计器及其包含的作为估计器的子对象的参数。
- 返回
- 参数dict
参数名称映射到它们的值。