Решение системы линейных уравнений с ограничениями

Мне нужно решить большую систему линейных уравнений методом наименьших квадратов. До сих пор я нашел ответы без ограничений, но хотел бы ограничить свои ответы, чтобы они были неотрицательными. Код, который я использовал, показан ниже. «Лист 1» содержит матрицу размером 30x135, а «Лист 2» — матрицу размером 30x1.

 import pandas as pd
 import numpy as np
 df = pd.read_excel("C:\\example\price_analysis.xlsx", sheet_name = "Sheet1")
 print(df)
 dg = pd.read_excel("C:\\example\price_analysis.xlsx", sheet_name = "Sheet2")
 print(dg)
 z = np.linalg.lstsq(df,dg, rcond=None)
 print(z)

Я попытался использовать ответ из этого сообщения, но не смог не решить, как найти результат наименьших квадратов, где все значения положительные, а не просто изменить все отрицательные значения на 0.


person Ben Bishop    schedule 04.01.2019    source источник
comment
Это проблема линейного программирования, и один только NumPy может не решить ее. scipy, с другой стороны, должен иметь методы для этого.   -  person ForceBru    schedule 04.01.2019
comment
Это не LP, так как цель нелинейна. Естественным scipy-func будет nnls . Но вы также можете использовать некоторые из решателей scipy.optimize.minimize, как указано в вашей ссылке, но в этом случае: пропустите градиенты (и не используйте численное дифференцирование, как это сделано в ссылке). Первый будет быстрее и проще для небольших/плотных инстансов. Для больших/разреженных экземпляров L-BFGS-B внутри minimize будет намного быстрее.   -  person sascha    schedule 04.01.2019
comment
Ознакомьтесь также с этой веткой: datascience.stackexchange.com/questions/18258/   -  person psarka    schedule 04.01.2019
comment
Спасибо всем, метод nnls кажется хорошим способом решить мою проблему. У меня есть это для примера набора данных, но я не могу заставить его работать, когда я извлекаю свои данные из Excel: еще раз спасибо   -  person Ben Bishop    schedule 04.01.2019