top of page

15 Algoritmi di Machine Learning che Devi Conoscere - Guida Dettagliata

Benvenuti nella nostra approfondita guida agli algoritmi di machine learning!


In questo articolo, esploreremo in dettaglio il cuore pulsante dell'intelligenza artificiale moderna, svelando i segreti che si celano dietro questi potenti strumenti di apprendimento automatico. Preparatevi ad immergervi in un viaggio avvincente attraverso i fondamenti teorici, le applicazioni pratiche e le metodologie all'avanguardia degli algoritmi di machine learning.



15 Algoritmi di Machine Learning che Devi Conoscere - Guida Dettagliata
15 Algoritmi di Machine Learning che Devi Conoscere - Guida Dettagliata


I Fondamenti degli Algoritmi di Machine Learning

Prima di addentrarci nei dettagli tecnici, è essenziale comprendere le basi teoriche su cui poggiano questi algoritmi incredibilmente sofisticati. Inizieremo esplorando i concetti chiave che guidano il funzionamento del machine learning, svelando i principi matematici e statistici che consentono a questi sistemi di "apprendere" e migliorare in modo autonomo.


Apprendimento Supervisionato, Non Supervisionato e di Rinforzo

Gli algoritmi di machine learning possono essere suddivisi in tre grandi categorie: supervisionati, non supervisionati e di rinforzo. Ognuna di queste classi è progettata per affrontare sfide specifiche e risolvere problemi unici nel vasto mondo dell'apprendimento automatico.

  1. Apprendimento Supervisionato: In questo approccio, l'algoritmo viene "addestrato" su un dataset di esempi etichettati, dove la risposta corretta è già nota. L'obiettivo è quello di imparare a mappare le caratteristiche di input con le corrispondenti etichette di output, in modo da poter poi generalizzare e prevedere correttamente le etichette per nuovi dati non etichettati.

  2. Apprendimento Non Supervisionato: A differenza dell'apprendimento supervisionato, questo metodo non utilizza dati etichettati durante la fase di addestramento. Invece, l'algoritmo cerca autonomamente di individuare pattern, strutture e relazioni nascoste all'interno dei dati, senza alcuna conoscenza a priori delle risposte corrette.

  3. Apprendimento di Rinforzo: Questo approccio innovativo si ispira al modo in cui gli esseri umani e gli animali imparano attraverso l'esperienza diretta e le conseguenze delle proprie azioni. L'algoritmo impara attraverso un processo di prova ed errore, massimizzando una ricompensa definita per raggiungere un determinato obiettivo.



Teoria e Principi Fondamentali

Alla base del funzionamento di questi algoritmi di machine learning si celano solidi principi teorici e concetti matematici avanzati. Concetti come l'ottimizzazione, la generalizzazione, la complessità computazionale e il trade-off tra bias e varianza sono fondamentali per la corretta implementazione e interpretazione dei modelli di apprendimento automatico.

L'ottimizzazione, ad esempio, gioca un ruolo cruciale nel trovare i parametri ottimali di un modello che minimizzano l'errore di previsione. La generalizzazione, d'altra parte, si riferisce alla capacità di un algoritmo di estendere ciò che ha appreso dal dataset di addestramento a nuovi dati non visti in precedenza.


La complessità computazionale riguarda invece l'efficienza degli algoritmi in termini di tempo e risorse di calcolo necessarie per addestrare e applicare i modelli. Infine, il trade-off tra bias e varianza rappresenta una sfida fondamentale nel trovare l'equilibrio ideale tra la capacità di un modello di adattarsi ai dati di addestramento (bias) e la sua capacità di generalizzare a nuovi dati (varianza).


Una solida conoscenza di questi principi teorici è essenziale per selezionare e applicare correttamente gli algoritmi di machine learning più adatti a specifici compiti e contesti. Inoltre, una comprensione approfondita di questi concetti consente di valutare criticamente i risultati ottenuti e di implementare strategie di ottimizzazione dei modelli per migliorarne le prestazioni.


