Requisito previo: NumPy
Considere un conjunto de datos,
área (x1 ) | habitaciones (x2 ) | edad ( x3 ) | precio (a) |
23 | 3 | 8 | 6562 |
15 | 2 | 7 | 4569 |
24 | 4 | 9 | 6897 |
29 | 5 | 4 | 7562 |
31 | 7 | 6 | 8234 |
25 | 3 | 10 | 7485 |
dejenos considerar,
Aquí el área, las habitaciones, la antigüedad son características/variables independientes y el precio es la variable objetivo/dependiente. Como sabemos la hipótesis para la regresión lineal múltiple viene dada por:
dónde,
NOTA: Aquí nuestro objetivo es encontrar el valor óptimo para los parámetros θ. Para encontrar el valor óptimo de θ podemos usar la ecuación normal. Entonces, después de encontrar los valores de θ, nuestra hipótesis lineal o modelo lineal estará listo para predecir el precio de las nuevas funciones o entradas.
La ecuación normal es:
Teniendo en cuenta el conjunto de datos anterior, podemos escribir,
X: una array de todas las funciones independientes con tamaño ( nxm ) donde m es un número total de muestras de entrenamiento y n es el número total de funciones incluidas (x 0 = 1)
X T: transposición de array X
y: y es una array 1D/array de columnas/vector de objetivo/variable dependiente con tamaño m donde m es un número total de muestras de entrenamiento.
Entonces, para el ejemplo anterior, podemos escribir:
X = [[ 1, 23, 3, 8],
[1, 15, 2, 7],
[1, 24, 4, 9],
[1, 29, 5, 4],
[1, 31, 7, 6],
[ 1, 25, 3, 10]]
X T = [[ 1, 1, 1, 1, 1, 1],
[23, 15, 24, 29, 31, 25],
[3, 2, 4, 5, 7, 3],
[ 8, 7, 9, 4, 6, 10]]
y= [6562, 4569, 6897, 7562, 8234, 7485]
Código: Implementación del Modelo de Regresión Lineal con Ecuación Normal
Python
import numpy as np class LinearRegression: def __init__(self): pass def __compute(self, x, y): try: ''' # multiline code var = np.dot(x.T,x) var = np.linalg.inv(var) var = np.dot(var,x.T) var = np.dot(var,y) self.__thetas = var ''' # one line code self.__thetas = np.dot(np.dot(np.linalg.inv(np.dot(x.T,x)),x.T),y) except Exception as e: raise e def fit(self, x, y): x = np.array(x) ones_ = np.ones(x.shape[0]) x = np.c_[ones_,x] y = np.array(y) self.__compute(x,y) @property def coef_(self): return self.__thetas[0] @property def intercept_(self): return self.__thetas[1:] def predict(self, x): try: x = np.array(x) ones_ = np.ones(x.shape[0]) x = np.c_[ones_,x] result = np.dot(x,self.__thetas) return result except Exception as e: raise e # testing of code... # datasets x_train = [[2,40],[5,15],[8,19],[7,25],[9,16]] y_train = [194.4, 85.5, 107.1, 132.9, 94.8] x_test = [[12,32],[2,40]] y_test = [] # testing the model... lr = LinearRegression() lr.fit(x,y) print(lr.coef_,lr.intercept_) print(lr.predict(x_t))
Producción :
Valor de intercepción = 305.3333333334813
Los coeficientes son = [236,85714286 -4,76190476 102,9047619]
Valor real de datos de prueba = [8234, 7485]
Valor previsto de datos de prueba = [8232. 7241.52380952]