Je cherche à créer un graphique de surface de la fonction d'erreur dans la régression linéaire. Je le fais comme ça:
class RégressionLinéaire:
def __init__(self):
self.data = pd.read_csv("data.csv")
def computeCost(self):
j = 0.5 * (
(self.data.hypothesis - self.data.y)**2).sum() / self.data.y.size
return j
def regress(self, theta0, theta1):
self.data["hypothesis"] = theta1 * self.data.x + theta0
def plotCostFunction3D(self):
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
theta0_vals = np.linspace(-100, 100, 200)
theta1_vals = np.linspace(-100, 100, 200)
costs = []
for theta0 in theta0_vals:
for theta1 in theta1_vals:
self.regress(theta0, theta1)
costs.append(self.computeCost())
ax.plot_surface(
theta0_vals,
theta1_vals,
np.array(costs),
)
if __name__ == "__main__":
regression = RégressionLinéaire()
regression.plotCostFunction3D()
plt.show()
Je reçois l'erreur suivante:
ValueError: L'argument Z doit être en 2 dimensions.
Je sais que j'ai besoin d'utiliser np.meshgrid
pour theta0_vals
et theta1_vals
, mais je ne suis pas sûr comment calculer les coûts à partir de ces résultats. Comment devrais-je m'y prendre?