numpy.linalg.lstsq
-
numpy.linalg.lstsq(a, b, rcond='warn')[source] -
Возвращает решение методом наименьших квадратов для линейного матричного уравнения.
Решает уравнение
вычисляя вектор
x, который минимизирует квадратную евклидову норму. Уравнение может быть недоопределённым, точно определённым или переопределённым (т. е. число линейно независимых строк
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] >>> m, c (1.0 -0.95) # may vary
Постройте данные вместе с построенной прямой:
>>> 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.17.0/reference/generated/numpy.linalg.lstsq.html