Nel prossimo capitolo, esploreremo in dettaglio alcuni degli algoritmi di machine learning più diffusi e potenti, analizzandone il funzionamento, le applicazioni pratiche e le metodologie all'avanguardia utilizzate per migliorarne costantemente l'efficacia. Preparatevi ad essere stupiti dalle incredibili capacità di questi strumenti di apprendimento automatico e dal loro impatto rivoluzionario in innumerevoli settori.



🌳 Algoritmi di Decision Trees: Prendere Decisioni Intelligenti

Gli alberi decisionali rappresentano uno degli algoritmi di machine learning più intuitivi e versatili. Questi modelli di apprendimento supervisionato sfruttano una struttura ad albero per suddividere i dati in modo ricorsivo, creando così un percorso decisionale efficiente per la classificazione o la regressione.


Funzionamento degli Algoritmi di Decision Trees

L'algoritmo di decision tree inizia creando un nodo radice che rappresenta l'intero dataset. Successivamente, valuta ogni feature per trovare la separazione ottimale dei dati, creando così dei nodi figli. Questo processo di suddivisione ricorsiva continua fino a quando non vengono soddisfatti determinati criteri di arresto, come una soglia di purezza dei nodi o una profondità massima dell'albero.


Ecco un semplice esempio di codice Python che implementa un decision tree utilizzando la libreria scikit-learn:


from sklearn.tree import DecisionTreeClassifier

# Creare un modello di decision tree
clf = DecisionTreeClassifier()

# Addestrare il modello con i dati di addestramento
clf.fit(X_train, y_train)

# Effettuare previsioni su nuovi dati
y_pred = clf.predict(X_test)

Quando Utilizzare gli Algoritmi di Decision Trees

Gli alberi decisionali sono particolarmente adatti per compiti di classificazione e regressione in cui la struttura dei dati può essere rappresentata in modo gerarchico. Sono inoltre apprezzati per la loro capacità di gestire dati sia numerici che categorici, oltre che per la loro interpretabilità intrinseca. Infatti, la struttura ad albero consente di comprendere facilmente il processo decisionale seguito dal modello.


Tuttavia, gli alberi decisionali possono soffrire di overfitting se non vengono regolarizzati correttamente, portando a una scarsa generalizzazione su nuovi dati. Per ovviare a questo problema, si ricorre spesso ad algoritmi ensemble come i gradient boosted decision trees e le random forest, che combiano più alberi decisionali per migliorare le prestazioni complessive.





📈 Gradient Boosted Decision Trees: Potenziare le Prestazioni con il Boosting

Gli algoritmi di gradient boosted decision trees (GBDT) rappresentano un'evoluzione degli alberi decisionali tradizionali, migliorandone le prestazioni attraverso una tecnica chiamata boosting. Questi modelli ensemble combinano diversi alberi decisionali deboli per creare un modello predittivo complessivamente più accurato e robusto.


Come Funzionano i Gradient Boosted Decision Trees

Il processo di addestramento dei GBDT inizia creando un primo albero decisionale debole sui dati di addestramento. Successivamente, vengono costruiti ulteriori alberi decisionali in modo sequenziale, concentrandosi sugli esempi che il modello precedente ha classificato in modo errato. Ogni nuovo albero "impara" dai residui (errori) del modello precedente, cercando di correggerli nel miglior modo possibile.


Ecco un esempio di codice Python che implementa i gradient boosted decision trees utilizzando la libreria XGBoost:


import xgboost as xgb

# Creare un modello GBDT
model = xgb.XGBClassifier()

# Addestrare il modello con i dati di addestramento
model.fit(X_train, y_train)

# Effettuare previsioni su nuovi dati
y_pred = model.predict(X_test)

Quando Utilizzare i Gradient Boosted Decision Trees

