import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
X = 2 * np.random.rand(100, 1) # 生成100行,1列的矩阵,范围在(0,1)之间
y = 4 + 3 * X + np.random.randn(100, 1) # 生成的是(0, 1)之间的一个标准正态分布
X_b = np.c_[np.ones((100, 1)), X] # 生成首列为1,第二列为X分布的10*2的矩阵
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
"""
对X_b的矩阵进行內积计算
1,np.linalg.inv(X_b.T.dot(X_b)) 这一步代表对X_b矩阵的內积后的2*2矩阵进行求逆矩阵的运算
X_b.T.dot(X_b) A点积的结果是100个相加的结果之和 结果是斜对称矩阵
2,np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T) 此步代表求出的逆矩阵后在和转置矩阵进行点积,2*2 2*100 = 2*100
结果是第一行是 a11 * (X_b.T)j1 + a12*(X_b.T)j2
结果的第二行是 a21 * (X_b.T)j1 + a22*(X_b.T)j2
,3,y是100*1的矩阵
np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y) 此步骤代表与y的转置矩阵进行点积,得到 2*1的矩阵
y 的每一个数字与2的结果进行运算 与y相关
最终求得结果是一个2*1的矩阵
Q:中间的这些变换的意义是什么?
"""
X_new = np.array([[0], [2]])
X_new_b = np.c_[np.ones((2, 1)), X_new]
y_predict = X_new_b.dot(theta_best)
"""
y_predict X_new_b 2*2的矩阵,theta_best是一个2*1的矩阵
y_predict 与X_new_b(2*2)的矩阵与(2*1)的矩阵相乘得到的一个2*1的矩阵
"""
y_predict
plt.plot(X_new, y_predict, "r--")
plt.plot(X, y ,"b.")
"""
这能说明X_new,y_predict的图像与X,y的图像有什么区别吗?
"""
plt.axis([0, 2, 0, 15])
plt.show()
网友评论