You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否存在类似sklearn.PolynomialFeatures的字符串交互特征生成函数?若无为如何实现?

寻找字符串版的PolynomialFeatures等价函数

我们知道sklearn.PolynomialFeatures可以生成数值向量的多项式和交互特征,示例如下:

import sklearn
X = [[1,2,3]]
G = sklearn.PolynomialFeatures(degree = 3, interaction_only = True, bias = False)
print(G.fit_transform(X))
# 输出:array([[1., 2., 3., 2., 3., 6., 6.]])

现在想知道是否存在可处理字符串的等价函数?若输入数组为X = [['a','b','c']],该函数需输出array([['a','b','c','ab','ac','bc','abc']]),且支持任意输入向量。若不存在此类函数,应如何创建?


首先明确说哈,scikit-learn里没有现成的字符串版等价函数——毕竟PolynomialFeatures是专门为数值特征设计的,核心是做乘法运算,不是字符串拼接。不过完全不用担心,我们可以自己实现一个功能完全匹配的版本,逻辑其实很清晰:

一、核心思路

和数值版的逻辑对应:

  1. 按指定的degree生成不同长度的特征索引组合
  2. 对每个组合里的字符串进行拼接,得到交互特征
  3. 整理成和输入格式匹配的二维数组输出

二、自定义实现代码

我们可以借助itertools里的combinations(处理无重复的交互特征)和product(处理允许重复的多项式特征)来实现,代码如下:

import numpy as np
from itertools import combinations, product

def string_polynomial_features(X, degree=3, interaction_only=True, bias=False):
    # 先统一输入格式为二维数组
    X = np.array(X)
    if X.ndim == 1:
        X = X.reshape(1, -1)
    
    result = []
    for sample in X:
        current_features = []
        # 处理bias项(对应数值版里的偏置,这里默认为空字符串,可按需开启)
        if bias:
            current_features.append('')
        
        # 遍历从1到设定的degree的特征组合长度
        for d in range(1, degree + 1):
            # 如果是interaction_only模式,只生成不同特征的组合(无重复索引)
            if interaction_only:
                feature_indices = combinations(range(len(sample)), d)
            else:
                # 非interaction_only模式,允许重复使用同一特征(比如生成'aa'这种)
                feature_indices = product(range(len(sample)), repeat=d)
            
            # 对每个索引组合拼接字符串
            for indices in feature_indices:
                combined_str = ''.join([sample[idx] for idx in indices])
                current_features.append(combined_str)
        
        result.append(current_features)
    
    return np.array(result, dtype=str)

三、测试你的示例

用你给出的测试用例跑一下,完全符合预期:

X = [['a','b','c']]
output = string_polynomial_features(X, degree=3, interaction_only=True, bias=False)
print(output)
# 输出:array([['a', 'b', 'c', 'ab', 'ac', 'bc', 'abc']], dtype='<U3')

四、额外功能说明

这个自定义函数还支持数值版的其他参数逻辑:

  • 多样本输入:比如X = [['a','b'], ['x','y']],会分别输出每个样本的特征组合
  • 关闭interaction_only:设置interaction_only=False后,会生成包含重复特征的组合,比如输入['a','b']、degree=2时,会输出['a','b','aa','ab','ba','bb']
  • bias参数:开启后会在每个样本的特征列表开头添加一个空字符串,对应数值版里的偏置项

内容的提问来源于stack exchange,提问作者A. Bohyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 18:42:46