Advertisement
robsonjuniorrj4

multiple_linear_regression

May 22nd, 2024 (edited)
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.57 KB | Source Code | 0 0
  1. import numpy as np
  2.  
  3.  
  4. def regressao_linear_multipla(X: np.ndarray, y: np.ndarray) -> np.ndarray:
  5.     """
  6.    Calcula os coeficientes da regressão linear múltipla.
  7.  
  8.    Parameters
  9.    ----------
  10.    X : np.ndarray
  11.        Variáveis independentes.
  12.    y : np.ndarray
  13.        Variável dependente.
  14.  
  15.    Returns
  16.    -------
  17.    np.ndarray
  18.        Coeficientes da regressão linear múltipla.
  19.    """
  20.     # Adiciona uma coluna de 1s para o termo de interceptação
  21.     X = np.column_stack([np.ones(X.shape[0]), X])
  22.    
  23.     # Calcula (X^T * X)
  24.     X_transpose = X.T
  25.     X_transpose_X = X_transpose.dot(X)
  26.    
  27.     # Calcula (X^T * y)
  28.     X_transpose_y = X_transpose.dot(y)
  29.    
  30.     # Resolve o sistema de equações para obter os coeficientes
  31.     coeficientes = np.linalg.solve(X_transpose_X, X_transpose_y)
  32.    
  33.     return coeficientes
  34.  
  35. def prever(X: np.ndarray, coeficientes: np.ndarray) -> np.ndarray:
  36.     # Adiciona uma coluna de 1s para o termo de interceptação
  37.     X = np.column_stack([np.ones(X.shape[0]), X])
  38.     return X.dot(coeficientes)
  39.  
  40. def funcao_custo(X: np.ndarray, y: np.ndarray, beta: np.ndarray) -> float:
  41.     """
  42.    Calcula a função de custo da regressão linear.
  43.  
  44.    Parameters
  45.    ----------
  46.    X : np.ndarray
  47.        Variáveis independentes.
  48.    y : np.ndarray
  49.        Variável dependente.
  50.    beta : np.ndarray
  51.        Coeficientes da regressão linear.
  52.  
  53.    Returns
  54.    -------
  55.    float
  56.        Custo da regressão linear.
  57.    """
  58.     m = len(y)
  59.     y_pred = X.dot(beta)
  60.     erro = y_pred - y
  61.     custo = (1 / (2 * m)) * np.dot(erro.T, erro)
  62.     return custo
  63.  
  64. def gradiente_descendente(X: np.ndarray, y: np.ndarray, beta: np.ndarray, alpha: float, num_iters: int) -> tuple:
  65.     """
  66.    Executa o algoritmo de gradiente descendente para encontrar os coeficientes da regressão linear.
  67.  
  68.    Parameters
  69.    ----------
  70.    X : np.ndarray
  71.        Variáveis independentes.
  72.    y : np.ndarray
  73.        Variável dependente.
  74.    beta : np.ndarray
  75.        Coeficientes da regressão linear.
  76.    alpha : float
  77.        Taxa de aprendizado.
  78.    num_iters : int
  79.        Número de iterações.
  80.  
  81.    Returns
  82.    -------
  83.    tuple
  84.        Coeficientes da regressão linear e histórico de custo.
  85.    """
  86.     m = len(y)
  87.     custo_hist = np.zeros(num_iters)
  88.    
  89.     for i in range(num_iters):
  90.         y_pred = X.dot(beta)
  91.         erro = y_pred - y
  92.         gradiente = (1 / m) * X.T.dot(erro)
  93.         beta = beta - alpha * gradiente
  94.         custo_hist[i] = funcao_custo(X, y, beta)
  95.        
  96.     return beta, custo_hist
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement