En aquest tema, explorarem els diferents tipus d'algoritmes de Machine Learning (ML) que s'utilitzen per resoldre problemes reals. Els algoritmes de ML es poden classificar en diverses categories segons el tipus d'aprenentatge que utilitzen i el tipus de problema que resolen. A continuació, veurem les categories principals i alguns dels algoritmes més populars dins de cada categoria.

  1. Classificació d'Algoritmes de Machine Learning

1.1. Algoritmes Supervisats

Els algoritmes supervisats aprenen d'un conjunt de dades etiquetades, on cada exemple d'entrenament està associat amb una etiqueta o resultat desitjat.

Exemples d'algoritmes supervisats:

  • Regressió Lineal
  • Regressió Logística
  • K-Nearest Neighbors (KNN)
  • Suport Vector Machines (SVM)
  • Àrbre de Decisió
  • Random Forest
  • Gradient Boosting Machines (GBM)

1.2. Algoritmes No Supervisats

Els algoritmes no supervisats treballen amb dades no etiquetades i intenten trobar estructures ocultes o patrons dins de les dades.

Exemples d'algoritmes no supervisats:

  • K-Means Clustering
  • Hierarchical Clustering
  • Principal Component Analysis (PCA)
  • Independent Component Analysis (ICA)
  • Aprenentatge d'Associació (Apriori, Eclat)

1.3. Algoritmes Semi-Supervisats

Els algoritmes semi-supervisats utilitzen una combinació de dades etiquetades i no etiquetades per millorar l'aprenentatge.

1.4. Algoritmes d'Aprenentatge per Reforç

Els algoritmes d'aprenentatge per reforç aprenen a través de l'experiència, on un agent pren accions en un entorn per maximitzar una recompensa acumulada.

Exemples d'algoritmes d'aprenentatge per reforç:

  • Q-Learning
  • Deep Q-Networks (DQN)
  • Proximal Policy Optimization (PPO)

  1. Algoritmes Supervisats

2.1. Regressió Lineal

La regressió lineal és un mètode per modelar la relació entre una variable dependent i una o més variables independents.

from sklearn.linear_model import LinearRegression

# Exemple de codi per a regressió lineal
X = [[1], [2], [3], [4], [5]]
y = [1, 2, 3, 4, 5]

model = LinearRegression()
model.fit(X, y)

predictions = model.predict([[6]])
print(predictions)  # Sortida esperada: [6.0]

2.2. Regressió Logística

La regressió logística s'utilitza per a problemes de classificació binària.

from sklearn.linear_model import LogisticRegression

# Exemple de codi per a regressió logística
X = [[0], [1], [2], [3], [4], [5]]
y = [0, 0, 0, 1, 1, 1]

model = LogisticRegression()
model.fit(X, y)

predictions = model.predict([[2.5]])
print(predictions)  # Sortida esperada: [0]

2.3. K-Nearest Neighbors (KNN)

KNN és un algoritme de classificació que classifica un punt de dades basant-se en la seva proximitat als punts de dades més propers.

from sklearn.neighbors import KNeighborsClassifier

# Exemple de codi per a KNN
X = [[0], [1], [2], [3], [4], [5]]
y = [0, 0, 0, 1, 1, 1]

model = KNeighborsClassifier(n_neighbors=3)
model.fit(X, y)

predictions = model.predict([[2.5]])
print(predictions)  # Sortida esperada: [0]

2.4. Suport Vector Machines (SVM)

SVM és un algoritme de classificació que troba l'hiperplà que millor separa les classes en un espai de característiques.

from sklearn.svm import SVC

# Exemple de codi per a SVM
X = [[0], [1], [2], [3], [4], [5]]
y = [0, 0, 0, 1, 1, 1]

model = SVC(kernel='linear')
model.fit(X, y)

predictions = model.predict([[2.5]])
print(predictions)  # Sortida esperada: [0]

2.5. Àrbre de Decisió

Un arbre de decisió és un model predictiu que utilitza un arbre de decisions per prendre decisions basades en les característiques de les dades.

from sklearn.tree import DecisionTreeClassifier

# Exemple de codi per a Àrbre de Decisió
X = [[0], [1], [2], [3], [4], [5]]
y = [0, 0, 0, 1, 1, 1]

model = DecisionTreeClassifier()
model.fit(X, y)

predictions = model.predict([[2.5]])
print(predictions)  # Sortida esperada: [0]

2.6. Random Forest

Random Forest és un conjunt d'arbres de decisió que millora la precisió i redueix el sobreajustament.

