5

Ho un problema di apprendimento automatico e non so se esiste una soluzione teorica.Filosofia di apprendimento automatico: applicazione del modello a dati distorti

devo etichettati dati (chiamiamolo dataset D1) per costruire un modello di classificazione della foresta casuale e si comporta bene.

Ora il mio interesse principale è applicare questo modello su un altro dataset D2 che ha zero etichette, ovvero non posso usarlo per l'allenamento. L'unico modo per misurare le prestazioni su D2 consiste nel controllare le proporzioni delle classi previste da esso.

Problema: D2 è inclinata rispetto al D1 (caratteristiche non hanno la stessa media o adattano la stessa distribuzione). Per questo motivo, il modello applicato a D2 fornisce risultati fortemente distorti verso una classe. So che questo è normale perché la maggior parte di D2 è simile a un piccolo sottoinsieme di D1.

Ma c'è un modo per correggere tale asimmetria? So dalla natura del mio problema che le proporzioni delle classi previste dovrebbero essere meno di parte. Ho provato la normalizzazione ma non aiuta davvero.

sento che non sto pensando dritto: 3

risposta

7

Domanda intressante. La mia risposta su questo ha tre parti.

Disclaimer: Non c'è il pranzo libero. Quindi, non si può mai con certezza senza controllare le prestazioni sulle etichette del set di test reali. Nel peggiore dei casi hai un concetto di deriva nel tuo problema che rende impossibile prevedere la tua classe di destinazione. Tuttavia, ci sono soluzioni che possono fornire buoni risultati

per la notazione:

