No aprendizado supervisionado, o modelo é treinado com dados rotulados. Um exemplo clássico é a regressão linear.
import pandas as pd
from sklearn.model_selection import train_test_split as tts
from sklearn.linear_model import LinearRegression as lr
from sklearn.metrics import mean_squared_error as mse
# Criar um DataFrame de exemplo
data = {'idade': [25, 30, 45, 40, 50], 'salario': [50000, 54000, 61000, 58000, 62000]}
df = pd.DataFrame(data)
# Definir variáveis independentes e dependentes
X = df[['idade']]
y = df['salario']
# Dividir os dados em conjuntos de treinamento e teste
X_treino, X_teste, Y_treino, Y_teste = tts(X, y, test_size=0.2, random_state=42)
# Treinar um modelo de regressão linear
modelo = lr()
modelo.fit(X_treino, Y_treino)
# Fazer previsões e avaliar o modelo
y_pred = modelo.predict(X_teste)
erro_quadratico_medio = mse(Y_teste, y_pred)
print(f'Erro Médio Quadrático: {erro_quadratico_medio}')
No aprendizado não supervisionado, o modelo é treinado com dados não rotulados. Um exemplo é o algoritmo de clustering K-means.
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# Criar um DataFrame de exemplo
data = {
'idade' : [ 25 , 30 , 45 , 40 , 50 ],
'salario': [ 50000 , 54000 , 61000 , 58000 , 62000 ]}
df = pd.DataFrame(data)
# Treinar o modelo K-means
kmeans = KMeans(n_clusters=2, random_state=42)
kmeans.fit(df)
# Adicionar os rótulos de cluster ao DataFrame
df['cluster'] = kmeans.labels_
# Visualizar os clusters
plt.scatter(df['idade'], df['salario'], c=df['cluster'])
plt.xlabel('Idade')
plt.ylabel('Salário')
plt.show()
No aprendizado por reforço, o modelo aprende a tomar decisões sequenciais. Q-learning é um exemplo de algoritmo de aprendizado por reforço.
import numpy as np
# Definir parâmetros do Q-learning
gamma = 0.9
alpha = 0.1
num_episodes = 100
# Inicializar a tabela Q
Q = np.zeros((5, 2))
# Definir uma política de escolha de ação (exploração vs. exploração)
def choose_action(state):
if np.random.uniform(0, 1) < 0.1:
return np.random.choice([0, 1])
else:
return np.argmax(Q[state, :])
# Treinamento Q-learning
for episode in range(num_episodes):
state = np.random.randint(0, 5)
while -4 < state < 4:
action = choose_action(state)
next_state = state + 1 if action == 1 else state - 1
reward = 1 if next_state == 4 else 0
Q[state, action] += alpha * (reward + gamma * np.max(Q[next_state, :]) - Q[state, action])
state = next_state
print("Tabela Q aprendida:")
print(Q)