  {"id":3065,"date":"2024-01-11T11:17:41","date_gmt":"2024-01-11T10:17:41","guid":{"rendered":"https:\/\/www.gironi.it\/blog\/?p=3065"},"modified":"2024-09-20T13:54:25","modified_gmt":"2024-09-20T12:54:25","slug":"come-usare-gli-alberi-decisionali-per-classificare-i-dati","status":"publish","type":"post","link":"https:\/\/www.gironi.it\/blog\/come-usare-gli-alberi-decisionali-per-classificare-i-dati\/","title":{"rendered":"Come usare gli Alberi Decisionali per classificare i dati"},"content":{"rendered":"\n<p>Gli Alberi Decisionali sono un tipo di algoritmo di apprendimento automatico che utilizza una struttura ad albero per suddividere i dati in base a delle regole logiche e prevedere la classe di appartenenza di nuovi dati. Sono facili da interpretare e adattabili a diversi tipi di dati, ma possono anche soffrire di problemi come l\u2019<em>overfitting<\/em>, la complessit\u00e0 e lo sbilanciamento.<br>Vediamo di capirne un po&#8217; di pi\u00f9 e di esaminare un semplice esempio d&#8217;uso in R.<\/p>\n\n\n\n<!--more-->\n\n\n\t\t\t\t<div class=\"wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-5fb2a094      \"\n\t\t\t\t\tdata-scroll= \"1\"\n\t\t\t\t\tdata-offset= \"30\"\n\t\t\t\t\tstyle=\"\"\n\t\t\t\t>\n\t\t\t\t<div class=\"uagb-toc__wrap\">\n\t\t\t\t\t\t<div class=\"uagb-toc__title\">\n\t\t\t\t\t\t\tTable Of Contents\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"uagb-toc__list-wrap \">\n\t\t\t\t\t\t<ol class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#gli-alberi-decisionali-un-potente-strumento-di-classificazione\" class=\"uagb-toc-link__trigger\">Gli Alberi Decisionali: un potente strumento di classificazione<\/a><ul class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#un-semplice-esempio-di-albero-decisionale-in-r\" class=\"uagb-toc-link__trigger\">Un semplice esempio di Albero Decisionale in R<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#come-valutare-laccuratezza-di-un-albero-decisionale\" class=\"uagb-toc-link__trigger\">Come valutare l\u2019accuratezza di un Albero Decisionale<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#cosa-si-intende-per-overfitting\" class=\"uagb-toc-link__trigger\">Cosa si intende per Overfitting?<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#cenni-ad-altri-algoritmi-di-classificazione\" class=\"uagb-toc-link__trigger\">Cenni ad altri algoritmi di classificazione<\/a><\/ul><\/ol>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\n\n\n<h1 class=\"wp-block-heading\">Gli Alberi Decisionali: un potente strumento di classificazione<\/h1>\n\n\n\n<p>Immagina di essere un medico e di dover diagnosticare una malattia a un paziente basandoti su alcuni sintomi. Come faresti a decidere quale malattia ha il paziente? Potresti usare la tua esperienza, la tua intuizione, o consultare dei manuali. Oppure potresti usare un algoritmo che ti guida passo dopo passo a scegliere la diagnosi pi\u00f9 probabile, in base ai dati che hai a disposizione. Questo algoritmo si chiama&nbsp;<strong>Albero Decisionale<\/strong>.<\/p>\n\n\n\n<p class=\"has-light-gray-background-color has-background\">Un Albero Decisionale \u00e8 una struttura grafica che rappresenta una serie di regole logiche per classificare degli oggetti o delle situazioni. <br>Ogni <strong>nodo<\/strong> dell\u2019albero rappresenta una domanda o una condizione, che divide i dati in due o pi\u00f9 sottogruppi omogenei. <br>Ogni<strong> ramo<\/strong> rappresenta una possibile risposta o un\u2019azione, che collega un nodo a un altro nodo o a una foglia. <br>Il<strong> nodo iniziale si chiama radice<\/strong>, ed \u00e8 il punto di partenza dell\u2019albero. <br>I <strong>nodi finali si chiamano foglie<\/strong>, e sono i <strong>punti di arrivo dell\u2019albero<\/strong>. <br><strong>Ogni foglia corrisponde a una classe<\/strong>, ovvero una categoria a cui appartiene l\u2019oggetto o la situazione da classificare.<\/p>\n\n\n\n<p>Gli Alberi Decisionali sono molto usati in ambito scientifico, tecnologico, medico, economico, e sociale, perch\u00e9 hanno diversi vantaggi:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sono&nbsp;<strong>facili da interpretare<\/strong>&nbsp;e da comunicare, anche a persone non esperte.<\/li>\n\n\n\n<li>Sono&nbsp;<strong>flessibili<\/strong>&nbsp;e possono adattarsi a diversi tipi di dati, sia numerici che categorici.<\/li>\n\n\n\n<li>Sono&nbsp;<strong>robusti<\/strong>&nbsp;e possono gestire dati incompleti, rumorosi, o inconsistenti.<\/li>\n\n\n\n<li>Sono&nbsp;<strong>efficienti<\/strong>&nbsp;e richiedono poco tempo e memoria per essere costruiti e applicati.<\/li>\n<\/ul>\n\n\n\n<p>Tuttavia, gli Alberi Decisionali hanno anche alcuni svantaggi:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Possono essere&nbsp;<strong>instabili<\/strong>, ovvero sensibili a piccole variazioni dei dati di partenza, e quindi produrre alberi molto diversi.<\/li>\n\n\n\n<li>Possono essere&nbsp;<strong>complessi<\/strong>, ovvero avere molti nodi e rami, e quindi perdere in chiarezza e accuratezza.<\/li>\n\n\n\n<li>Possono essere&nbsp;<strong>sbilanciati<\/strong>, ovvero favorire alcune classi rispetto ad altre, e quindi essere poco rappresentativi della realt\u00e0.<\/li>\n<\/ul>\n\n\n\n<p>Per ovviare a questi problemi, esistono diverse tecniche di&nbsp;<strong>ottimizzazione<\/strong>&nbsp;e di&nbsp;<strong>validazione<\/strong>&nbsp;degli Alberi Decisionali, che permettono di migliorare le loro prestazioni e di valutare la loro affidabilit\u00e0.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Un semplice esempio di Albero Decisionale in R<\/h2>\n\n\n\n<p>Per capire meglio come funzionano gli Alberi Decisionali, vediamo un esempio pratico in linguaggio R. <\/p>\n\n\n\n<p>Per il nostro esempio, useremo il dataset&nbsp;<code>iris<\/code>, che contiene le misure di lunghezza e larghezza dei sepali e dei petali di 150 fiori di iris, appartenenti a tre specie diverse: setosa, versicolor, e virginica. Il nostro obiettivo \u00e8 di costruire un Albero Decisionale che ci permetta di classificare un fiore di iris in base alla sua specie, usando le sue misure come variabili esplicative.<\/p>\n\n\n\n<p>Per prima cosa, carichiamo il dataset&nbsp;<code>iris<\/code>&nbsp;e la libreria&nbsp;<code>rpart<\/code>, che ci permette di creare gli Alberi Decisionali in R.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Carichiamo il dataset iris\ndata(iris)\n# Carichiamo la libreria rpart\nlibrary(rpart)\n# Impostiamo il seme per la riproducibilit\u00e0\nset.seed(123)\n# Estraiamo casualmente l'80% delle righe del dataset\ntrain_index &lt;- sample(1:nrow(iris), 0.8*nrow(iris))\n# Creiamo il dataset di training\ntrain_data &lt;- iris[train_index, ]\n# Creiamo il dataset di test\ntest_data &lt;- iris[-train_index, ]\n<\/pre>\n\n\n\n<p>Ora, siamo pronti per costruire il nostro Albero Decisionale, usando la funzione&nbsp;<code>rpart<\/code>. Questa funzione richiede alcuni parametri:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La&nbsp;<strong>formula<\/strong>, che specifica la variabile da classificare (in questo caso,&nbsp;<code>Species<\/code>) e le variabili esplicative (in questo caso, tutte le altre).<\/li>\n\n\n\n<li>Il&nbsp;<strong>dataset<\/strong>, che contiene i dati da usare per costruire l\u2019Albero Decisionale (in questo caso,&nbsp;<code>train_data<\/code>).<\/li>\n\n\n\n<li>Il&nbsp;<strong>metodo<\/strong>, che specifica il tipo di classificazione da usare (in questo caso,&nbsp;<code>class<\/code>, che indica una classificazione categorica).<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\"># Costruiamo l'Albero Decisionale\ntree &lt;- rpart(formula = Species ~ ., data = train_data, method = \"class\")\n<\/pre>\n\n\n\n<p>Per visualizzare il nostro Albero Decisionale, usiamo la funzione&nbsp;<code>plot<\/code>, che ci permette di disegnare la struttura grafica dell\u2019albero, e la funzione&nbsp;<code>text<\/code>, che ci permette di aggiungere le etichette dei nodi e dei rami.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Visualizziamo l'Albero Decisionale\nplot(tree, uniform = TRUE, branch=0.8)\ntext(tree, all=TRUE, use.n = TRUE)\n<\/pre>\n\n\n\n<p>Il risultato \u00e8 il seguente:<\/p>\n\n\n\n<div class=\"wp-block-uagb-image uagb-block-0ef4be0f wp-block-uagb-image--layout-default wp-block-uagb-image--effect-static wp-block-uagb-image--align-none\"><figure class=\"wp-block-uagb-image__figure\"><img decoding=\"async\" srcset=\"https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2024\/01\/decision-tree-1-935x1024.png ,https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2024\/01\/decision-tree-1.png 780w, https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2024\/01\/decision-tree-1.png 360w\" sizes=\"auto, (max-width: 480px) 150px\" src=\"https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2024\/01\/decision-tree-1-935x1024.png\" alt=\"\" class=\"uag-image-3074\" width=\"856\" height=\"574\" title=\"\" loading=\"lazy\"><\/figure><\/div>\n\n\n\n<p>Come possiamo interpretare questo semplicissimo Albero Decisionale? Partiamo dalla radice, che \u00e8 il nodo in alto. Questo nodo ci dice che la variabile pi\u00f9 importante per classificare un fiore di iris \u00e8 la&nbsp;<strong>lunghezza del petalo<\/strong>&nbsp;(<code>Petal.Lenght<\/code>). Se la larghezza del petalo \u00e8 minore di 2.45 cm, allora il fiore \u00e8 della specie&nbsp;<strong>setosa<\/strong>. Se invece la larghezza del petalo \u00e8 maggiore, dobbiamo considerare se la lunghezza del petalo \u00e8 minore o uguale a 4.75 cm. Se \u00e8 minore allora il fiore \u00e8 della specie&nbsp;<strong>versicolor<\/strong>. Se invece la lunghezza del petalo \u00e8 maggiore di 4.75 cm, allora il fiore \u00e8 della specie&nbsp;<strong>virginica<\/strong>. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Come valutare l\u2019accuratezza di un Albero Decisionale<\/h2>\n\n\n\n<p>Per valutare l\u2019accuratezza di un Albero Decisionale, dobbiamo confrontare le classi predette dall\u2019albero con le classi reali dei dati di test. Per fare questo, usiamo la funzione&nbsp;<code>predict<\/code>, che ci permette di applicare l\u2019Albero Decisionale ai dati di test e di ottenere le classi predette.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Applichiamo l'Albero Decisionale ai dati di test\npred_class &lt;- predict(tree, newdata = test_data, type = \"class\")\n<\/pre>\n\n\n\n<p>Poi, usiamo la funzione&nbsp;<code>table<\/code>, che ci permette di creare una tabella di contingenza tra le classi predette e le classi reali.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Creiamo la tabella di contingenza\ntable(pred_class, test_data$Species)\n<\/pre>\n\n\n\n<p>Il risultato \u00e8 il seguente:<\/p>\n\n\n\n<table>\n  <tr>\n    <td><\/td>\n    <td>setosa<\/td>\n    <td>versicolor<\/td>\n    <td>virginica<\/td>\n  <\/tr>\n  <tr>\n    <td>setosa<\/td>\n    <td>10<\/td>\n    <td>0<\/td>\n    <td>0<\/td>\n  <\/tr>\n  <tr>\n    <td>versicolor<\/td>\n    <td>0<\/td>\n    <td>13<\/td>\n    <td>0<\/td>\n  <\/tr>\n  <tr>\n    <td>virginica<\/td>\n    <td>0<\/td>\n    <td>2<\/td>\n    <td>5<\/td>\n  <\/tr>\n<\/table>\n\n\n\n<p>Questa tabella ci mostra quante volte l\u2019Albero Decisionale ha predetto correttamente o sbagliato la classe di un fiore di iris. Per esempio, la cella in alto a sinistra ci dice che l\u2019Albero Decisionale ha predetto correttamente che 10 fiori erano della specie setosa. La cella in basso al centro ci dice che l\u2019Albero Decisionale ha sbagliato a predire che 2 fiori erano della specie virginica, quando in realt\u00e0 erano della specie versicolor.<\/p>\n\n\n\n<p>Per calcolare l\u2019accuratezza di un Albero Decisionale, dobbiamo dividere il numero di predizioni corrette per il numero totale di predizioni. In questo caso, l\u2019accuratezza \u00e8:<\/p>\n\n\n\n\\(\n\\frac{10 + 13 + 5}{10 + 13 + 5 + 2} = \\frac{28}{30} = 0.93\\\\\n\\)\n\n\n\n<p>Questo significa che il nostro Albero Decisionale ha predetto correttamente la specie di un fiore di iris nel 93% dei casi. Questo \u00e8 un buon risultato, ma potrebbe essere migliorato con alcune tecniche di ottimizzazione, come la&nbsp;<strong>potatura<\/strong>&nbsp;o la&nbsp;<strong>selezione delle variabili<\/strong>.<\/p>\n\n\n\n<p>La potatura \u00e8 una tecnica che consiste nel ridurre la complessit\u00e0 di un Albero Decisionale, eliminando alcuni nodi o rami che non contribuiscono significativamente all\u2019accuratezza. Questo pu\u00f2 prevenire il problema dell\u2019<strong>overfitting<\/strong>, ovvero quando l\u2019Albero Decisionale si adatta troppo ai dati di training e perde la capacit\u00e0 di generalizzare ai dati di test.<\/p>\n\n\n\n<p>La selezione delle variabili \u00e8 una tecnica che consiste nel scegliere le variabili pi\u00f9 rilevanti per la classificazione, eliminando quelle che sono irrilevanti o ridondanti. Questo pu\u00f2 migliorare l\u2019accuratezza e la chiarezza dell\u2019Albero Decisionale, riducendo il numero di domande o condizioni da considerare.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cosa si intende per Overfitting?<\/h2>\n\n\n\n<p>L\u2019<strong><em>overfitting<\/em><\/strong> \u00e8 un problema che si verifica<strong> quando un modello di apprendimento automatico si adatta troppo ai dati di addestramento, e non riesce a generalizzare bene ai dati nuovi<\/strong>. Questo significa che il modello memorizza le caratteristiche specifiche e il rumore dei dati di addestramento, ma non riesce a catturare la tendenza generale dei dati. Di conseguenza, il modello ha un\u2019alta accuratezza sui dati di addestramento, ma una bassa accuratezza sui dati di test o di validazione. L\u2019overfitting pu\u00f2 essere causato da una complessit\u00e0 eccessiva del modello, da un numero insufficiente di dati di addestramento, o da un addestramento troppo lungo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cenni ad altri algoritmi di classificazione<\/h2>\n\n\n\n<p>Esistono innumerevoli altri algoritmi di classificazione, come ad esempio, la <strong>regressione logistica<\/strong>, il <strong>k-nearest neighbor<\/strong>, il <strong>support vector machine<\/strong> e le <strong>reti neurali<\/strong>. Questi algoritmi si basano su principi diversi dagli Alberi Decisionali, come la funzione di probabilit\u00e0, la distanza, il margine o la trasformazione non lineare dei dati. Alcuni di questi algoritmi possono essere pi\u00f9 accurati, flessibili o scalabili degli Alberi Decisionali, ma anche pi\u00f9 difficili da interpretare o richiedere pi\u00f9 tempo e risorse per essere addestrati e applicati.<\/p>\n\n\n\n<p>Una tecnica che cerca di combinare i vantaggi degli Alberi Decisionali con quelli degli algoritmi di insieme \u00e8 la <strong>Random Forest<\/strong>. <\/p>\n\n\n\n<p>La Random Forest \u00e8 un metodo che costruisce una collezione di Alberi Decisionali indipendenti e ne calcola la media delle previsioni. <br>Questo permette di <strong>ridurre la varianza e l\u2019overfitting degli Alberi Decisionali, aumentando l\u2019accuratezza e la robustezza del modello<\/strong>. La Random Forest introduce anche un elemento di casualit\u00e0 nella scelta dei dati e delle variabili da usare per costruire gli Alberi Decisionali, rendendo il modello pi\u00f9 diversificato e de-correlato.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gli Alberi Decisionali sono un tipo di algoritmo di apprendimento automatico che utilizza una struttura ad albero per suddividere i dati in base a delle regole logiche e prevedere la classe di appartenenza di nuovi dati. Sono facili da interpretare e adattabili a diversi tipi di dati, ma possono anche soffrire di problemi come l\u2019overfitting, &hellip; <a href=\"https:\/\/www.gironi.it\/blog\/come-usare-gli-alberi-decisionali-per-classificare-i-dati\/\" class=\"more-link\">Leggi tutto<span class=\"screen-reader-text\"> &#8220;Come usare gli Alberi Decisionali per classificare i dati&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[629],"tags":[633],"class_list":["post-3065","post","type-post","status-publish","format-standard","hentry","category-statistica-it","tag-alberi-decisionali-it"],"lang":"it","translations":{"it":3065,"en":3260},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"post-thumbnail":false},"uagb_author_info":{"display_name":"paolo","author_link":"https:\/\/www.gironi.it\/blog\/author\/paolo\/"},"uagb_comment_info":41,"uagb_excerpt":"Gli Alberi Decisionali sono un tipo di algoritmo di apprendimento automatico che utilizza una struttura ad albero per suddividere i dati in base a delle regole logiche e prevedere la classe di appartenenza di nuovi dati. Sono facili da interpretare e adattabili a diversi tipi di dati, ma possono anche soffrire di problemi come l\u2019overfitting,&hellip;","_links":{"self":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/3065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/comments?post=3065"}],"version-history":[{"count":11,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/3065\/revisions"}],"predecessor-version":[{"id":3081,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/3065\/revisions\/3081"}],"wp:attachment":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/media?parent=3065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/categories?post=3065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/tags?post=3065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}