I GBDT sono particolarmente adatti per compiti di classificazione e regressione complessi, in cui le relazioni tra le feature e la variabile target sono non lineari e difficili da modellare con algoritmi di apprendimento tradizionali. Grazie alla loro capacità di catturare pattern complessi nei dati, i GBDT sono spesso utilizzati in applicazioni come il riconoscimento di immagini, la previsione di prezzi e la diagnostica medica.


Tuttavia, i GBDT possono essere propensi all'overfitting se non vengono regolarizzati correttamente. Inoltre, la loro natura "scatola nera" li rende meno interpretabili rispetto agli alberi decisionali singoli, rendendo più difficile comprendere il processo decisionale seguito dal modello.



🔢 Classification and Regression Trees (CART): Un Approccio Unificato

Gli algoritmi di Classification and Regression Trees (CART) rappresentano un approccio unificato agli alberi decisionali, in grado di affrontare sia compiti di classificazione che di regressione. Questo metodo di apprendimento supervisionato sfrutta una tecnica di partizionamento ricorsiva per costruire alberi decisionali ottimali.


Come Funzionano gli Algoritmi CART

L'algoritmo CART inizia creando un nodo radice che rappresenta l'intero dataset. Successivamente, valuta ogni feature per trovare la separazione ottimale dei dati, basandosi su una metrica di impurità come l'indice di Gini o l'entropia. Questa separazione crea due nodi figli, ognuno dei quali rappresenta un sottoinsieme dei dati.


Il processo di partizionamento ricorsiva continua fino a quando non vengono soddisfatti determinati criteri di arresto, come una soglia di purezza dei nodi o una profondità massima dell'albero.


Quando Utilizzare gli Algoritmi CART

Gli algoritmi CART sono versatili e possono essere utilizzati sia per compiti di classificazione che di regressione. Sono particolarmente adatti quando i dati presentano una struttura gerarchica evidente e quando è importante avere un modello interpretabile.

Tuttavia, come gli alberi decisionali tradizionali, gli algoritmi CART possono soffrire di overfitting se non vengono regolarizzati correttamente. Per migliorare le prestazioni e la capacità di generalizzazione, è spesso consigliabile utilizzare metodi ensemble come le random forest.




🌳🌲 Random Forest Classification: La Potenza degli Ensemble

Le random forest rappresentano un potente approccio di apprendimento ensemble che combina diversi alberi decisionali per migliorare le prestazioni di classificazione. Questo algoritmo di machine learning costruisce una moltitudine di alberi decisionali utilizzando sottoinsiemi casuali dei dati di addestramento e delle feature, e quindi combina le loro previsioni per ottenere un modello di classificazione più robusto e accurato.


Come Funzionano le Random Forest

Il processo di addestramento delle random forest inizia costruendo un gran numero di alberi decisionali utilizzando sottoinsiemi casuali dei dati di addestramento. Ogni albero viene addestrato su un campione diverso dei dati, ottenuto attraverso una tecnica chiamata "bootstrap aggregating" (bagging). Inoltre, durante la costruzione di ogni albero, l'algoritmo seleziona casualmente un sottogruppo delle feature disponibili, aggiungendo ulteriore diversità al modello finale.


Una volta addestrati, gli alberi decisionali producono previsioni individuali sui nuovi dati di input. Le previsioni di tutti gli alberi vengono quindi combinate, tipicamente attraverso una votazione a maggioranza nel caso di classificazione o una media nel caso di regressione.


Ecco un esempio di codice Python che implementa le random forest utilizzando la libreria scikit-learn:

from sklearn.ensemble import RandomForestClassifier

# Creare un modello di random forest
rf = RandomForestClassifier(n_estimators=100, random_state=42)

# Addestrare il modello con i dati di addestramento
rf.fit(X_train, y_train)

# Effettuare previsioni su nuovi dati
y_pred = rf.predict(X_test)

Quando Utilizzare le Random Forest

