例如,对于特征[a, b],degree=2时生成的多项式特征为
第一行输入一个二维numpy数组,表示特征矩阵X。第二行输入一个正整数,表示多项式的最高次数degree。
输出一个二维numpy数组,形状为(n_samples, n_output_features),其中n_output_features是所有可能的多项式特征组合数。
[[1, 2], [3, 4]] 2
[[ 1. 1. 2. 1. 2. 4.] [ 1. 3. 4. 9. 12. 16.]]
1.对应的输入、输出已给出,您只用实现核心功能函数即可。2.支持numpy、scipy、pandas、scikit-learn库。
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))