1
resposta

[Dúvida] Duvida com a obtenção da norma atraves de coeficientes aleatorios

Poderia me dizer onde esta o problema no código?

Já tentei olhar várias vezes e não estou conseguindo encontrar o que fiz de diferente

Até a parte dos coeficientes dado a formula dos minimos quadrados está tudo ok mas quando chega na parte da menor norma através do aletorio com seed os numeros divergem

Estou chegando na menor norma de 124.90 ao inves da 104.405

import numpy as np
import matplotlib.pyplot as plt
from typing import Any
#c:\Users\leodo\OneDrive\Documentos\python_portfolio\ALURA_PYT_DSC\


def coeficiente_angular( x : Any , y : Any) -> tuple:
    """
    Calcula o coeficiente angular de uma reta.
    """
    n = np.size(x)
    a = (n * np.sum(x * y) - np.sum(x) * np.sum(y)) / (n * np.sum(x**2) - np.sum(x)**2)
    b = np.mean(y) - a * np.mean(x)
    return a,b

url = 'https://raw.githubusercontent.com/allanspadini/numpy/dados/citrus.csv'
dado = np.loadtxt(url, delimiter=',',skiprows=1,dtype=object)
diametro = dado[:,:2]
peso = dado[:,[0,2]]
peso_laranja = peso[peso[:,0] =='orange']
peso_toranja = peso[peso[:,0] =='grapefruit']
diametro_laranja = diametro[diametro[:,0] =='orange']
diametro_toranja = diametro[diametro[:,0] =='grapefruit']

x_laranja = diametro_laranja[:,1].astype(float)
y_laranja = peso_laranja[:,1].astype(float)
x_toranja = diametro_toranja[:,1].astype(float)
y_toranja = peso_toranja[:,1].astype(float)

cof_laranja_a,cof_laranja_b = coeficiente_angular(x_laranja,y_laranja)
cof_toranja_a,cof_toranja_b = coeficiente_angular(x_toranja,y_toranja)

print(f'Coeficiente a: {cof_laranja_a} e Coeficiente b: {cof_laranja_b}')
print(f'Coeficiente a: {cof_toranja_a} e Coeficiente b: {cof_toranja_b}')


b = 17
norma = np.array([])
np.random.seed(84)
coef_angulares = np.random.uniform(low=0.0,high=30.0,size=100)

for i in range(100):
  norma = np.append(norma,np.linalg.norm(y_laranja- (coef_angulares[i]*x_laranja+ b)))

print(coef_angulares)
print(np.min(norma))
1 resposta

O problema que você está enfrentando pode estar relacionado ao cálculo da norma e como você está gerenciando a escolha de coeficientes no código. Vamos examinar algumas partes do código para entender o que pode estar acontecendo:

Problemas Possíveis: Uso do np.append dentro do loop: O uso de np.append dentro do loop pode ser ineficiente. Toda vez que você chama np.append, o NumPy cria um novo array para armazenar o resultado, o que torna a operação muito mais lenta e pode gerar erros indesejados. Em vez disso, é melhor inicializar o array com o tamanho necessário e preencher diretamente os valores dentro do loop.

Uso de np.random.uniform: A geração de coeficientes angulares aleatórios usando np.random.uniform(low=0.0, high=30.0, size=100) pode estar fazendo com que a norma calculada não seja precisa, já que a distribuição dos coeficientes pode não estar próxima do valor real esperado para a minimização da norma. Isso pode gerar um valor de norma inesperadamente grande, dependendo da distribuição aleatória dos coeficientes.

Diferença nos valores esperados de norma (104.405 vs 124.90): O cálculo da norma depende diretamente dos valores dos coeficientes. Se os coeficientes não estiverem adequados para o modelo de mínimos quadrados, a norma será muito diferente do valor esperado. A geração de coeficientes aleatórios não é uma forma confiável de encontrar o mínimo, pois os coeficientes não são otimizados para a minimização da norma.