numpy.linalg.lstsq
-
numpy.linalg.lstsq(a, b, rcond='warn')[source] -
Возвращает решение метода наименьших квадратов для линейного матричного уравнения.
Решает уравнение
a x = bпутём вычисления вектораx, который минимизирует евклидову норму 2|| b - a x ||^2. Уравнение может быть недоопределённым, хорошо определённым или переопределённым (т. е. число линейно независимых строкaможет быть меньше, равно или больше числа линейно независимых столбцов). Еслиaявляется квадратной матрицей полного ранга, тоx(за исключением погрешности округления) является «точным» решением уравнения.Параметры: -
a : (M, N) array_like -
Матрица «коэффициентов».
-
b : {(M,), (M, K)} array_like -
Значения ординаты или «зависимой переменной». Если
bдвумерная, решение метода наименьших квадратов рассчитывается для каждого изKстолбцовb. -
rcond : float, optional -
Коэффициент отсечения для малых сингулярных значений
a. Для определения ранга сингулярные значения рассматриваются как нулевые, если они меньшеrcondраз наибольшего сингулярного значенияa.Изменено в версии 1.14.0: Если не задано, выдаётся предупреждение FutureWarning. Предыдущее значение по умолчанию
-1будет использовать точность вычислений как параметрrcond, новое значение по умолчанию будет использовать точность вычислений умноженную наmax(M, N). Чтобы отключить предупреждение и использовать новое значение по умолчанию, используйтеrcond=None, чтобы сохранить старое поведение, используйтеrcond=-1.
Возвращаемые значения: -
x : {(N,), (N, K)} ndarray -
Решение метода наименьших квадратов. Если
bдвумерная, решения находятся вKстолбцахx. -
residuals : {(1,), (K,), (0,)} ndarray -
Сумма остатков; квадрат евклидовой 2-нормы для каждого столбца в
b - a*x. Если рангaменьше N или M ≤ N, это пустой массив. Еслиbодномерный, это массив формы (1,). В противном случае форма (K,). -
rank : int -
Ранг матрицы
a. -
s : (min(M, N),) ndarray -
Сингулярные значения
a.
Возбуждает: - LinAlgError
-
Если вычисления не сходятся.
Примечания
Если
b— матрица, все результаты массивов возвращаются как матрицы.Примеры
Построение прямой,
y = mx + c, через некоторые шумные точки данных:>>> x = np.array([0, 1, 2, 3]) >>> y = np.array([-1, 0.2, 0.9, 2.1])
Рассматривая коэффициенты, мы видим, что прямая должна иметь градиент примерно 1 и пересекать ось y примерно в -1.
Мы можем переписать уравнение прямой как
y = Ap, гдеA = [[x 1]]иp = [[m], [c]]. Теперь используйтеlstsqдля решенияp:>>> A = np.vstack([x, np.ones(len(x))]).T >>> A array([[ 0., 1.], [ 1., 1.], [ 2., 1.], [ 3., 1.]])>>> m, c = np.linalg.lstsq(A, y, rcond=None)[0] >>> print(m, c) 1.0 -0.95
Постройте данные вместе с построенной прямой:
>>> import matplotlib.pyplot as plt >>> plt.plot(x, y, 'o', label='Original data', markersize=10) >>> plt.plot(x, m*x + c, 'r', label='Fitted line') >>> plt.legend() >>> plt.show()
-
© 2005–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.15.4/reference/generated/numpy.linalg.lstsq.html