from sklearn.ensemble import RandomForestClassifier

# Exemple de codi per a Random Forest
X = [[0], [1], [2], [3], [4], [5]]
y = [0, 0, 0, 1, 1, 1]

model = RandomForestClassifier(n_estimators=10)
model.fit(X, y)

predictions = model.predict([[2.5]])
print(predictions)  # Sortida esperada: [0]

2.7. Gradient Boosting Machines (GBM)

GBM és un conjunt d'algoritmes de boosting que combinen diversos models febles per crear un model fort.

from sklearn.ensemble import GradientBoostingClassifier

# Exemple de codi per a GBM
X = [[0], [1], [2], [3], [4], [5]]
y = [0, 0, 0, 1, 1, 1]

model = GradientBoostingClassifier(n_estimators=10)
model.fit(X, y)

predictions = model.predict([[2.5]])
print(predictions)  # Sortida esperada: [0]

  1. Algoritmes No Supervisats

3.1. K-Means Clustering

K-Means és un algoritme de clustering que agrupa les dades en K clústers basant-se en la seva similitud.

from sklearn.cluster import KMeans

# Exemple de codi per a K-Means
X = [[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]]

model = KMeans(n_clusters=2)
model.fit(X)

predictions = model.predict([[0, 0], [12, 3]])
print(predictions)  # Sortida esperada: [0, 1]

3.2. Hierarchical Clustering

Hierarchical Clustering és un mètode de clustering que construeix una jerarquia de clústers.

from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt

# Exemple de codi per a Hierarchical Clustering
X = [[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]]

Z = linkage(X, 'ward')
dendrogram(Z)
plt.show()

3.3. Principal Component Analysis (PCA)

PCA és una tècnica de reducció de dimensionalitat que transforma les dades a un nou espai de característiques de menor dimensió.

from sklearn.decomposition import PCA

# Exemple de codi per a PCA
X = [[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]]

model = PCA(n_components=1)
X_reduced = model.fit_transform(X)
print(X_reduced)

  1. Algoritmes d'Aprenentatge per Reforç

4.1. Q-Learning

Q-Learning és un algoritme d'aprenentatge per reforç que aprèn una política per maximitzar la recompensa acumulada.

import numpy as np

# Exemple de codi per a Q-Learning
# Definició de l'entorn
states = ["A", "B", "C", "D"]
actions = ["left", "right"]
rewards = {
    ("A", "left"): 1,
    ("A", "right"): 0,
    ("B", "left"): 0,
    ("B", "right"): 1,
    ("C", "left"): 1,
    ("C", "right"): 0,
    ("D", "left"): 0,
    ("D", "right"): 1,
}

# Inicialització de la taula Q
Q = np.zeros((len(states), len(actions)))

# Paràmetres
alpha = 0.1  # Taxa d'aprenentatge
gamma = 0.9  # Factor de descompte
epsilon = 0.1  # Taxa d'exploració

# Algoritme de Q-Learning
for episode in range(1000):
    state = np.random.choice(states)
    while state != "D":
        if np.random.uniform(0, 1) < epsilon:
            action = np.random.choice(actions)
        else:
            action = actions[np.argmax(Q[states.index(state)])]
        
        next_state = "B" if action == "right" else "A"
        reward = rewards[(state, action)]
        
        Q[states.index(state), actions.index(action)] = Q[states.index(state), actions.index(action)] + alpha * (reward + gamma * np.max(Q[states.index(next_state)]) - Q[states.index(state), actions.index(action)])
        
        state = next_state

print(Q)

Exercicis Pràctics

Exercici 1: Implementació de Regressió Lineal

Implementa un model de regressió lineal utilitzant un conjunt de dades sintètic i avalua el seu rendiment.

Exercici 2: Clustering amb K-Means

Utilitza l'algoritme K-Means per agrupar un conjunt de dades i visualitza els resultats.

Exercici 3: Q-Learning en un Entorn Simulat

Implementa l'algoritme Q-Learning en un entorn simulat i avalua la política aprenent.

Conclusió

En aquest tema, hem explorat diversos algoritmes de Machine Learning, incloent algoritmes supervisats, no supervisats i d'aprenentatge per reforç. Hem vist exemples pràctics de com implementar aquests algoritmes utilitzant Python i biblioteques com scikit-learn. Els exercicis pràctics proporcionats us ajudaran a consolidar els conceptes apresos i a aplicar-los a problemes reals.

© Copyright 2024. Tots els drets reservats