numpy.linalg.lstsq
-
numpy.linalg.lstsq(a, b, rcond=-1)[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.Возвращает: x : {(N,), (N, K)} ndarray
Решение метода наименьших квадратов. Если
bявляется двумерной, решения находятся вKстолбцахx.residuals : {(), (1,), (K,)} 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)[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()
(Исходный код, png, pdf)
© 2008–2017 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.12.0/reference/generated/numpy.linalg.lstsq.html