Le random forest sono particolarmente adatte per compiti di classificazione complessi, in cui i dati presentano relazioni non lineari e interazioni tra le feature. Grazie alla loro natura ensemble, le random forest sono meno soggette all'overfitting rispetto agli alberi decisionali singoli e sono in grado di gestire efficacemente dati con rumore e outlier.

Tuttavia, le prestazioni delle random forest possono essere influenzate dalla qualità e dalla quantità dei dati di addestramento, nonché dalla scelta dei parametri, come il numero di alberi e la dimensione del sottocampione di feature.



📊 K-means clustering: Raggruppare i Dati in Modo Intelligente

L'algoritmo K-means clustering è uno degli approcci non supervisionati più popolari nel campo del machine learning. Questo potente strumento di apprendimento automatico consente di suddividere un dataset in gruppi (cluster) di punti dati simili, senza alcuna informazione a priori sulle etichette o sulle categorie dei dati.


Come Funziona il K-means clustering

Il processo di clustering K-means inizia selezionando in modo casuale un numero k di punti dati come centroidi iniziali dei cluster. Successivamente, l'algoritmo assegna ogni punto dati al cluster con il centroide più vicino, calcolando la distanza tra il punto e i vari centroidi.

Una volta che tutti i punti dati sono stati assegnati ai cluster, l'algoritmo ricalcola le posizioni dei centroidi come le medie dei punti dati presenti in ciascun cluster. Questo processo di assegnazione e ricalcolo dei centroidi viene ripetuto iterativamente fino a quando i centroidi non si stabilizzano e non si verificano ulteriori cambiamenti nell'assegnazione dei punti dati ai cluster.


Ecco un esempio di codice Python che implementa l'algoritmo K-means clustering utilizzando la libreria scikit-learn:

from sklearn.cluster import KMeans

# Creare un modello K-means
kmeans = KMeans(n_clusters=3, random_state=42)

# Addestrare il modello con i dati di addestramento
kmeans.fit(X)

# Ottenere le etichette dei cluster per ogni punto dati
labels = kmeans.labels_

Quando Utilizzare il K-means clustering

L'algoritmo K-means clustering è particolarmente adatto per compiti di analisi dei dati non supervisionati, come la segmentazione dei clienti, l'individuazione di anomalie e l'esplorazione di pattern nei dati. Questo approccio è efficace quando i dati presentano cluster naturali ben separati e quando le dimensioni dei cluster sono approssimativamente simili.


Tuttavia, l'algoritmo K-means può essere sensibile alla scelta iniziale dei centroidi e alle presenza di outlier nei dati. Inoltre, richiede che l'utente specifichi a priori il numero di cluster desiderati, il che può essere una sfida se non si hanno informazioni a priori sulla struttura dei dati.



🧠 Artificial Neural Networks: Ispirati dalla Natura

Le reti neurali artificiali (Artificial Neural Networks, ANN) sono tra gli algoritmi di machine learning più potenti e versatili. Ispirate al funzionamento del cervello umano, queste architetture di apprendimento automatico sono in grado di modellare relazioni complesse tra input e output, imparando direttamente dai dati di addestramento.


Come Funzionano le Reti Neurali Artificiali

Un'ANN è composta da nodi interconnessi, chiamati neuroni, organizzati in diverse "layer" (strati). I neuroni di input ricevono i dati di ingresso, mentre quelli di output producono le previsioni del modello. Gli strati intermedi, chiamati "hidden layers", eseguono elaborazioni complesse sui dati di input per estrarne le caratteristiche rilevanti.

Durante il processo di addestramento, i pesi delle connessioni tra i neuroni vengono aggiustati iterativamente in modo da minimizzare l'errore di previsione del modello. Questo processo di ottimizzazione, noto come "backpropagation", consente alla rete neurale di imparare in modo autonomo le complesse relazioni presenti nei dati di addestramento.


Ecco un esempio di codice Python che implementa una semplice rete neurale utilizzando la libreria Keras:

