Modelo de Regresión Lineal Múltiple con Ecuación Normal

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: 

$h_{\theta}(x)=\theta_{0} x_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\ldots+\theta_{n} x_{n}$

Parameters: $\theta=\left\{\theta_{0}, \theta_{1}, \theta_{2}, \ldots \theta_{n}\right\}$ \\ Features: $x=\left\{x_{0}, x_{1}, x_{2}, \ldots x_{n}\right\}$

dónde,$x_{0} = 1$

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:

$\theta=\left(X^{T} X\right)^{-1} X^{\mathrm{T}} y$

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]

Publicación traducida automáticamente

Artículo escrito por ask2sujoy y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *