首页 > 试题广场 >

生成多项式特征

[编程题]生成多项式特征
  • 热度指数:94 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
实现一个函数来生成数据集的多项式特征。多项式特征是一种特征工程方法,通过组合原始特征的不同次幂来创建新的特征,可以帮助捕捉非线性关系。

例如,对于特征[a, b],degree=2时生成的多项式特征为 [1, a, b, a^2, ab, b^2]

输入描述:
第一行输入一个二维numpy数组,表示特征矩阵X。
第二行输入一个正整数,表示多项式的最高次数degree。


输出描述:
输出一个二维numpy数组,形状为(n_samples, n_output_features),其中n_output_features是所有可能的多项式特征组合数。
示例1

输入

[[1, 2], [3, 4]]
2

输出

[[ 1.  1.  2.  1.  2.  4.]
 [ 1.  3.  4.  9. 12. 16.]]

备注:
1.对应的输入、输出已给出,您只用实现核心功能函数即可。
2.支持numpy、scipy、pandas、scikit-learn库。
分享一个不需要itertools的解法,使用递归来生成幂次组合
import numpy as np
from itertools import combinations_with_replacement


def polynomial_features(X, degree):
    n_samples, n_features = X.shape

    powers = []
    generate_powers_recursively(n_features, degree, [], powers)
    powers = powers[::-1]
    powers.sort(key=sum)

    X_poly = np.ones((n_samples, len(powers)))
    for i in range(len(powers)):
        power_vector = powers[i]
        X_poly[:, i] = np.prod(X ** power_vector, axis=1)
    
    return X_poly


def generate_powers_recursively(n_features, degree, path, powers):
    if len(path) == n_features:
        powers.append([x for x in path])
        return

    for i in range(degree - sum(path) + 1):
        path.append(i)
        generate_powers_recursively(n_features, degree, path, powers)
        path.pop()


if __name__ == "__main__":
    X = np.array(eval(input()))
    degree = int(input())
    print(polynomial_features(X, degree))


发表于 2025-09-05 16:25:16 回复(0)