Le caratteristiche sono indicati con X variabile di destinazione dal Y e il classificatore imparato da f(X) |-> Y.La distribuzione dei X in D1 da P(X|D1) (abusando notazione un po ')

distribuzione Classe Testset

You "postulato che si potrebbe utilizzare la distribuzione nelle variabili previsti (" controllare le percentuali relative alle categorie previste dal Questo però può essere solo un'indicazione: sto costruendo classificatori nell'industria per prevedere che una macchina non funzionerà (manutenzione predittiva). Ci sono molti ingegneri che cercano di rendere i miei dati in ingresso distorti, questo sta rendendo le macchine che producono i dati sono più affidabili, ma questo non è un problema, in quanto una classe scompare fondamentalmente, tuttavia i classificatori sono ancora validi

C'è un modo molto semplice sulla domanda "come risolvere" la distribuzione nelle etichette di destinazione sul set di test. L'idea sarebbe fondamentalmente classificare tutte le istanze di test in base alle etichette previste e campionare (con la sostituzione) i punti dati in base alla distribuzione della variabile target desiderata. Potresti quindi provare a controllare la distribuzione sulle funzionalità X ma questo non ti direbbe troppo.

L'asimmetria può essere un problema? In effetti, come un classificatore può tipicamente cercare di minimizzare la misura accuracy di F1 o qualche altra proprietà statistica. Se si conosce in anticipo la distribuzione nel D2, è possibile fornire una funzione di costo che riduce al minimo i costi di questa distribuzione. Questi costi possono essere utilizzati per ricampionare i dati di allenamento come menzionato nell'altra risposta, tuttavia alcuni algoritmi di apprendimento hanno anche tecniche più elaborate per incorporare queste informazioni.

Outlier Detection

Una domanda è se è possibile rilevare che qualcosa è cambiato negli ingressi X. Questo è abbastanza importante in quanto ciò può indicare che hai avuto i dati sbagliati. È possibile applicare test abbastanza semplici come ad esempio la media e la distribuzione in tutte le dimensioni. Tuttavia, questo ignora le dipendenze tra le variabili.

per i due illustrazione im utilizzando il set di dati dell'iride enter image description here

Due tecniche saltano in mente che permettono di rilevare che qualcosa nei dati è cambiato. La prima tecnica si basa sulla trasformazione PCA. Solo per numeri, ma ci sono idee simili per caratteristiche categoriali. PCA ti consente di trasformare i dati di input in uno spazio dimensionale inferiore. questo è PCA(X,t)=PCA([X1,...,Xn],t)=[Cond1,...,Condm]=Cond con una proiezione t Dove tipicamente con n<<m questa trasformazione è ancora reversibile tale che PCA^1(Cond,t) = X' e l'errore MSE(X,X') è piccolo. Per rilevare un problema, puoi monitorare questo errore e una volta aumentato puoi dire che diffidi delle tue previsioni.

Se costruisco un PCA su tutti i dati da versicolor e virginica e tracciare l'errore nella ricostruzione a due dimensioni (PCA su tutte le dimensioni iris) ottengo

enter image description here

se versicolor è i nuovi dati del i risultati sono meno convincenti.

enter image description here

Tuttavia, un PCA (o si dovrebbe occupare.simile) è fatto per i dati numerici comunque, quindi, può dare una buona indicazione senza troppo sovraccarico.

Una seconda tecnica di cui sono a conoscenza si basa sulle cosiddette macchine Vector Support di classe One. Dove una normale macchina vettoriale di supporto costruisce un classificatore che tenta di separare due classi target Y. Una macchina vettoriale di supporto di una classe tenta di separare la vista da dati non visibili. L'utilizzo di queste tecniche è abbastanza interessante se si utilizza una macchina vettoriale di supporto per la classificazione. Praticamente otterresti due classificazioni. Il primo dice i dati di destinazione e il secondo se sono già stati visti dati simili.

Se io costruisco un classificatore una classe su setosa e virginca e colore dalla novità ottengo il seguente grafico:

enter image description here

Come si può vedere dai dati versicolor sembra essere smettere di sospetto. In tal caso è una nuova classe. Tuttavia, supponendo che si tratti di casi di virginica, si stanno pericolosamente avvicinando all'iperoplano.

semi-supervisionato apprendimento e Transductive

per risolvere il tuo problema di fondo. L'idea di Transductive Learning, un caso speciale di apprendimento semi-supervisionato potrebbe essere interessante. Nell'apprendimento Semi supervision, il set di allenamento è composto da due parti. I dati etichettati e i dati non etichettati. Semi-sup-l usa tutti questi dati per costruire il classificatore. L'apprendimento transduttivo è un caso speciale in cui i dati non etichettati sono i tuoi dati di prova D2. L'idea è stata data da Vapnik come "non cercare di risolvere un problema più complicato [la costruzione di un classificatore per tutti i dati possibili] quando si vuole risolvere un problema più semplice [predire le etichette per D2]"

APENDIX

RCODE per i grafici

ggplot(iris)+aes(x=Petal.Width,y=Petal.Length,color=Species)+geom_point()+stat_ellipse() 
library(e1071) 
iris[iris$Species %in% c("virginica","setosa"),] 

ocl <- svm(iris[iris$Species %in% c("virginica","setosa"),3:4],type="one-classification") 
coloring <- predict(ocl,iris[,3:4],decision.values=TRUE) 

ggplot(iris)+aes(x=Petal.Width,y=Petal.Length,color=coloring)+geom_point()+stat_ellipse() 
ggplot(iris)+aes(x=Petal.Width,y=Petal.Length)+geom_point(color=rgb(red=0.8+0.1*attr(coloring,"decision.values"),green=rep(0,150),blue=1-(0.8+0.1*attr(coloring,"decision.values")))) 

pca <- prcomp(iris[,3:4]) 

#pca <- prcomp(iris[iris$Species %in% c("virginica","setosa"),1:4], retx = TRUE, scale = TRUE) 
pca <- prcomp(iris[iris$Species %in% c("virginica","setosa"),1:4], retx = TRUE, scale = TRUE,tol=0.2) 
    pca <- prcomp(iris[iris$Species %in% c("virginica","versicolor"),1:4], retx = TRUE, scale = TRUE,tol=0.4) 
    predicted <-predict(pca,iris[,1:4]) 
    inverted <- t(t(predicted %*% t(pca$rotation)) * pca$scale + pca$center) 
    ggplot(inverted[,3:4]-iris[,3:4])+aes(x=Petal.Width,y=Petal.Length,color=iris$ 
            Species)+geom_point()+stat_ellipse() 
2

Ci potrebbe essere un certo numero di fattori che potrebbero portare a questo risultato distorta:

Lei sembra indicare che D2 è inclinata in confronto a D1, quindi i risultati fortemente distorti potrebbero essere un risultato previsto (forse il set di dati D2 è fortemente focalizzato su una parte regionale dello spazio problematico in cui una classe è dominante). A seconda della natura dei dati, questo potrebbe essere un risultato valido.

Forse D1 è sovrallenato su una particolare classe. Potresti provare ad allenarti su un numero inferiore di casi nella classe per incoraggiare la classificazione in una delle altre classi per determinare il risultato. Non so quanti casi di formazione o test hai, ma se è grande e ci sono più etichette di quelle classi nei dati di addestramento rispetto alle altre, forse questo potrebbe portare a una sovrlassificazione.

Forse si potrebbe anche manipolare i dati di allenamento per essere più vicini ai mezzi di D2 per vedere quale impatto avrebbe sulla classificazione. Non ho mai provato prima però.

Spero che questo aiuti in qualche modo.

Problemi correlati