带有正则化的 Numpy.polyfit

计算科学 Python 插值 麻木的 回归 曲线拟合
2021-12-24 02:31:18

我正在尝试使用 numpy polyfit 方法将正则化添加到我的解决方案中。我的非常规解决方案是

coefficients = np.polynomial.polynomial.polyfit(x,y,5)
ypred = np.polynomial.polynomial.polyval(x,coefficients)

我将如何修改它以添加 L2 正则化?

1个回答

这是我为了使用正则化拟合多项式而开发的一段代码:

/* x_tr 和 y_tr 是训练数据,x_te 和 y_te 测试数据 */
度 = 4
identity_size = 度数 + 1
x_tilda = np.array([x_tr, np.ones(len(x_tr))]).transpose()

对于范围内的度数(2,度数 + 1): x_tilda = np.append(np.array(np.power(x_tr, degree))[np.newaxis].transpose(), x_tilda, axis=1)

y_reg = y_tr

identidad = np.identity(identity_size)

def get_theta(rho): mul1 = np.linalg.inv( np.add( np.matmul(x_tilda.transpose(),x_tilda), np.dot(identidad, rho))) mul2 = np.matmul(x_tilda.transpose(), y_reg) 返回 np.matmul(mul1, mul2)

def poly(x, rho): theta = get_theta(rho) print("Theta polyfit:", np.polyfit(x_tr,y_reg, degree)) print("Theta 公式:", get_theta(rho))

p = np.poly1d(theta) return p(x) rho = 0 // this is the regularization param plt.figure() plt.scatter(x_te,poly(x_te, rho), c ='r') plt.scatter(x_te,y_te, c ='b')<code>

上述解决方案基于以下多项式公式(而不是 X,它使用 poly(X) 表示具有平方误差损失的一般分析解决方案。

β^=(XTX)1XTY