Partizionamento dei dati in set di training e in set di testing (Analysis Services - Data mining)
La separazione dei dati in set di training e set di testing rappresenta una parte importante della valutazione dei modelli di data mining. In genere, quando si partiziona un set di dati in un set di training e un set di testing, la maggior parte dei dati viene utilizzata per il training e una parte più piccola viene utilizzata per il testing. In Analysis Services viene eseguito un campionamento casuale dei dati per assicurare che le partizioni di testing e training siano simili. Utilizzando dati simili per il training e il testing, è possibile ridurre al minimo gli effetti delle discrepanze di dati e comprendere meglio le caratteristiche del modello.
Dopo aver elaborato il modello tramite il set di training, il modello viene testato eseguendo stime sul set di test. Poiché i dati nel set di testing contengono già valori noti per l'attributo di cui si desidera eseguire la stima, la correttezza delle ipotesi del modello può essere determinata facilmente.
In genere, l'accuratezza predittiva di un modello di data mining è misurata dall'accuratezza stessa del modello o dall'accuratezza della classificazione. Per ulteriori informazioni sull'utilizzo dei grafici di accuratezza e di altro tipo, vedere Strumenti per la creazione di grafici di accuratezza dei modelli (Analysis Services - Data mining).
Creazione di partizioni per le strutture di data mining
In SQL Server 2008 i dati vengono partizionati al livello della struttura di data mining. Le informazioni sulle dimensioni della partizione e i dati in ogni partizione vengono archiviate con la struttura e tutti i modelli basati su quella struttura possono utilizzare le partizioni per il training e il testing.
È possibile definire una partizione in una struttura di data mining nei modi seguenti:
Utilizzando la Creazione guidata modello di data mining per partizionare una struttura di data mining quando si crea la struttura di data mining.
Modificando le proprietà della struttura nella scheda Struttura di data mining della Progettazione modelli di data mining.
Creando e modificando a livello di codice le strutture utilizzando librerie AMO (Analysis Management Objects) o XML Data Definition Language.
Utilizzando la Creazione guidata modelli di data mining per partizionare una struttura di data mining
Per impostazione predefinita, dopo aver definito le origini dati per una struttura di data mining, la Creazione guidata modelli di data mining divide i dati in partizioni: il 70% per il training e il 30% per il testing. Questo rapporto viene spesso utilizzato nel data mining, ma con Analysis Services è possibile modificarlo secondo le proprie necessità.
È anche possibile configurare la procedura guidata per impostare un numero massimo di case di training oppure combinare i limiti per consentire una percentuale massima di case che rappresenti un numero massimo di case specificato. Quando si specifica sia una percentuale massima che un numero massimo di case, Analysis Services utilizza il più piccolo dei due limiti come dimensione del set di test. Ad esempio, se si specifica il 30% di controllo per i case del testing e 1000 come numero massimo di test case, la dimensione del set di test non supererà mai i 1000 case. Questa condizione può essere utile se si desidera assicurare che le dimensioni del set di test rimangano coerenti anche se vengono aggiunti ulteriori dati di training al modello.
Se si utilizza la stessa vista origine dati per strutture di data mining diverse e si desidera assicurare che i dati vengano partizionati approssimativamente nello stesso modo per tutte le strutture di data mining e i relativi modelli, è necessario specificare il valore di inizializzazione utilizzato per inizializzare il campionamento casuale. Quando si specifica un valore per HoldoutSeed, Analysis Services utilizzerà quel valore per iniziare il campionamento. In caso contrario, per creare il valore di inizializzazione viene utilizzato un algoritmo di hash sul nome della struttura di data mining.
Nota
Se si crea una copia della struttura di data mining utilizzando le istruzioni EXPORT e IMPORT, la nuova struttura di data mining avrà la stessa definizione della partizione, in quanto il processo di esportazione crea un nuovo ID, ma utilizza lo stesso nome. Tuttavia, se due strutture di data mining utilizzano la stessa origine dati sottostante ma hanno nomi diversi, le partizioni create per ogni struttura di data mining saranno diverse.
Modifica delle proprietà delle strutture
Se si crea ed elabora una struttura di data mining, e in un secondo momento si desidera aggiungere una partizione di testing, è possibile modificare le proprietà della struttura di data mining. Per modificare la modalità di partizionamento dei dati, modificare le proprietà seguenti:
Proprietà |
Descrizione |
---|---|
HoldoutMaxCases |
Specifica il numero massimo di case da includere nel set di testing. |
HoldoutMaxPercent |
Specifica il numero di case da includere nel set di testing come percentuale del set di dati completo. Se non sono presenti set di dati, specificare 0. |
HoldoutSeed |
Specifica un valore integer da utilizzare come valore di inizializzazione quando si selezionano in modo casuale i dati per le partizioni. Questo valore non influisce sul numero di case nel set di training. Invece, assicura che la partizione possa essere ripetuta. |
Se si aggiunge o modifica una partizione in una struttura esistente, è necessario rielaborare la struttura e tutti i modelli associati. Inoltre, poiché l'aggiunta di una partizione causa l'esecuzione del training del modello in un subset di dati differente, si possono ottenere risultati diversi dal modello.
Specifica a livello di codice di HOLDOUT
È possibile creare una struttura di data mining di dati partizionati utilizzando istruzioni DMX, AMO o DDL XML.
DMX Nel linguaggio DMX, l'istruzione CREATE MINING STRUCTURE è stata estesa per includere una clausola WITH HOLDOUT. Per la sintassi ed esempi dell'istruzione CREATE STRUCTURE, vedere CREATE MINING STRUCTURE (DMX).
Nota
L'istruzione ALTER MINING STRUCTURE non supporta l'utilizzo di parametri di controllo.
ASSL È possibile creare nuove strutture di data mining partizionate e aggiungere partizioni a strutture di data mining esistenti utilizzando Analysis Services Scripting Language (ASSL). Per ulteriori informazioni, vedere Elemento MiningStructure (ASSL).
AMO È anche possibile visualizzare e modificare le partizioni tramite AMO. Per ulteriori informazioni, vedere Modello di oggetti AMO e concetti relativi.
È possibile visualizzare informazioni sulle partizioni in una struttura di data mining esistente eseguendo query sul set di righe dello schema di data mining. A tale scopo, effettuare una chiamata DISCOVER ROWSET o utilizzare una query DMX. Per ulteriori informazioni, vedere Set di righe dello schema di data mining o Esecuzione di query sui set di righe dello schema di data mining (Analysis Services - Data mining).
Utilizzo delle informazioni sulle partizioni
Tutte le informazioni sulle partizioni di training e test vengono memorizzate per impostazione predefinita nella cache per consentire di utilizzare le partizioni esistenti per il training e il test di nuovi modelli. È anche possibile definire i filtri da applicare alle partizioni dei dati di controllo memorizzate nella cache, in modo da poter valutare il modello in subset di dati. Per ulteriori informazioni, vedere Creazione di filtri per i modelli di data mining (Analysis Services - Data mining).
La suddivisione dei case in partizioni dipende dalla modalità di configurazione dei dati di controllo e dai dati forniti. Se si desidera determinare il numero dei case di ogni partizione o trovare i dettagli sui case inclusi nei set di training e di test, è possibile eseguire una query sulla struttura del modello creando una query DMX. Ad esempio, nella query seguente vengono restituiti i case utilizzati nel set di training del modello.
SELECT * from <structure>.CASES WHERE IsTrainingCase()
Per recuperare solo i test case e quindi filtrarli in una delle colonne nella struttura di data mining, utilizzare la sintassi seguente:
SELECT * from <structure>.CASES WHERE IsTestCase() AND <structure column name> = '<value>'
Limitazioni sull'utilizzo del controllo
Per utilizzare il controllo, è necessario impostare la proprietà MiningStructureCacheMode della struttura di data mining sul valore predefinito, KeepTrainingCases. Se si modifica la proprietà CacheMode su ClearAfterProcessing e quindi si rielabora la struttura di data mining, la partizione andrà persa.
Non è possibile utilizzare partizioni con i modelli Time Series. Il partizionamento è pertanto disattivato se si crea una partizione e si specifica l'utilizzo dell'algoritmo Microsoft Time Series per creare il modello. Il partizionamento è inoltre disattivato se la struttura di data mining contiene una colonna KEY TIME al livello del case o della tabella nidificata.
È possibile configurare inavvertitamente le partizioni in modo da utilizzare l'intero set di dati per il test e non utilizzare alcun dato per il training. Tuttavia, Analysis Services genererà un errore per consentire di correggere il problema. Inoltre, Analysis Services avvisa quando la struttura viene elaborata se più del 50% dei dati viene controllato per il testing.
Nella maggior parte dei case, il valore di controllo predefinito di 30 fornisce un buon bilanciamento tra dati di training e dati di testing. Non esiste un modo semplice per determinare le dimensioni del set di dati al fine di garantire un training sufficiente o del set di training per evitare l'overfitting. Dopo aver creato un modello, è tuttavia possibile utilizzare la convalida incrociata per stimare il set di dati rispetto a un determinato modello. Per ulteriori informazioni, vedere Convalida incrociata (Analysis Services - Data mining).
Oltre alle proprietà elencate nella tabella precedente, in AMO e DDL XML viene fornita una proprietà di sola lettura, HoldoutActualSize. Tuttavia, poiché la dimensione effettiva di una partizione non può essere determinata accuratamente finché non viene elaborata la struttura, è necessario controllare se il modello è stato elaborato prima di recuperare il valore della proprietà HoldoutActualSize.