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.13.0/reference/generated/numpy.linalg.lstsq.html