from keras.models import Sequential
from keras.layers import Dense

# Creare un modello di rete neurale sequenziale
model = Sequential()

# Aggiungere i layer della rete neurale
model.add(Dense(units=64, activation='relu', input_dim=X_train.shape[1]))
model.add(Dense(units=32, activation='relu'))
model.add(Dense(units=1, activation='sigmoid'))

# Compilare il modello
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# Addestrare il modello
model.fit(X_train, y_train, epochs=10, batch_size=32)

Quando Utilizzare le Reti Neurali Artificiali

Le reti neurali artificiali sono particolarmente adatte per compiti di apprendimento complessi, come il riconoscimento di immagini, l'elaborazione del linguaggio naturale e la previsione di serie temporali. Grazie alla loro capacità di modellare relazioni non lineari e di estrarre automaticamente le caratteristiche rilevanti dai dati, le ANN sono in grado di ottenere prestazioni eccezionali in molti domini applicativi.


Tuttavia, l'addestramento delle reti neurali può richiedere una grande quantità di dati di addestramento e risorse di calcolo significative. Inoltre, le ANN sono spesso considerate "scatole nere", rendendo difficile comprendere e spiegare il processo decisionale sottostante.



📐 Support Vector Machines: Massimizzare il Margine

Gli algoritmi di Support Vector Machines (SVM) rappresentano un potente approccio di apprendimento supervisionato per compiti di classificazione e regressione. Questi modelli cercano di trovare un iperpiano che separi in modo ottimale le classi di dati, massimizzando il margine tra le classi stesse.


Come Funzionano le Support Vector Machines

L'idea chiave dietro gli SVM è quella di trovare un iperpiano di separazione che massimizzi la distanza (il margine) tra i punti dati delle diverse classi. I punti dati più vicini all'iperpiano, chiamati "support vector", definiscono effettivamente la larghezza di questo margine.

Per problemi non linearmente separabili, gli SVM utilizzano una tecnica chiamata "kernel trick" per mappare i dati in uno spazio di dimensionalità superiore, dove diventa possibile trovare un iperpiano di separazione ottimale.


Ecco un esempio di codice Python che implementa un SVM utilizzando la libreria scikit-learn:

from sklearn.svm import SVC

# Creare un modello SVM
svm = SVC(kernel='linear')

# Addestrare il modello con i dati di addestramento
svm.fit(X_train, y_train)

# Effettuare previsioni su nuovi dati
y_pred = svm.predict(X_test)


Quando Utilizzare le Support Vector Machines

Gli SVM sono particolarmente adatti per compiti di classificazione binaria e multiclasse, dove le classi sono ben separate e i dati sono relativamente densi. Inoltre, gli SVM sono robusti al sovraddattamento e possono gestire efficacemente situazioni in cui il numero di feature è molto grande rispetto alle dimensioni del dataset.


Tuttavia, gli SVM possono essere computazionalmente costosi per dataset di grandi dimensioni e richiedono una regolazione accurata dei parametri del kernel per ottenere prestazioni ottimali. La loro interpretabilità può essere limitata a causa della natura "scatola nera" del processo decisionale.




👥 K-Nearest Neighbors: La Saggezza della Folla

L'algoritmo K-Nearest Neighbors (KNN) è un semplice ma efficace metodo di apprendimento supervisionato che si basa sull'assunto che punti dati simili tendono ad avere etichette o valori simili. Questo approccio non parametrico classifica i nuovi dati in base alla loro vicinanza ai dati di addestramento precedentemente etichettati.


Come Funziona il K-Nearest Neighbors

L'algoritmo KNN inizia calcolando la distanza tra un nuovo punto dati non etichettato e tutti i punti dati di addestramento etichettati. Quindi, seleziona i K punti di addestramento più vicini al nuovo punto dati (i "vicini più prossimi").


