Поверхность в Matplotlib плоская
В Matplotlib поверхность является плоскостью, а должна быть объемной в пространстве. Видно, что она построена правильно, но как бы спроецирована в плоскость. Поверхность задаётся функцией от двух переменных, в математике ошибок не вижу:
theta0_vals = np.linspace(-10, 10, 100)
theta1_vals = np.linspace(-1, 4, 100)
assemble_temp = np.array([[0], [0]])
J_vals = zeros((len(theta0_vals), len(theta1_vals)))
for k in range(len(theta0_vals)):
for l in range(len(theta1_vals)):
assemble_temp = np.array([[theta0_vals[k]], [theta1_vals[l]]])
J_vals[k][l] = (sum(((x_ones).dot(assemble_temp) - y) ** 2)) / (2 * len(x))
fig=figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(theta0_vals, theta1_vals, J_vals)
show()
Обновлено: Нужно было юзать meshgrid.
theta0_vals = np.linspace(-10, 10, 100)
theta1_vals = np.linspace(-1, 4, 100)
th1, th2 = np.meshgrid(theta0_vals, theta0_vals)
assemble_temp = np.array([[0], [0]])
J_vals = zeros((len(theta0_vals), len(theta1_vals)))
for k in range(len(theta0_vals)):
for l in range(len(theta1_vals)):
assemble_temp = np.array([[theta0_vals[k]], [theta1_vals[l]]])
J_vals[k][l] = (sum(((x_ones).dot(assemble_temp) - y) ** 2)) / (2 * len(x))
fig=figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(th1, th2, J_vals)
show()


