赞
踩
LS算法是一种数学优化技术,也是一种机器学习常用算法。他通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便的求得未知的数据(1),并使得这些求得的数据与实际数据之间误差的平方和最小。除此之外最小二乘法还可用于曲线拟合(2),其他一些优化问题(3)也可通过最小化鞥能量或最大化熵用最小二乘法表示。
最小二乘法实际上解决的是当Ax=C无解的情况下的最优解。
- import numpy as np
- import matplotlib.pyplot as plt
-
-
- # 两个点A和C
- A = np.array([[3], [1]])
- C = np.array([[1], [3]])
-
- # np.linalg.inv: 计算矩阵的逆
- # np.linalg: 提供线性代数工具的模块
- # x' = (A.T*A)^(-1)*A.T*C
- AA = np.linalg.inv(A.T.dot(A))
- B = A.T.dot(C)
- l = AA.dot(B)
-
- # P=Ax'
- P = A.dot(l)
- x = np.linspace(-2, 2, 10)
- x.shape = (1, 10)
-
- # 画出直线y=ax
- # A:(2, 1)
- # x:(1, 9)
- # xx:(2, 9)
- xx = A.dot(x)
- fig = plt.figure(figsize=(10, 6))
- ax = fig.add_subplot(111)
- ax.plot(xx[0, :], xx[1, :])
-
- # 画出A点
- ax.plot(A[0], A[1], "ko")
-
- # 画出C点和P点的连线
- ax.plot([C[0], P[0]], [C[1], P[1]], "r-o")
-
- # 画出OC曲线
- ax.plot([0, C[0]], [0, C[1]], "m-o")
-
- # 画出坐标轴
- ax.axvline(x=0, color="b")
- ax.axhline(y=0, color="b")
-
- # 标写每个点的字母
- # margin: 偏移量
- # ax.text: 在坐标轴上添加文本
- margin = 0.1
- ax.text(A[0]+margin, A[1]+margin, r"A", fontsize=20)
- ax.text(C[0]+margin, C[1]+margin, r"C", fontsize=20)
- ax.text(P[0]+margin, P[1]+margin, r"P", fontsize=20)
- ax.text(0+margin, 0+margin, r"o", fontsize=20)
- ax.text(0+margin, 4+margin, r"y", fontsize=20)
- ax.text(4+margin, 0+margin, r"x", fontsize=20)
- plt.xticks(np.arange(-2, 3))
- plt.yticks(np.arange(-2, 3))
- ax.axis("equal")
- plt.show()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。