python3__机器学习__神经网络基础算法__最小二乘法(LS算法)

版权声明:本文为博主原创文章,未经博主允许不得转载,希望能在相互交流中共同成长。【大红色:一级标题 绿色:二级标题 二红色:三级标题 黄色:四级标题】 https://blog.csdn.net/admin_maxin/article/details/85323416

1.LS算法说明

LS算法是一种数学优化技术,也是一种机器学习常用算法。他通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便的求得未知的数据(1),并使得这些求得的数据与实际数据之间误差的平方和最小。除此之外最小二乘法还可用于曲线拟合(2),其他一些优化问题(3)也可通过最小化鞥能量或最大化熵用最小二乘法表示。

2.LS算法原理

最小二乘法实际上解决的是当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()

猜你喜欢

转载自blog.csdn.net/admin_maxin/article/details/85323416