非负最小二乘的矩阵基础

时间:2018-07-31 15:12:30

标签: numpy matrix linear-algebra least-squares

如果您具有基函数,例如10个高斯:

x = np.arange(50, dtype=float)
sigma = 20
centers = np.arange(10)*5
basis = np.exp(-(x[:, None]-centers)**2/sigma) # each column is a Gaussian

您想使用相同的基础来拟合大量数据,您可以将法线矩阵求逆,并且可以使用快速的dot产品进行拟合

mat_inv = np.linalg.inv(basis.T.dot(basis))
mat_inv_x_basis = mat_inv.dot(basis.T)

mat_inv_x_basis可以用于我的所有数据集。要获取最适合数据的basis系数,

data = np.exp(-(x-25)**2/sigma*0.25) + np.random.normal(size=x.shape)*0.05
coeff = mat_inv_x_basis.dot(data)

以上coeff可以是正负号。

如果我想获取非负系数,则必须使用sp.optimize.nnls,它比dot乘积慢30倍。除了nnls之外,是否有等同于反转法线矩阵的运算?

也就是说,如果我有我的基础(全部为非负数),是否可以将其转换为可用于快速计算非负数coeff的东西?

0 个答案:

没有答案