gpt4 book ai didi

python - 如何在 Scipy 线性规划(非负最小二乘法)中添加正则化

转载 作者:行者123 更新时间:2023-12-05 03:12:01 26 4
gpt4 key购买 nike

这是我使用 Scipy's NNLS 的 LP 代码:

import numpy as np
from numpy import array
from scipy.optimize import nnls

def by_nnls(A=None, B=None):
""" Linear programming by NNLS """
#print "NOF row = ", A.shape[0]
A = np.nan_to_num(A)
B = np.nan_to_num(B)

x, rnorm = nnls(A,B)
x = x / x.sum()
# print repr(x)
return x

B1 = array([ 22.133, 197.087, 84.344, 1.466, 3.974, 0.435,
8.291, 45.059, 5.755, 0.519, 0. , 30.272,
24.92 , 10.095])
A1 = array([[ 46.35, 80.58, 48.8 , 80.31, 489.01, 40.98,
29.98, 44.3 , 5882.96],
[ 2540.73, 49.53, 26.78, 30.49, 48.51, 20.88,
19.92, 21.05, 19.39],
[ 2540.73, 49.53, 26.78, 30.49, 48.51, 20.88,
19.92, 21.05, 19.39],
[ 30.95, 1482.24, 100.48, 35.98, 35.1 , 38.65,
31.57, 87.38, 33.39],
[ 30.95, 1482.24, 100.48, 35.98, 35.1 , 38.65,
31.57, 87.38, 33.39],
[ 30.95, 1482.24, 100.48, 35.98, 35.1 , 38.65,
31.57, 87.38, 33.39],
[ 15.99, 223.27, 655.79, 1978.2 , 18.21, 20.51,
19. , 16.19, 15.91],
[ 15.99, 223.27, 655.79, 1978.2 , 18.21, 20.51,
19. , 16.19, 15.91],
[ 16.49, 20.56, 19.08, 18.65, 4568.97, 20.7 ,
17.4 , 17.62, 25.51],
[ 33.84, 26.58, 18.69, 40.88, 19.17, 5247.84,
29.39, 25.55, 18.9 ],
[ 42.66, 83.59, 99.58, 52.11, 46.84, 64.93,
43.8 , 7610.12, 47.13],
[ 42.66, 83.59, 99.58, 52.11, 46.84, 64.93,
43.8 , 7610.12, 47.13],
[ 41.63, 204.32, 4170.37, 86.95, 49.92, 87.15,
51.88, 45.38, 42.89],
[ 81.34, 60.16, 357.92, 43.48, 36.92, 39.13,
1772.07, 68.43, 38.07]])

用法:

In [9]: by_nnls(A=A1,B=B1)
Out[9]:
array([ 0.70089761, 0. , 0.06481495, 0.14325696, 0.01218972,
0. , 0.02125942, 0.01906576, 0.03851557])

我的问题是如何在LP系统那里添加regularization因子?我对使用 Scipy 以外的解决方案持开放态度。

最佳答案

您可以通过使用包含每个变量权重平方根的对角矩阵扩展 A 矩阵并在b 向量。

lamb = 1
n_variables = A1.shape[1]

A2 = concatenate([A1, sqrt(lamb)*eye(n_variables)])
B2 = concatenate([B1, zeros(n_variables)])

by_nnls(A=A2, B=B2)

尝试将新成本函数扩展为求和,您会发现它与向其中添加一个 norm(lambda * x) ** 2 项完全相同。

关于python - 如何在 Scipy 线性规划(非负最小二乘法)中添加正则化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35422578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com