基于Sklearn的高效二阶多项式拟合及替代拟合方案咨询
嘿,我来给你支招!你用SVR的poly kernel做二阶拟合确实有点“杀鸡用牛刀”了,SVR本身的凸优化迭代过程对小数据集来说没必要这么复杂,这就是它慢的原因。下面给你几个更高效的方案:
最快速的二阶多项式拟合方案:PolynomialFeatures + LinearRegression
这是实现二阶多项式拟合的标准高效路径——先把原始特征转换为二阶多项式特征,再用线性回归拟合,本质就是二阶多项式回归,计算量极小,128个数据点瞬间就能跑完。
代码示例
import pandas as pd from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression # 提取数据(y用一维数组更简洁) X = df11[['P1FRAMES']] y = df11['A'] # 生成二阶多项式特征(比如将x转换为x、x²) poly_transformer = PolynomialFeatures(degree=2, include_bias=False) X_poly = poly_transformer.fit_transform(X) # 拟合模型并预测 poly_model = LinearRegression() poly_model.fit(X_poly, y) y_poly_fit = poly_model.predict(X_poly)
为什么这个更快?
LinearRegression基于最小二乘法的闭式解计算,不需要迭代优化,速度远快于SVR的凸优化过程。你之前设置的C=1e3会让SVR试图拟合更多细节,进一步增加了计算时间,完全没必要用于简单的二阶拟合场景。
备选方案:高斯过程回归(GPR)
如果你的数据不是严格的二阶多项式,或者需要得到拟合结果的不确定性估计,可以试试sklearn的高斯过程回归,128个数据点的计算压力也很小。
代码示例
from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C # 定义核函数(这里用带常数项的RBF核,也可以替换为多项式核) kernel = C(1.0, (1e-3, 1e3)) * RBF(1.0, (1e-2, 1e2)) gpr_model = GaussianProcessRegressor(kernel=kernel, random_state=42) # 拟合并预测(return_std=True可以得到预测的标准差,即不确定性) gpr_model.fit(X, y) y_gpr_fit, y_pred_std = gpr_model.predict(X, return_std=True)
GPR的优势
它能给出每个预测点的置信区间,适合需要分析拟合可靠性的场景,但计算量比线性回归略大,不过对于你的数据集来说完全没问题。
内容的提问来源于stack exchange,提问作者Tom Dry
相关产品推荐
相关产品推荐

