首页 > 试题广场 >

多项式特征的Phi变换

[编程题]多项式特征的Phi变换
  • 热度指数:1287 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
实现一个函数以执行Phi变换,通过生成多项式特征将输入特征映射到更高维的空间。这种变换允许像线性回归这样的模型通过引入表示原始输入特征多项式组合的新特征维度来拟合非线性数据。

例如,对于输入特征 xdegree=2 的多项式特征将生成 [1, x, x^2]。这种转换使得线性模型可以学习非线性关系。

输入描述:
第一行为一个数值列表,表示需要转换的特征值
第二行为一个整数,表示多项式的次数(degree)



输出描述:
输出一个嵌套列表,其中每个内部列表包含一个数据点的转换后的特征。每个内部列表的长度为degree+1,包含从0次幂到degree次幂的值。

如果degree小于0或输入列表为空,则返回空列表。
示例1

输入

[2.0, 3.0]
2

输出

[[1.0, 2.0, 4.0], [1.0, 3.0, 9.0]]

备注:
1. Python3对应的输入、输出已给出,您只用实现核心功能函数即可。
2. 支持numpy、scipy、pandas、scikit-learn库。
import numpy as np

def phi_transform(data: list[float], degree: int) -> list[list[float]]:
    """
    Perform a Phi Transformation to map input features into a higher-dimensional space by generating polynomial features.

    Args:
        data (list[float]): A list of numerical values to transform.
        degree (int): The degree of the polynomial expansion.

    Returns:
        list[list[float]]: A nested list where each inner list represents the transformed features of a data point.
    """
    #第一种
    # if degree < 0 or not data:
    #   return []
    # result=[]
    # for row in data:
    #   poly_feature=[row ** power for power in range(degree+1)]
    #   poly_feature=list(map(float,poly_feature))
    #   result.append(poly_feature)
    # return result
    #第二种
    # if degree < 0 or not data:
    #   return []
    # return [[float(row  ** power) for power in range(degree+1)] for row in data]
    #第三种
    if degree < 0 or not data:
        return []
    return np.power(np.array(data)[:,None],np.arange(degree+1)).astype(float).tolist()  

if __name__ == "__main__":
    data = eval(input())
    degree = int(input())
    print(phi_transform(data, degree))

发表于 2026-04-19 17:39:11 回复(0)