0
respostas

[Projeto] ajustamos manualmente um modelo linear

============================================================

1) Importar bibliotecas

============================================================

import numpy as np
import matplotlib.pyplot as plt

============================================================

2) Fixar a nova semente (ALTERAÇÃO PEDIDA)

============================================================

np.random.seed(199)

============================================================

3) Gerar dados de classificação (exemplo similar à aula)

============================================================

Classe 0

x1_class0 = np.random.randn(50) - 2
x2_class0 = np.random.randn(50)

Classe 1

x1_class1 = np.random.randn(50) + 2
x2_class1 = np.random.randn(50)

Concatenar dados

X1 = np.concatenate([x1_class0, x1_class1])
X2 = np.concatenate([x2_class0, x2_class1])

Labels

y = np.array([0]*50 + [1]*50)

============================================================

4) Função para plotar o modelo linear

============================================================

def plotmodel(w1, w2, b):
plt.figure(figsize=(6,6))

# Plot das classes
plt.scatter(X1[y==0], X2[y==0], color='red', label='Classe 0')
plt.scatter(X1[y==1], X2[y==1], color='blue', label='Classe 1')

# Criar linha de decisão
x_vals = np.linspace(min(X1), max(X1), 100)

# Equação da reta: w1*x1 + w2*x2 + b = 0
# => x2 = -(w1*x1 + b)/w2
x2_vals = -(w1 * x_vals + b) / w2

plt.plot(x_vals, x2_vals, color='black', label='Fronteira de decisão')

plt.legend()
plt.title(f"Modelo linear: w1={w1}, w2={w2}, b={b}")
plt.xlabel("X1")
plt.ylabel("X2")
plt.grid(True)
plt.show()

============================================================

5) Ajuste manual dos pesos (SOLUÇÃO)

============================================================

Valores sugeridos pelo instrutor

w1 = -1
w2 = 6
b = 0

Plot do modelo

plotmodel(w1, w2, b)