Introducció
En aquest projecte, aplicarem els coneixements adquirits al llarg del curs per desenvolupar un model de Machine Learning capaç de predir els preus d'habitatges. Aquest tipus de projecte és molt comú en el camp de l'anàlisi de dades i és una excel·lent manera de posar en pràctica tècniques de regressió, preprocessament de dades i avaluació de models.
Objectius del Projecte
- Preprocessar les dades: Netejar, transformar i preparar les dades per al model.
- Desenvolupar un model de regressió: Utilitzar algoritmes de regressió per predir els preus.
- Avaluar el model: Utilitzar mètriques d'avaluació per mesurar el rendiment del model.
- Optimitzar el model: Ajustar hiperparàmetres per millorar el rendiment.
Passos del Projecte
- Importació de Llibreries i Dades
Comencem per importar les llibreries necessàries i carregar el conjunt de dades.
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score # Carregar el conjunt de dades data = pd.read_csv('housing_data.csv')
- Exploració i Neteja de Dades
Explorem les dades per entendre la seva estructura i netejar qualsevol valor mancant o anòmal.
# Mostrar les primeres files del conjunt de dades print(data.head()) # Informació sobre el conjunt de dades print(data.info()) # Descripció estadística print(data.describe()) # Comprovar valors mancants print(data.isnull().sum()) # Eliminar o imputar valors mancants data = data.dropna() # Opció simple: eliminar files amb valors mancants
- Anàlisi Exploratori de Dades (EDA)
Visualitzem les dades per identificar relacions i patrons.
# Histograma dels preus d'habitatges sns.histplot(data['price'], bins=30) plt.title('Distribució dels Preus d\'Habitatges') plt.xlabel('Preu') plt.ylabel('Freqüència') plt.show() # Matriu de correlació correlation_matrix = data.corr() sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm') plt.title('Matriu de Correlació') plt.show()
- Preprocessament de Dades
Preparem les dades per al model, incloent la normalització i la divisió en conjunts d'entrenament i prova.
# Seleccionar les característiques (features) i la variable objectiu (target) X = data.drop('price', axis=1) y = data['price'] # 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) # Normalitzar les dades (opcional) from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)
- Desenvolupament del Model
Utilitzem la regressió lineal per desenvolupar el model de predicció.
# Crear el model de regressió lineal model = LinearRegression() # Entrenar el model model.fit(X_train, y_train) # Predir els preus en el conjunt de prova y_pred = model.predict(X_test)
- Avaluació del Model
Utilitzem mètriques com el MSE i el R² per avaluar el rendiment del model.
# Calcular el Mean Squared Error (MSE) mse = mean_squared_error(y_test, y_pred) print(f'Mean Squared Error: {mse}') # Calcular el coeficient de determinació R² r2 = r2_score(y_test, y_pred) print(f'R²: {r2}')
- Optimització del Model
Podem provar altres algoritmes de regressió o ajustar hiperparàmetres per millorar el rendiment.
# Exemple: Utilitzar Ridge Regression from sklearn.linear_model import Ridge ridge_model = Ridge(alpha=1.0) ridge_model.fit(X_train, y_train) y_pred_ridge = ridge_model.predict(X_test) # Avaluar el model Ridge mse_ridge = mean_squared_error(y_test, y_pred_ridge) r2_ridge = r2_score(y_test, y_pred_ridge) print(f'Ridge Regression - Mean Squared Error: {mse_ridge}') print(f'Ridge Regression - R²: {r2_ridge}')
Conclusió
En aquest projecte, hem desenvolupat un model de Machine Learning per predir els preus d'habitatges. Hem seguit un procés estructurat que inclou la importació i neteja de dades, l'anàlisi exploratori, el preprocessament, el desenvolupament del model, l'avaluació i l'optimització. Aquest enfocament es pot aplicar a una àmplia varietat de problemes de predicció en el món real.
Exercicis Pràctics
- Prova amb altres algoritmes de regressió: Intenta utilitzar altres algoritmes com la Regressió Lasso o la Regressió Polinòmica i compara els resultats.
- Ajust d'hiperparàmetres: Experimenta amb diferents valors d'hiperparàmetres per al model Ridge i observa com afecta el rendiment.
- Enginyeria de característiques: Crea noves característiques a partir de les dades existents i avalua si milloren el rendiment del model.
Solucions als Exercicis
-
Regressió Lasso:
from sklearn.linear_model import Lasso lasso_model = Lasso(alpha=0.1) lasso_model.fit(X_train, y_train) y_pred_lasso = lasso_model.predict(X_test) mse_lasso = mean_squared_error(y_test, y_pred_lasso) r2_lasso = r2_score(y_test, y_pred_lasso) print(f'Lasso Regression - Mean Squared Error: {mse_lasso}') print(f'Lasso Regression - R²: {r2_lasso}')
-
Ajust d'hiperparàmetres per a Ridge Regression:
ridge_model = Ridge(alpha=10.0) ridge_model.fit(X_train, y_train) y_pred_ridge = ridge_model.predict(X_test) mse_ridge = mean_squared_error(y_test, y_pred_ridge) r2_ridge = r2_score(y_test, y_pred_ridge) print(f'Ridge Regression (alpha=10.0) - Mean Squared Error: {mse_ridge}') print(f'Ridge Regression (alpha=10.0) - R²: {r2_ridge}')
-
Enginyeria de característiques:
# Exemple: Crear una nova característica basada en la relació entre dues existents data['new_feature'] = data['feature1'] / data['feature2'] # Repetir el procés de divisió, entrenament i avaluació amb la nova característica X = data.drop('price', axis=1) y = data['price'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) model.fit(X_train, y_train) y_pred = model.predict(X_test) mse = mean_squared_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) print(f'New Feature - Mean Squared Error: {mse}') print(f'New Feature - R²: {r2}')
Aquest projecte proporciona una base sòlida per a la predicció de preus d'habitatges i pot ser ampliat amb tècniques més avançades i dades addicionals per millorar la precisió i la robustesa del model.
Curs de Machine Learning
Mòdul 1: Introducció al Machine Learning
- Què és el Machine Learning?
- Història i evolució del Machine Learning
- Tipus de Machine Learning
- Aplicacions del Machine Learning
Mòdul 2: Fonaments d'Estadística i Probabilitat
- Conceptes bàsics d'estadística
- Distribucions de probabilitat
- Inferència estadística
- Teorema de Bayes
Mòdul 3: Preprocessament de Dades
Mòdul 4: Algoritmes de Machine Learning Supervisat
- Regressió lineal
- Regressió logística
- Arbres de decisió
- Màquines de suport vectorial (SVM)
- K-Veïns més propers (K-NN)
- Xarxes neuronals
Mòdul 5: Algoritmes de Machine Learning No Supervisat
- Clustering: K-means
- Clustering jeràrquic
- Anàlisi de components principals (PCA)
- Anàlisi d'agrupament DBSCAN
Mòdul 6: Avaluació i Validació de Models
Mòdul 7: Tècniques Avançades i Optimització
- Ensemble Learning
- Gradient Boosting
- Xarxes neuronals profundes (Deep Learning)
- Optimització d'hiperparàmetres
Mòdul 8: Implementació i Desplegament de Models
- Frameworks i biblioteques populars
- Implementació de models en producció
- Manteniment i monitoratge de models
- Consideracions ètiques i de privacitat
Mòdul 9: Projectes Pràctics
- Projecte 1: Predicció de preus d'habitatges
- Projecte 2: Classificació d'imatges
- Projecte 3: Anàlisi de sentiments a xarxes socials
- Projecte 4: Detecció de fraus