Извлечение коэффициентов многопараметрического уравнения с помощью numpy.polyfit - PullRequest
0 голосов
/ 03 февраля 2019

это один из тех вопросов, который, вероятно, будет совершенно очевидным после ответа, но сейчас я застрял.

Я пытаюсь воссоздать уравнение из результирующего набора данных и четырехпараметры, которые его создали.

Данные представлены в виде матрицы с последним столбцом, являющимся результатом.

Я видел, что numpy.polyfit допускает несколько значений для y, поэтомуЯ пытался ...

result=data[:,-1]
variables=data[:,0:-1]
factors=numpy.polyfit(result,variables,2)

Результат получается так:

[[-4.69652251e-01  8.09734523e-01  1.93673361e-02 -1.62700198e+00]
[ 1.42092582e+01 -7.06024402e+00 -9.94583683e-02  1.11882833e+01]
[ 7.44030682e+00  2.08161127e+01  2.65025708e-01  1.14229534e+01]]

Я предполагаю, что коэффициенты результата имеют вид

[[A^2,B^2,C^2,D^2]
 [A  ,B,  C,  D]
 [const,const,const,const]]

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

Во-первых, я даже прав насчет значения результатов polyfit?

Во-вторых, почему существуют четыре разные константы?Я должен сложить их вместе или как?

Это просто решение A против результата, затем B против результата и т. Д., А не объединенная многомерная минимизация целого ??(И если да, то как я могу сделать это вместо этого?)

Или я просто ошибаюсь, что в первую очередь делает полифит?

1 Ответ

0 голосов
/ 04 февраля 2019

Документы Polyfit говорят нам, что

Несколько наборов данных точек выборки, имеющих одинаковые x-координаты, могут быть установлены одновременно, передавая 2D-массив, содержащий одиннабор данных на столбец.

Позвольте нам понять это.Во-первых, давайте рассмотрим пример.Скажем, у нас есть 3 точки на плоскости, и мы хотим интерполировать их по полиному степени 1. Это означает, что мы хотим провести линию через заданные 3 точки, и эта линия должна иметь минимальное квадратное расстояние до этой точки.Скажем, у нас есть 3 балла: (1, 1), (2, 2), (3, 3).Очевидно, можно безошибочно найти линию, проходящую через эти точки, и эта линия равна y = x.Если мы думаем о линии в терминах y = a * x + b, то a = 1, b = 0.line y=x

Хорошо.А теперь давайте начнем с того, что приведем этот пример для клочковатого полифита:Теперь давайте сделаем пример с матрицей вместо одного вектора y.Документы сказали нам, что у нас просто несколько строк с одинаковыми координатами X.Давайте проверим это.Мы берем два набора точек: (1, 1), (2, 2), (3, 3) с подходящей для них линией y = x и (1, 2), (2, 4), (3, 6).Линия подгонки - y = 2x (проверьте!).

two lines

Мы транспонируем вторую матрицу, потому что полифит хочет этого.

X = np.array([1, 2, 3])
y = np.array([[1, 2, 3], [2, 4, 6]]).T
coeff = np.polyfit(X, y, deg=1)

coeff
>>> array([[1.00000000e+00, 2.00000000e+00],
       [1.20830315e-15, 2.41660629e-15]])

Мы видим, что у нас есть матрица с первой строкой (1, 2) и второй строкой (0, 0).Таким образом, первый столбец содержит коэффициенты для первой строки, а второй - для второй строки.Давайте проверим:

a, b = coeff[:, 0]
a * 10 + b
>>> 9.999999999999998

a, b = coeff[:, 1]
a * 100 + b
>>> 199.99999999999994

Итак, вы можете пропустить несколько строк с одинаковыми координатами X и получить много совпадений одновременно.Это может быть полезно, например, для преобразования функций для всего набора данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...