{"id":27671,"date":"2020-01-14T00:00:00","date_gmt":"2020-01-13T23:00:00","guid":{"rendered":"https:\/\/blexin.com\/?p=27671"},"modified":"2021-01-13T09:40:16","modified_gmt":"2021-01-13T08:40:16","slug":"feature-crossing-to-improve-our-ml-model","status":"publish","type":"post","link":"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/","title":{"rendered":"Feature crossing per migliorare il nostro modello ML"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" data-attachment-id=\"27672\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/attachment\/image00-14\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-14.png?fit=1024%2C608&amp;ssl=1\" data-orig-size=\"1024,608\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image00-14\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-14.png?fit=1024%2C608&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-14.png?resize=1024%2C608&#038;ssl=1\" alt=\"\" class=\"wp-image-27672\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-14.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-14-980x582.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-14-480x285.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Continuiamo il viaggio nel mondo del Machine Learning iniziato nei precedenti articoli. Siamo partiti da un dataset relativo a partite di calcio giocate nella Serie A Italiana, ma a differenza di quelli preconfezionati per i corsi di ML, non sappiamo se questi dati consentono di creare un modello predittivo o meno.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nel&nbsp;<a href=\"https:\/\/www.blexin.com\/it-IT\/Article\/Blog\/Gestire-il-Drag--Drop-in-Angulax-55\" target=\"_blank\" rel=\"noreferrer noopener\">primo articolo<\/a>, abbiamo utilizzato il portale cloud Azure Machine Learning per esplorare i dati cercando di ottimizzare le&nbsp;<strong><em>feature<\/em><\/strong>&nbsp;disponibili grazie a un po\u2019 di&nbsp; tecniche classiche.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nel&nbsp;<a href=\"https:\/\/www.blexin.com\/it-IT\/Article\/Blog\/Creare-un-modello-per-il-Machine-Learning-con-MLNET-65\" target=\"_blank\" rel=\"noreferrer noopener\">secondo articolo<\/a>, invece, abbiamo creato in Visual Studio una console application che, grazie alla libreria ML.NET, ha generato un modello basato sui dati disponibili. Cosa possiamo aspettarci da questo modello? Qual \u00e8 l\u2019accuratezza della previsione secondo la quale il calciatore&nbsp;<strong><em>X<\/em><\/strong>&nbsp;giocher\u00e0&nbsp;<strong><em>n<\/em><\/strong>&nbsp;minuti oppure segner\u00e0&nbsp;<strong><em>n<\/em><\/strong>&nbsp;goals oppure raccoglier\u00e0&nbsp;<strong><em>n<\/em><\/strong>&nbsp;cartellini gialli?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019errore classico nel misurare l\u2019accuratezza della predizione \u00e8 quello di utilizzare lo stesso dataset di partenza (chiamiamolo&nbsp;<strong><em>training<\/em><\/strong>&nbsp;dataset). Ovviamente, il modello sar\u00e0 accurato nel prevedere i dati che sono stati usati per costruirlo, ma avr\u00e0 una bassa accuratezza nel momento in cui dovr\u00e0 valutare un dato nuovo.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le performance di un modello vanno valutate su un campione di dati che non sia stato usato per costruirlo. Occorre, quindi, escludere un po\u2019 di dati dal training dataset e, a partire da essi, testare l\u2019accuratezza. Questo sottoinsieme di dati \u00e8 chiamato&nbsp;<strong><em>validation data<\/em><\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"733\" height=\"576\" data-attachment-id=\"27674\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/attachment\/image01-10\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-10.png?fit=733%2C576&amp;ssl=1\" data-orig-size=\"733,576\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image01-10\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-10.png?fit=733%2C576&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-10.png?resize=733%2C576&#038;ssl=1\" alt=\"\" class=\"wp-image-27674\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-10.png 733w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-10-480x377.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 733px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">(fonte&nbsp;<a href=\"https:\/\/cdn-media-1.freecodecamp.org\/images\/augTyKVuV5uvIJKNnqUf3oR1K5n7E8DaqirO\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/cdn-media-1.freecodecamp.org\/images\/augTyKVuV5uvIJKNnqUf3oR1K5n7E8DaqirO<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Come vanno creati i validation data? Rispondere a questa semplice domanda, richiederebbe un articolo a parte, per descrivere tutte le possibili tecniche, la loro validit\u00e0 e fattibilit\u00e0. L\u2019unica possibilit\u00e0 che abbiamo come&nbsp;<strong><em>absolute beginners&nbsp;<\/em><\/strong>\u00e8 affidarci a dei tool gi\u00e0 pronti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Restiamo nel mondo Microsoft (analoghi strumenti esistono anche per il cloud Amazon e quello Google) con la libreria ML.NET scoperta nel precedente articolo. Stavolta per\u00f2, piuttosto che lavorare in una console application in Visual Studio, installiamo globalmente la CLI (Command Line Interface) di ML.NET. L\u2019unico prerequisito \u00e8 avere installato l\u2019SDK di .NET Core sulla propria macchina.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>dotnet tool install -g mlnet<\/code><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"286\" data-attachment-id=\"27677\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/attachment\/image02-9\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-9.png?fit=1171%2C327&amp;ssl=1\" data-orig-size=\"1171,327\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image02-9\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-9.png?fit=1024%2C286&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-9.png?resize=1024%2C286&#038;ssl=1\" alt=\"\" class=\"wp-image-27677\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-9-1024x286.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-9-980x274.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-9-480x134.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La documentazione ci suggerisce di creare in una cartella vuota una console application<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"998\" height=\"142\" data-attachment-id=\"27679\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/attachment\/image03-8\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-8.png?fit=998%2C142&amp;ssl=1\" data-orig-size=\"998,142\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image03-8\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-8.png?fit=998%2C142&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-8.png?resize=998%2C142&#038;ssl=1\" alt=\"\" class=\"wp-image-27679\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-8.png 998w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-8-980x139.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-8-480x68.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 998px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">e di lanciare in essa il comando&nbsp;<strong><em>mlnet autotrain<\/em><\/strong>&nbsp;sul nostro dataset (copiato anch\u2019esso nella stessa cartella). Il comando completo \u00e8:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>mlnet auto-train --task regression --dataset \"data.csv\" --label-column-name \"Minutes\" --max-exploration-time 500<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il parametro &#8212;<strong>task<\/strong>&nbsp;va scelto tra Binary Classification, Multiclass Classification e Regression. Poich\u00e9 siamo interessati a predire; un valore numerico (ad esempio Minutes o Goals) scegliamo Regression.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>&#8211;dataset<\/em><\/strong>&nbsp;indica il file contenente il nostro campione di dati mentre&nbsp;&nbsp;<strong>&#8211;label-column<\/strong>&nbsp;indica la colonna del file che vogliamo predire.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>&#8211;max-exploration-time<\/strong>&nbsp;indica il tempo (in secondi) che vogliamo dare a ML.NET per esplorare differenti modelli. Questo parametro (detto anche training time) va scelto proporzionalmente alla dimensione del dataset.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Durante questo intervallo di tempo, la CLI indica quanto tempo \u00e8 rimasto, l\u2019accuratezza del miglior modello (<strong><em>Best Accuracy<\/em><\/strong>), l\u2019algoritmo usato per raggiungerla (<strong><em>Best Algorithm<\/em><\/strong>) e l\u2019ultimo algoritmo analizzato (<strong><em>Last Algorithm<\/em><\/strong>)<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"979\" height=\"110\" data-attachment-id=\"27682\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/attachment\/image04-9\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-9.png?fit=979%2C110&amp;ssl=1\" data-orig-size=\"979,110\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image04-9\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-9.png?fit=979%2C110&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-9.png?resize=979%2C110&#038;ssl=1\" alt=\"\" class=\"wp-image-27682\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-9.png 979w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-9-480x54.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 979px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Dopo aver esplorato ben 106 modelli, il risultato finale \u00e8 il seguente:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"313\" data-attachment-id=\"27684\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/attachment\/image05-10\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-10.png?fit=1387%2C424&amp;ssl=1\" data-orig-size=\"1387,424\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image05-10\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-10.png?fit=1024%2C313&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-10.png?resize=1024%2C313&#038;ssl=1\" alt=\"\" class=\"wp-image-27684\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-10-980x300.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-10-480x147.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Una Best quality del 45%&nbsp;non \u00e8 un risultato straordinario, ma neppure terribile se consideriamo che siamo partiti da 0.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Notiamo che la CLI ha anche creato un template di codice C# che utilizza il modello generato (<strong><em>MLModel.zip<\/em><\/strong>).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"543\" height=\"300\" data-attachment-id=\"27686\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/attachment\/image06-9\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image06-9.png?fit=543%2C300&amp;ssl=1\" data-orig-size=\"543,300\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image06-9\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image06-9.png?fit=543%2C300&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image06-9.png?resize=543%2C300&#038;ssl=1\" alt=\"\" class=\"wp-image-27686\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image06-9.png 543w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image06-9-480x265.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 543px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Il codice della console application (<strong><em>SampleRegression.ConsoleApp<\/em><\/strong>) \u00e8 molto semplice: dopo aver caricato il modello viene creato un motore di predizione a partire da esso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>MLContext mlContext = new MLContext();<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>var mlModel = mlContext.Model.Load(GetAbsolutePath(MODEL_FILEPATH), out DataViewSchema inputSchema);<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>var predEngine = mlContext.Model.CreatePredictionEngine&lt;ModelInput, ModelOutput&gt;(mlModel);<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il motore di predizione offre un metodo, chiamato&nbsp;<em>Predict<\/em>, che prende in input una riga di nuove feature. Il metodo restituisce la predizione sulla label cercata dal modello (nel nostro caso Minutes).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>ModelOutput predictionResult = predEngine.Predict(newData);<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A scopo dimostrativo, il template generato prende in input una riga dal file di partenza (data.csv), mostrandone l\u2019output generato e confrontandolo col valore vero.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"507\" height=\"76\" data-attachment-id=\"27689\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/attachment\/image07-9\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image07-9.png?fit=507%2C76&amp;ssl=1\" data-orig-size=\"507,76\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image07-9\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image07-9.png?fit=507%2C76&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image07-9.png?resize=507%2C76&#038;ssl=1\" alt=\"\" class=\"wp-image-27689\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image07-9.png 507w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image07-9-480x72.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 507px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La CLI di ML.NET \u00e8 dunque uno strumento molto semplice ma al tempo stesso potente, per automatizzare una serie di operazioni ripetitive e complesse. Il suo utilizzo ci consente di spostare l\u2019attenzione sul problema reale: la validit\u00e0 del nostro dataset e la sua capacit\u00e0 predittiva. Ad esempio, possiamo velocemente testare cosa succede cambiando la Label (Goals invece che Minutes). La best Quality scende al 31%. Altro test \u00e8 quello di ridurre il numero di feature nel dataset (rimuovendo ad esempio i nomi delle squadre coinvolte e l\u2019identit\u00e0 del giocatore).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"353\" data-attachment-id=\"27691\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/attachment\/image08-7\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image08-7.png?fit=1406%2C484&amp;ssl=1\" data-orig-size=\"1406,484\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image08-7\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image08-7.png?fit=1024%2C353&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image08-7.png?resize=1024%2C353&#038;ssl=1\" alt=\"\" class=\"wp-image-27691\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image08-7-980x337.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image08-7-480x165.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La best quality sulla predizione dei Minutes cala ancora di pi\u00f9: dal 45% al 27%.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019approccio&nbsp;<strong><em>brute-force,&nbsp;<\/em><\/strong>consistente nell\u2019affidarsi ciecamente a un software, non sembra quindi portarci ad alcun risultato soddisfacente. Perch\u00e9? La risposta sta ancora una volta nella costruzione e selezione delle feature.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Partiamo da una considerazione apparentemente slegata dal contesto del machine learning: siamo molto bravi a risolvere problemi lineari.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"301\" height=\"297\" data-attachment-id=\"27693\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/attachment\/image09-6\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image09-6.png?fit=301%2C297&amp;ssl=1\" data-orig-size=\"301,297\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image09-6\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image09-6.png?fit=301%2C297&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image09-6.png?resize=301%2C297&#038;ssl=1\" alt=\"\" class=\"wp-image-27693\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">(fonte:&nbsp;<a href=\"https:\/\/developers.google.com\/machine-learning\/crash-course\/feature-crosses\/encoding-nonlinearity\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/developers.google.com\/machine-learning\/crash-course\/feature-crosses\/encoding-nonlinearity<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ad esempio: siamo capaci di trovare una linea che separi i punti blu da quelli arancioni? Beh, si! Non avremo una separazione perfetta, ma sicuramente gran parte dei punti blu si trover\u00e0 alla destra di questa linea di separazione.<br>Cosa possiamo dire invece sui punti nell\u2019immagine seguente?<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"322\" height=\"316\" data-attachment-id=\"27696\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/attachment\/image10-4\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image10-4.png?fit=322%2C316&amp;ssl=1\" data-orig-size=\"322,316\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image10-4\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image10-4.png?fit=322%2C316&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image10-4.png?resize=322%2C316&#038;ssl=1\" alt=\"\" class=\"wp-image-27696\" srcset=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image10-4.png?w=322&amp;ssl=1 322w, https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image10-4.png?resize=300%2C294&amp;ssl=1 300w\" sizes=\"auto, (max-width: 322px) 100vw, 322px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">(fonte:&nbsp;<a href=\"https:\/\/developers.google.com\/machine-learning\/crash-course\/feature-crosses\/encoding-nonlinearity\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/developers.google.com\/machine-learning\/crash-course\/feature-crosses\/encoding-nonlinearity&nbsp;<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Stavolta non riusciamo a trovare un\u2019unica linea di separazione.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"329\" height=\"318\" data-attachment-id=\"27698\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/attachment\/image11-4\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image11-4.png?fit=329%2C318&amp;ssl=1\" data-orig-size=\"329,318\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image11-4\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image11-4.png?fit=329%2C318&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image11-4.png?resize=329%2C318&#038;ssl=1\" alt=\"\" class=\"wp-image-27698\" srcset=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image11-4.png?w=329&amp;ssl=1 329w, https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image11-4.png?resize=300%2C290&amp;ssl=1 300w\" sizes=\"auto, (max-width: 329px) 100vw, 329px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">(fonte:&nbsp;<a href=\"https:\/\/developers.google.com\/machine-learning\/crash-course\/feature-crosses\/encoding-nonlinearity\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/developers.google.com\/machine-learning\/crash-course\/feature-crosses\/encoding-nonlinearity&nbsp;<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si tratta di un problema non lineare che pu\u00f2 essere risolto introducendo quella che in gergo si chiama<strong>&nbsp;feature cross,&nbsp;<\/strong>ossia una nuova feature artificiale creata a partire da quelle esistenti. Torniamo all\u2019ultima immagine e supponiamo di spostare il sistema di riferimento nella maniera seguente:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"214\" height=\"207\" data-attachment-id=\"27700\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/attachment\/image12-3\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image12-3.png?fit=214%2C207&amp;ssl=1\" data-orig-size=\"214,207\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image12-3\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image12-3.png?fit=214%2C207&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image12-3.png?resize=214%2C207&#038;ssl=1\" alt=\"\" class=\"wp-image-27700\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">(fonte:&nbsp;<a href=\"https:\/\/developers.google.com\/machine-learning\/crash-course\/feature-crosses\/encoding-nonlinearity\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/developers.google.com\/machine-learning\/crash-course\/feature-crosses\/encoding-nonlinearity&nbsp;<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se x1 e x2 sono entrambi positivi o entrambi negativi rispetto a questo nuovo sistema di riferimento, abbiamo un punto blu. In caso contrario, abbiamo un punto arancione.<br>Introduciamo quindi una feature cross, x3, ottenuta moltiplicando x1 ed x2.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>x3 = x1 * x2<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">x3 \u00e8 in grado di linearizzare il nostro problema, perch\u00e9 il suo segno riesce a separare i punti blu da quelli arancioni!<br>Se quindi scrivo la pi\u00f9 generale relazione lineare in termini di x1,x2 e x3:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>y = w1 * x1 + w2 * x2 + w3 * x3 + b<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ponendo w1 e w2 uguali a 0 e w3 = 1, ho trovato una linea di separazione anche se il problema non \u00e8 lineare.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Possiamo creare una feature cross in tanti modi diversi: moltiplicando ad esempio cinque feature o moltiplicando per se stessa una feature.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019introduzione di un nuovo sistema di riferimento \u00e8 stata decisiva nel nostro esempio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c8 stato un trucchetto o c\u2019\u00e8 un significato pi\u00f9 recondito? Ci\u00f2 che siamo riusciti a fare \u00e8 discretizzare lo spazio dei nostri punti e dividerlo in quattro quadranti, ciascuno dei quali aveva praticamente abitanti di un solo colore.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Incidentalmente, il numero di abitanti di ciascun settore era molto alto. Per ogni quadrante abbiamo una probabilit\u00e0 molto alta che un punto sia di uno dei due colori.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quindi, se ho un nuovo punto e scopro che si trova nel primo quadrante (x1 e x2 &gt; 0), ho una probabilit\u00e0 molto alta che il punto sia blu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Prendiamo un altro esempio, pi\u00f9 complesso.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"262\" height=\"238\" data-attachment-id=\"27703\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/attachment\/image13-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image13-2.png?fit=262%2C238&amp;ssl=1\" data-orig-size=\"262,238\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image13-2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image13-2.png?fit=262%2C238&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image13-2.png?resize=262%2C238&#038;ssl=1\" alt=\"\" class=\"wp-image-27703\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">(fonte:&nbsp;<a href=\"https:\/\/developers.google.com\/machine-learning\/crash-course\/feature-crosses\/encoding-nonlinearity\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/developers.google.com\/machine-learning\/crash-course\/feature-crosses\/encoding-nonlinearity<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Stavolta non bastano quattro quadranti a discretizzare il nostro spazio. Ma possiamo immaginare una griglia di questo tipo<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"215\" height=\"207\" data-attachment-id=\"27705\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/attachment\/image14-3\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image14-3.png?fit=215%2C207&amp;ssl=1\" data-orig-size=\"215,207\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image14-3\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image14-3.png?fit=215%2C207&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image14-3.png?resize=215%2C207&#038;ssl=1\" alt=\"\" class=\"wp-image-27705\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">(fonte:&nbsp;<a href=\"https:\/\/developers.google.com\/machine-learning\/crash-course\/feature-crosses\/encoding-nonlinearity\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/developers.google.com\/machine-learning\/crash-course\/feature-crosses\/encoding-nonlinearity&nbsp;<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">e per ogni quadratino avr\u00f2 un\u2019alta percentuale di punti appartenenti a una sola categoria.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"229\" height=\"203\" data-attachment-id=\"27707\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/attachment\/image15-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image15-1.png?fit=229%2C203&amp;ssl=1\" data-orig-size=\"229,203\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image15-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image15-1.png?fit=229%2C203&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image15-1.png?resize=229%2C203&#038;ssl=1\" alt=\"\" class=\"wp-image-27707\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">(fonte:&nbsp;<a href=\"https:\/\/developers.google.com\/machine-learning\/crash-course\/feature-crosses\/encoding-nonlinearity\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/developers.google.com\/machine-learning\/crash-course\/feature-crosses\/encoding-nonlinearity<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La tecnica del features crossing richiede la memorizzazione di come abbiamo discretizzato il nostro spazio di punti. Per ciascuna cella, inoltre, dobbiamo avere un numero sufficiente di punti da rendere statisticamente significativa la sua percentuale di popolazione. Per tale motivo \u00e8 una tecnica che solo negli ultimi anni di vita del ML ha preso piede: occorrono tanti dati per renderla efficace.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Confusi? Ecco un ultimo esempio che spero vi chiarisca le idee.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Supponiamo di avere una foto di un\u2019automobile scattata in una citt\u00e0. Dalla foto si distingue solo il dettaglio del colore dell\u2019automobile. Ci chiediamo se si tratta o meno di taxi. Il dataset che utilizzeremo per costruire un modello predittivo sar\u00e0 di questo tipo:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Colore: Rosso, Citt\u00e0: Napoli. Taxi? No<br>Colore: Bianco, Citt\u00e0: Napoli. Taxi? Si<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2026\u2026\u2026\u2026\u2026.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Colore: Giallo, Citt\u00e0: New York. Taxi? Si<br>Colore: Bianco, Citt\u00e0: New York. Taxi? No<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il modello lineare che usi colore e citt\u00e0 e ne calcoli i relativi pesi ha un problema.&nbsp;&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Supponiamo di avere una nuova foto in cui vediamo una automobile gialla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In gran parte delle citt\u00e0 del mondo, il colore dei taxi \u00e8 giallo: quindi avremo un peso molto alto per questo colore e assegneremo la label come Taxi anche se la foto \u00e8 stata scattata a Napoli.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La feature cross creata dalla combinazione Colore e Citt\u00e0 invece linearizza il problema.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">x3 = (Rosso e Napoli) Taxi? No<br>x3 = (Bianco e Napoli) Taxi? Si<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2026\u2026\u2026\u2026\u2026.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">x3 = (Giallo e New York) Taxi? Si<br>x3 = (Bianco e New York) Taxi? No<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Abbiamo discretizzato il nostro spazio e ogni singola combinazione di colore e citt\u00e0 (quello che prima abbiamo chiamato quadratino) ha una probabilit\u00e0 molto alta (o molto bassa) della label Taxi. La nuova foto che mostri un\u2019automobile bianca a New York avr\u00e0 un\u2019alta percentuale che si tratti di un taxi. Perch\u00e9 nel nostro dataset di partenza, avevamo ad esempio 1000 foto di auto bianche scattate a New York e l\u201980% di esse era un taxi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il nostro dataset calcistico \u00e8 ragionevolmente grande da poter applicare la tecnica del features crossing in maniera tale da linearizzare il nostro spazio e rendere pi\u00f9 efficiente il modello generato da ML.NET. Nel prossimo articolo vedremo come.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A presto!<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Vediamo come valutare l&#8217;efficienza dei modelli di ML e cercare di migliorarla con la tecnica del feature crossing<\/p>\n","protected":false},"author":196716245,"featured_media":27672,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","inline_featured_image":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[688637374],"tags":[688637451],"class_list":["post-27671","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-machinelearning"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Feature crossing per migliorare il nostro modello ML - Blexin<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Feature crossing per migliorare il nostro modello ML - Blexin\" \/>\n<meta property=\"og:description\" content=\"Vediamo come valutare l&#039;efficienza dei modelli di ML e cercare di migliorarla con la tecnica del feature crossing\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/\" \/>\n<meta property=\"og:site_name\" content=\"Blexin\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-13T23:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-01-13T08:40:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-14.png?fit=1024%2C608&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"608\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Salvatore Sorrentino\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salvatore Sorrentino\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/feature-crossing-to-improve-our-ml-model\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/feature-crossing-to-improve-our-ml-model\\\/\"},\"author\":{\"name\":\"Salvatore Sorrentino\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/354db2bc97cac71c2ceeca21a92d5bed\"},\"headline\":\"Feature crossing per migliorare il nostro modello ML\",\"datePublished\":\"2020-01-13T23:00:00+00:00\",\"dateModified\":\"2021-01-13T08:40:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/feature-crossing-to-improve-our-ml-model\\\/\"},\"wordCount\":1612,\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/feature-crossing-to-improve-our-ml-model\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/image00-14.png?fit=1024%2C608&ssl=1\",\"keywords\":[\"Machinelearning\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/feature-crossing-to-improve-our-ml-model\\\/\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/feature-crossing-to-improve-our-ml-model\\\/\",\"name\":\"Feature crossing per migliorare il nostro modello ML - Blexin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/feature-crossing-to-improve-our-ml-model\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/feature-crossing-to-improve-our-ml-model\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/image00-14.png?fit=1024%2C608&ssl=1\",\"datePublished\":\"2020-01-13T23:00:00+00:00\",\"dateModified\":\"2021-01-13T08:40:16+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/354db2bc97cac71c2ceeca21a92d5bed\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/feature-crossing-to-improve-our-ml-model\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/feature-crossing-to-improve-our-ml-model\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/feature-crossing-to-improve-our-ml-model\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/image00-14.png?fit=1024%2C608&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/image00-14.png?fit=1024%2C608&ssl=1\",\"width\":1024,\"height\":608},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/feature-crossing-to-improve-our-ml-model\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blexin.com\\\/it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Feature crossing per migliorare il nostro modello ML\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/\",\"name\":\"Blexin\",\"description\":\"Con noi \u00e8 semplice\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blexin.com\\\/it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/354db2bc97cac71c2ceeca21a92d5bed\",\"name\":\"Salvatore Sorrentino\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g\",\"caption\":\"Salvatore Sorrentino\"},\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/author\\\/salvatore-sorrentinoblexin-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Feature crossing per migliorare il nostro modello ML - Blexin","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/","og_locale":"it_IT","og_type":"article","og_title":"Feature crossing per migliorare il nostro modello ML - Blexin","og_description":"Vediamo come valutare l'efficienza dei modelli di ML e cercare di migliorarla con la tecnica del feature crossing","og_url":"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/","og_site_name":"Blexin","article_published_time":"2020-01-13T23:00:00+00:00","article_modified_time":"2021-01-13T08:40:16+00:00","og_image":[{"width":1024,"height":608,"url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-14.png?fit=1024%2C608&ssl=1","type":"image\/png"}],"author":"Salvatore Sorrentino","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"Salvatore Sorrentino","Tempo di lettura stimato":"8 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/"},"author":{"name":"Salvatore Sorrentino","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/354db2bc97cac71c2ceeca21a92d5bed"},"headline":"Feature crossing per migliorare il nostro modello ML","datePublished":"2020-01-13T23:00:00+00:00","dateModified":"2021-01-13T08:40:16+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/"},"wordCount":1612,"image":{"@id":"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-14.png?fit=1024%2C608&ssl=1","keywords":["Machinelearning"],"articleSection":["Blog"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/","url":"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/","name":"Feature crossing per migliorare il nostro modello ML - Blexin","isPartOf":{"@id":"https:\/\/blexin.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-14.png?fit=1024%2C608&ssl=1","datePublished":"2020-01-13T23:00:00+00:00","dateModified":"2021-01-13T08:40:16+00:00","author":{"@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/354db2bc97cac71c2ceeca21a92d5bed"},"breadcrumb":{"@id":"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/#primaryimage","url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-14.png?fit=1024%2C608&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-14.png?fit=1024%2C608&ssl=1","width":1024,"height":608},{"@type":"BreadcrumbList","@id":"https:\/\/blexin.com\/it\/blog\/feature-crossing-to-improve-our-ml-model\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/it\/"},{"@type":"ListItem","position":2,"name":"Feature crossing per migliorare il nostro modello ML"}]},{"@type":"WebSite","@id":"https:\/\/blexin.com\/it\/#website","url":"https:\/\/blexin.com\/it\/","name":"Blexin","description":"Con noi \u00e8 semplice","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blexin.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/354db2bc97cac71c2ceeca21a92d5bed","name":"Salvatore Sorrentino","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g","caption":"Salvatore Sorrentino"},"url":"https:\/\/blexin.com\/it\/author\/salvatore-sorrentinoblexin-com\/"}]}},"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-7cj","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-14.png?fit=1024%2C608&ssl=1","_links":{"self":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/27671","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/users\/196716245"}],"replies":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/comments?post=27671"}],"version-history":[{"count":8,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/27671\/revisions"}],"predecessor-version":[{"id":27715,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/27671\/revisions\/27715"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media\/27672"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media?parent=27671"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/categories?post=27671"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/tags?post=27671"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}