Nel caso della classificazione, il nuovo punto dati viene assegnato alla classe più comune tra i suoi K vicini più prossimi. Nel caso della regressione, il valore predetto per il nuovo punto dati è calcolato come la media dei valori dei suoi K vicini più prossimi.


Ecco un esempio di codice Python che implementa l'algoritmo KNN utilizzando la libreria scikit-learn:

from sklearn.neighbors import KNeighborsClassifier

# Creare un modello KNN
knn = KNeighborsClassifier(n_neighbors=5)

# Addestrare il modello con i dati di addestramento
knn.fit(X_train, y_train)

# Effettuare previsioni su nuovi dati
y_pred = knn.predict(X_test)

Quando Utilizzare il K-Nearest Neighbors

L'algoritmo KNN è particolarmente adatto per compiti di classificazione e regressione in cui i dati presentano una distribuzione relativamente uniforme e non ci sono relazioni complesse tra le feature e la variabile target. Inoltre, KNN è facile da implementare e comprendere, rendendolo uno strumento utile per l'esplorazione iniziale dei dati.


Tuttavia, KNN può essere sensibile alla presenza di rumore e outlier nei dati, e le sue prestazioni possono essere influenzate dalla scelta del parametro K e dalla metrica di distanza utilizzata. Inoltre, l'algoritmo KNN può essere computazionalmente costoso per dataset di grandi dimensioni, poiché richiede il calcolo delle distanze tra il nuovo punto dati e tutti i punti di addestramento.



👼 Naive Bayes: Semplice ma Efficace

L'algoritmo Naive Bayes è un approccio di apprendimento supervisionato basato sul teorema di Bayes, che permette di calcolare la probabilità di un evento in base a informazioni parziali o incomplete. Nonostante l'assunzione "naive" di indipendenza tra le feature, questo algoritmo si è dimostrato sorprendentemente efficace in molti compiti di classificazione.


Come Funziona il Naive Bayes

L'algoritmo Naive Bayes si basa sul calcolo della probabilità condizionata di un'etichetta di classe data una serie di feature. Utilizzando il teorema di Bayes, l'algoritmo calcola la probabilità a posteriori di ogni classe, data l'osservazione delle feature, e assegna il nuovo punto dati alla classe con la probabilità più alta.


Nonostante l'assunzione di indipendenza tra le feature sia spesso violata nella realtà, l'algoritmo Naive Bayes si è dimostrato robusto e in grado di ottenere buone prestazioni in molti contesti, grazie alla sua semplicità e all'evitare il sovraddattamento.


Ecco un esempio di codice Python che implementa l'algoritmo Naive Bayes utilizzando la libreria scikit-learn:

from sklearn.naive_bayes import GaussianNB

# Creare un modello Naive Bayes
nb = GaussianNB()

# Addestrare il modello con i dati di addestramento
nb.fit(X_train, y_train)

# Effettuare previsioni su nuovi dati
y_pred = nb.predict(X_test)

Quando Utilizzare il Naive Bayes

L'algoritmo Naive Bayes è particolarmente adatto per compiti di classificazione in cui le feature sono altamente correlate e ci sono molte dimensioni. Inoltre, Naive Bayes è computazionalmente efficiente e richiede relativamente pochi dati di addestramento per ottenere buone prestazioni.


Tuttavia, l'assunzione di indipendenza tra le feature può limitare le prestazioni dell'algoritmo in alcuni contesti, e le sue prestazioni possono essere influenzate dalla qualità e dalla rappresentatività dei dati di addestramento. Inoltre, Naive Bayes è principalmente adatto per compiti di classificazione e non è direttamente applicabile a compiti di regressione.



🔢 Linear Discriminant Analysis (LDA): Massimizzare la Separazione

L'analisi discriminante lineare (Linear Discriminant Analysis, LDA) è un algoritmo di apprendimento supervisionato utilizzato per compiti di classificazione. L'obiettivo dell'LDA è trovare una combinazione lineare delle feature che massimizzi la separazione tra le diverse classi, riducendo al contempo la varianza all'interno di ogni classe.


