线性方程组的最小二乘解

线性方程组的最小二乘解

  《Python程序设计与科学计算》中“线性方程组的最小二乘解”的一些笔记。
  二元一次回归函数y=mx+c,通过最小二乘法求解参数mc,分别表示最小二乘法回归曲线(此处为直线)的斜率和截距。在NumPy下的函数形式为:
   numpy.linalg.lstsq(array_A,array_B,rcond=None)[0]
  其中,array_A是一个nx2的数组,array_B是一个nx1的数组。
  下面我们展现线性函数应用:分析个人年龄与每个人最大心率之间的线性关系,构成函数y=mx+c,其中x为个人年龄,y为最大心率。

# 数据输入
x_d = [18, 23, 25, 35, 65, 54, 34, 56, 72, 19, 23, 42, 18, 39, 37]
y_d = [202, 186, 187, 180, 156, 169, 174, 172, 153, 199, 193, 174, 198, 183, 178]  # 个人的最大心率
n = len(x_d)
# 计算
import numpy.linalg

B = numpy.array(y_d)
A = numpy.array(([[x_d[j], 1] for j in range(n)]))
X = numpy.linalg.lstsq(A, B, rcond=None)[0] # 此处rcond=None可以省略,但编译后会出错,所以建议加上去
a = X[0] # 第一个元素就是斜率
b = X[1] # 第二个元素就是截距
print("Line is: y=", a, "x+", b)
# 绘图
import matplotlib.pyplot as plt

plt.plot(numpy.array(x_d), B, 'ro', label='Original data', markersize=10)
plt.plot(numpy.array(x_d), a * numpy.array(x_d) + b, label='Fitted line')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.show()

  如果不添加rcond=None,则会出现如下情况,如图1:
图1 不添加rcond=None时出现的错误信息
  但是不添加rcond=None,并不会影响图像结果显示,如图2,
  输出结果为:
     Line is: y= -0.7977265649330422 x+ 210.0484584241669
图2 最小二乘法求解运行结果图

Guess you like

Origin blog.csdn.net/weixin_44359479/article/details/115528069