Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- def regressao_linear_multipla(X: np.ndarray, y: np.ndarray) -> np.ndarray:
- """
- Calcula os coeficientes da regressão linear múltipla.
- Parameters
- ----------
- X : np.ndarray
- Variáveis independentes.
- y : np.ndarray
- Variável dependente.
- Returns
- -------
- np.ndarray
- Coeficientes da regressão linear múltipla.
- """
- # Adiciona uma coluna de 1s para o termo de interceptação
- X = np.column_stack([np.ones(X.shape[0]), X])
- # Calcula (X^T * X)
- X_transpose = X.T
- X_transpose_X = X_transpose.dot(X)
- # Calcula (X^T * y)
- X_transpose_y = X_transpose.dot(y)
- # Resolve o sistema de equações para obter os coeficientes
- coeficientes = np.linalg.solve(X_transpose_X, X_transpose_y)
- return coeficientes
- def prever(X: np.ndarray, coeficientes: np.ndarray) -> np.ndarray:
- # Adiciona uma coluna de 1s para o termo de interceptação
- X = np.column_stack([np.ones(X.shape[0]), X])
- return X.dot(coeficientes)
- def funcao_custo(X: np.ndarray, y: np.ndarray, beta: np.ndarray) -> float:
- """
- Calcula a função de custo da regressão linear.
- Parameters
- ----------
- X : np.ndarray
- Variáveis independentes.
- y : np.ndarray
- Variável dependente.
- beta : np.ndarray
- Coeficientes da regressão linear.
- Returns
- -------
- float
- Custo da regressão linear.
- """
- m = len(y)
- y_pred = X.dot(beta)
- erro = y_pred - y
- custo = (1 / (2 * m)) * np.dot(erro.T, erro)
- return custo
- def gradiente_descendente(X: np.ndarray, y: np.ndarray, beta: np.ndarray, alpha: float, num_iters: int) -> tuple:
- """
- Executa o algoritmo de gradiente descendente para encontrar os coeficientes da regressão linear.
- Parameters
- ----------
- X : np.ndarray
- Variáveis independentes.
- y : np.ndarray
- Variável dependente.
- beta : np.ndarray
- Coeficientes da regressão linear.
- alpha : float
- Taxa de aprendizado.
- num_iters : int
- Número de iterações.
- Returns
- -------
- tuple
- Coeficientes da regressão linear e histórico de custo.
- """
- m = len(y)
- custo_hist = np.zeros(num_iters)
- for i in range(num_iters):
- y_pred = X.dot(beta)
- erro = y_pred - y
- gradiente = (1 / m) * X.T.dot(erro)
- beta = beta - alpha * gradiente
- custo_hist[i] = funcao_custo(X, y, beta)
- return beta, custo_hist
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement