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

如何为多项式回归添加预测功能?能否实现类Scikit-learn的predict函数?

如何为自定义多项式回归实现类似Scikit-learn的predict功能?

当然可以实现类似Scikit-learn中predict的功能!我们可以基于你现有的自定义多项式回归代码,通过几处调整和封装,就能完成这个需求。下面一步步来拆解实现过程:

1. 修复现有代码的向量兼容性问题

你的monomial函数目前用了math.pow,它只支持标量输入,无法处理批量数据(比如列表或numpy数组)。我们把它换成numpy的np.pow,这样就能支持向量化运算,为批量预测打下基础:

import numpy as np
import math

def monomial(a,b):
    # 替换math.pow为np.pow,支持向量输入
    return lambda x : a * np.pow(x,b)

2. 封装类似Scikit-learn的predict函数

Scikit-learn的predict函数可以接收单个样本、列表或numpy数组作为输入,返回对应的预测值。我们基于你训练好的模型(即polyTrain返回的加权和函数),封装一个这样的函数:

def predict(model, X):
    # 将输入统一转换为numpy数组,确保兼容性
    X = np.asarray(X)
    # 直接调用训练好的模型函数,因为我们已经让它支持向量输入
    return model(X)

这个函数的逻辑很简单:先把输入转换成numpy数组(不管你传的是单个数值、列表还是数组),然后直接用训练好的模型计算预测值——因为修改后的monomial支持向量运算,模型函数会自动对数组中的每个元素计算预测结果。

3. 完整使用示例

我们用一个实际的例子来验证整个流程:

# 准备训练数据:近似y = x² + 1
x_train = [1, 2, 3, 4, 5]
y_train = [2, 5, 10, 17, 26]

# 训练2阶多项式回归模型
trained_model = polyTrain(x_train, y_train, order=2)

# 预测单个值
single_pred = predict(trained_model, 6)
print(f"单个值预测结果:{single_pred}")  # 输出约37.0

# 预测多个值
multi_pred = predict(trained_model, [6, 7, 8])
print(f"多个值预测结果:{multi_pred}")  # 输出[37. 50. 65.]左右

4. 额外优化:修正polyTrain中的小细节

你代码里初始化w的时候用了[1 for i in range(0,order)],但阶数为order的多项式应该有order+1个系数(从x⁰到x^order)。虽然这行代码最后会被w = numpy.dot(pinv,t)覆盖,不影响结果,但为了代码可读性,可以改成:

def polyTrain(x,y,order):
    # 初始化权重向量(长度为order+1,对应0到order阶的单项式)
    w = [1]*(order+1)
    F = polyList(order)
    design = [[f(i) for f in F] for i in x]
    # 转换为numpy数组
    w = np.asarray(w)
    design = np.asarray(design)
    # 求解Ax=b,[x值×(order+1)][系数]^T = [y值]
    pinv = np.linalg.pinv(design)
    t = np.asarray(y).T
    # 权重的最大似然估计为w* = pinv(design)y.T
    w = np.dot(pinv,t)
    return weightedSum(w,F)

这样代码逻辑更清晰,避免后续维护时产生误解。

内容的提问来源于stack exchange,提问作者user330959

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:23:07