Introducció

La regressió logística és un algorisme de Machine Learning supervisat utilitzat principalment per a tasques de classificació binària. A diferència de la regressió lineal, que es fa servir per predir valors continus, la regressió logística prediu la probabilitat que una instància pertanyi a una de dues classes possibles.

Conceptes Clau

  1. Funció Sigmoide: La funció sigmoide és una funció matemàtica que transforma qualsevol valor real en un valor entre 0 i 1. És la base de la regressió logística.
  2. Logit: És la funció logarítmica de les probabilitats, també coneguda com la funció log-odds.
  3. Versemblança: És una mesura de quina tan bé el model prediu les dades observades. En la regressió logística, s'utilitza la funció de versemblança per ajustar els paràmetres del model.

Funció Sigmoide

La funció sigmoide es defineix com:

\[ \sigma(z) = \frac{1}{1 + e^{-z}} \]

On \( z \) és una combinació lineal de les característiques d'entrada.

Fórmula de la Regressió Logística

La fórmula de la regressió logística és:

\[ P(Y=1|X) = \sigma(\beta_0 + \beta_1X_1 + \beta_2X_2 + \ldots + \beta_nX_n) \]

On:

  • \( P(Y=1|X) \) és la probabilitat que la sortida \( Y \) sigui 1 donades les característiques \( X \).
  • \( \beta_0 \) és la intersecció.
  • \( \beta_1, \beta_2, \ldots, \beta_n \) són els coeficients de les característiques \( X_1, X_2, \ldots, X_n \).

Exemple Pràctic

Dataset

Utilitzarem un dataset fictici per predir si un estudiant serà admès a una universitat en funció de la seva puntuació en dos exàmens.

Codi en Python

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# Generar dades fictícies
data = {
    'Exam1': [34, 45, 50, 60, 70, 80, 85, 90, 95, 100],
    'Exam2': [78, 82, 85, 88, 90, 92, 94, 96, 98, 100],
    'Admitted': [0, 0, 0, 0, 1, 1, 1, 1, 1, 1]
}

df = pd.DataFrame(data)

# Dividir les dades en característiques i etiquetes
X = df[['Exam1', 'Exam2']]
y = df['Admitted']

# Dividir les dades en conjunts d'entrenament i prova
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Crear el model de regressió logística
model = LogisticRegression()

# Entrenar el model
model.fit(X_train, y_train)

# Predir amb el model
y_pred = model.predict(X_test)

# Avaluar el model
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)
class_report = classification_report(y_test, y_pred)

print(f'Accuracy: {accuracy}')
print('Confusion Matrix:')
print(conf_matrix)
print('Classification Report:')
print(class_report)

Explicació del Codi

  1. Importació de Llibreries: Importem les llibreries necessàries per a la manipulació de dades, visualització i creació del model.
  2. Generació de Dades: Creem un dataset fictici amb puntuacions d'exàmens i si l'estudiant ha estat admès o no.
  3. Divisió de Dades: Dividim les dades en característiques (X) i etiquetes (y), i després en conjunts d'entrenament i prova.
  4. Creació del Model: Utilitzem LogisticRegression de sklearn per crear el model.
  5. Entrenament del Model: Entrenem el model amb les dades d'entrenament.
  6. Predicció i Avaluació: Prediem les etiquetes per al conjunt de prova i avaluem el model utilitzant mètriques com l'accuracy, la matriu de confusió i l'informe de classificació.

Exercici Pràctic

Enunciat

Utilitza el mateix dataset fictici per entrenar un model de regressió logística que prediu si un estudiant serà admès a la universitat en funció de la seva puntuació en tres exàmens. Afegeix una nova columna 'Exam3' amb puntuacions fictícies i repeteix el procés d'entrenament i avaluació del model.

Solució

# Afegir una nova columna 'Exam3'
df['Exam3'] = [65, 70, 75, 80, 85, 90, 92, 94, 96, 98]

# Dividir les dades en característiques i etiquetes
X = df[['Exam1', 'Exam2', 'Exam3']]
y = df['Admitted']

# Dividir les dades en conjunts d'entrenament i prova
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Crear el model de regressió logística
model = LogisticRegression()

# Entrenar el model
model.fit(X_train, y_train)

# Predir amb el model
y_pred = model.predict(X_test)

# Avaluar el model
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)
class_report = classification_report(y_test, y_pred)

print(f'Accuracy: {accuracy}')
print('Confusion Matrix:')
print(conf_matrix)
print('Classification Report:')
print(class_report)

Errors Comuns

  1. No Normalitzar les Dades: La regressió logística pot ser sensible a les escales de les característiques. És recomanable normalitzar les dades abans d'entrenar el model.
  2. Sobreajustament: Utilitzar massa característiques pot portar a sobreajustar el model. Utilitza tècniques com la validació creuada per evitar-ho.
  3. Interpretació Incorrecta de les Probabilitats: Recorda que la sortida de la regressió logística és una probabilitat. Cal establir un llindar per decidir la classe final.

Conclusió

La regressió logística és una eina poderosa per a tasques de classificació binària. Comprendre els seus fonaments i saber com implementar-la correctament és essencial per a qualsevol professional de Machine Learning. Amb la pràctica i l'experimentació, es poden obtenir models precisos i útils per a una àmplia varietat d'aplicacions.

Curs de Machine Learning

Mòdul 1: Introducció al Machine Learning

Mòdul 2: Fonaments d'Estadística i Probabilitat

Mòdul 3: Preprocessament de Dades

Mòdul 4: Algoritmes de Machine Learning Supervisat

Mòdul 5: Algoritmes de Machine Learning No Supervisat

Mòdul 6: Avaluació i Validació de Models

Mòdul 7: Tècniques Avançades i Optimització

Mòdul 8: Implementació i Desplegament de Models

Mòdul 9: Projectes Pràctics

Mòdul 10: Recursos Addicionals

© Copyright 2024. Tots els drets reservats