Come Funziona l'LDA

L'LDA cerca di trovare un iperpiano che separi in modo ottimale le classi di dati, massimizzando il rapporto tra la varianza tra le classi e la varianza all'interno delle classi. In altre parole, l'algoritmo cerca di proiettare i dati su un nuovo spazio di dimensionalità inferiore in cui le classi risultino il più possibile separate.


Una volta trovata questa proiezione ottimale, l'LDA può essere utilizzato per classificare nuovi punti dati proiettandoli nello stesso spazio e assegnandoli alla classe più vicina.


Ecco un esempio di codice Python che implementa l'LDA utilizzando la libreria scikit-learn:

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

# Creare un modello LDA
lda = LinearDiscriminantAnalysis()

# Addestrare il modello con i dati di addestramento
lda.fit(X_train, y_train)

# Effettuare previsioni su nuovi dati
y_pred = lda.predict(X_test)

Quando Utilizzare l'LDA

L'LDA è particolarmente adatto per compiti di classificazione in cui le classi sono ben separate e le feature sono linearmente correlate. Inoltre, l'LDA può essere utilizzato come tecnica di riduzione della dimensionalità per compiti di visualizzazione dei dati o come fase di pre-elaborazione per altri algoritmi di apprendimento.

Tuttavia, l'LDA assume che le classi abbiano varianze uguali e che le feature seguano una distribuzione normale, il che potrebbe non essere sempre vero nei dataset reali. Inoltre, l'LDA potrebbe non funzionare bene in presenza di relazioni non lineari tra le feature e le classi.


🔄 Quadratic Discriminant Analysis (QDA): Oltre la Linearità

La Quadratic Discriminant Analysis (QDA) è un'estensione dell'LDA che rilassa l'assunzione di uguaglianza delle matrici di covarianza delle diverse classi. Questo permette al QDA di modellare relazioni non lineari tra le feature e le classi in modo più efficace rispetto all'LDA.


Come Funziona il QDA

Il QDA assume che ogni classe abbia una distribuzione normale multivariata distinta con la propria media e matrice di covarianza. L'algoritmo stima queste medie e matrici di covarianza dai dati di addestramento e le utilizza per calcolare la probabilità a posteriori di appartenenza di un nuovo punto dati a ciascuna classe.


Il nuovo punto dati viene quindi assegnato alla classe con la probabilità a posteriori più alta, utilizzando una regola di decisione quadratica invece della regola di decisione lineare utilizzata dall'LDA.


Ecco un esempio di codice Python che implementa il QDA utilizzando la libreria scikit-learn:

from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis

# Creare un modello QDA
qda = QuadraticDiscriminantAnalysis()

# Addestrare il modello con i dati di addestramento
qda.fit(X_train, y_train)

# Effettuare previsioni su nuovi dati
y_pred = qda.predict(X_test)

Quando Utilizzare il QDA

Il QDA è particolarmente adatto per compiti di classificazione in cui le classi presentano relazioni non lineari e le matrici di covarianza delle diverse classi sono significativamente diverse. Tuttavia, a causa della sua maggiore flessibilità rispetto all'LDA, il QDA richiede in genere più dati di addestramento per evitare il sovraddattamento.


Inoltre, il QDA può essere computazionalmente più costoso dell'LDA, specialmente per dataset con molte feature, poiché richiede la stima di una matrice di covarianza per ogni classe.



15 Algoritmi di Machine Learning che devi conoscere

Dopo aver esplorato in dettaglio i 15 principali algoritmi di machine learning, ecco una tabella riassuntiva che ne sintetizza le caratteristiche chiave e i casi d'uso principali:

Algoritmo

Categoria

Quando Utilizzarlo

Vantaggi

Svantaggi

Decision Trees

Supervisionato

Classificazione, regressione, dati gerarchici

Interpretabilità, gestione di dati numerici e categorici

Overfitting, instabilità