J'ai écrit un code débutant pour calculer les coefficients d'un modèle linéaire simple en utilisant l'équation normale.Implémentation d'équations normales en Python/Numpy
# Modules
import numpy as np
# Loading data set
X, y = np.loadtxt('ex1data3.txt', delimiter=',', unpack=True)
data = np.genfromtxt('ex1data3.txt', delimiter=',')
def normalEquation(X, y):
m = int(np.size(data[:, 1]))
# This is the feature/parameter (2x2) vector that will
# contain my minimized values
theta = []
# I create a bias_vector to add to my newly created X vector
bias_vector = np.ones((m, 1))
# I need to reshape my original X(m,) vector so that I can
# manipulate it with my bias_vector; they need to share the same
# dimensions.
X = np.reshape(X, (m, 1))
# I combine these two vectors together to get a (m, 2) matrix
X = np.append(bias_vector, X, axis=1)
# Normal Equation:
# theta = inv(X^T * X) * X^T * y
# For convenience I create a new, tranposed X matrix
X_transpose = np.transpose(X)
# Calculating theta
theta = np.linalg.inv(X_transpose.dot(X))
theta = theta.dot(X_transpose)
theta = theta.dot(y)
return theta
p = normalEquation(X, y)
print(p)
Utilisation du petit ensemble de données trouvées ici:
http://www.lauradhamilton.com/tutorial-linear-regression-with-octave
-je obtenir les coefficients: [-0,34390603; 0.2124426] en utilisant le code ci-dessus à la place de: [24.9660; 3.3058]. Quelqu'un pourrait-il aider à clarifier où je vais mal?
vous avez votre X et Y autour de la mauvaise façon de l'exemple! Si je les inverse, j'obtiens les réponses que vous suggérez – jeremycg