Processing math: 100%

22 votos

"Semi-supervisado de aprendizaje" - este es el sobreajuste?

Estaba leyendo el informe de la solución ganadora de un Kaggle de la competencia (Malware de Clasificación). El informe se puede encontrar en este post del foro. El problema era un problema de clasificación (nueve clases, la métrica fue la pérdida logarítmica) con 10000 elementos en el conjunto de tren, 10000 elementos en el conjunto de prueba.

Durante la competencia, los modelos fueron evaluados contra el 30% del conjunto de pruebas. Otro elemento importante es que los modelos se fueron realizando muy bien (cerca de 100% de exactitud)

Los autores utilizaron la técnica siguiente:

Otra técnica importante que logramos es Semisupervised de Aprendizaje. Nosotros primero generar pseudo etiquetas de prueba establecidos por la elección de la max probabilidad de que nuestro mejor modelo. Entonces podemos predecir el conjunto de pruebas de nuevo en un validación cruzada de la moda con el tren de datos y datos de prueba. Para ejemplo, el conjunto de datos de prueba se divide a 4 de la parte a, B, C y D. utilizamos la totalidad de los datos de entrenamiento, y los datos de la prueba a, B, C con sus pseudo etiquetas, juntos como el nuevo conjunto de entrenamiento y podemos predecir el conjunto de pruebas D.

El mismo método se utiliza para predecir a, B y C. Este enfoque, inventado por Xiaozhou, funciona sorprendentemente bien y se reduce el local de la cruz la validación de la pérdida, el público LB pérdida y privado LB pérdida. La mejor Semisupervised modelo de aprendizaje puede lograr 0.0023 en privado LB registro la pérdida, que es la mejor puntuación en todas nuestras soluciones.

Yo realmente no veo cómo se puede mejorar los resultados. Es debido a que el 30% de la prueba de conjunto fue "filtrado" y que era una forma de usar esta información?

O hay alguna razón teórica que explica por qué funciona ?

9voto

Loren Pechtel Puntos 2212

No parece ser el sobreajuste. Intuitivamente, el sobreajuste implica la formación a las peculiaridades (ruido) del conjunto de entrenamiento, y por lo tanto va peor en una salida de prueba que no comparte estas peculiaridades. Si entiendo lo que pasó, que no hizo inesperadamente-mal en cabo-cabo de datos de prueba y por lo que empíricamente las normas de sobreajuste. (Tienen otro problema, que mencionaré al final, pero no es el sobreajuste.)

Así que usted está en lo correcto que se aprovecha de los disponibles (30%?) los datos de prueba. La pregunta es: ¿cómo?

Si la disposición de los datos de prueba tiene etiquetas asociadas con él, usted podría simplemente bulto en los datos de entrenamiento y ampliar los datos de su entrenamiento, que en general producirá mejores resultados de una manera obvia. No hay una verdadera realización de allí.

Observe que las etiquetas no tienen que ser explícitamente en la lista si usted tiene acceso a una precisión de puntuación. Usted puede simplemente subir la exactitud de gradiente varias veces la presentación de las puntuaciones, que es lo que la gente ha hecho en el pasado con mal diseñada competiciones.

Dado que la disposición de los datos de prueba no tiene las etiquetas asociadas con ella-directa o indirectamente-hay al menos otras dos posibilidades:

En primer lugar, esta podría ser una indirecta impulsar método donde se está enfocando en los casos donde sus predicciones con sólo los datos de entrenamiento, de acuerdo con sus predicciones con la pseudo-etiqueta de datos de prueba incluido.

En segundo lugar, podría ser sencillo aprendizaje semi-supervisado. Intuitivamente: que usted podría estar usando la densidad de etiqueta de datos para ayudar a dar forma a los límites de la clasificación de un método supervisado. Vea la ilustración (https://en.wikipedia.org/wiki/Semi-supervised_learning#/media/File:Example_of_unlabeled_data_in_semisupervised_learning.png) en la definición de Wikipedia de aprendizaje semi-supervisado para aclarar.

PERO esto no quiere decir que no hay un truco. Y ese truco viene de la definición de datos de prueba y entrenamiento. En principio, los datos de entrenamiento representa los datos que usted podría tener en la mano cuando usted está listo para implementar el modelo. Datos de prueba y representa datos en el futuro que vendrá en su sistema una vez que está en funcionamiento.

En ese caso, la formación en la prueba de los datos es una fuga en el futuro, donde se están tomando ventaja de los datos de los que no han visto todavía. Este es un tema importante en el mundo real, donde algunas variables pueden no existir hasta después del hecho (dicen que después de una investigación se lleva a cabo) o puede ser actualizada a una fecha posterior.

Por lo que son meta-juego aquí: lo que hicieron es legítima dentro de las reglas de la competencia, porque a ellos se les de acceso a algunos de los datos de prueba. Pero no es legítimo en el mundo real, donde la verdadera prueba es lo bien que funciona en el futuro, en los nuevos datos.

3voto

No es burda de conexión (según la definición). Información sobre el objetivo de la prueba de conjunto se conserva. Semi-supervisado permiten generar un extra sintético conjunto de datos para entrenar el modelo. En el método descrito, original de los datos de entrenamiento se mezcla sin ponderar sintético con una relación de 4:3. Por lo tanto, si la calidad de los datos sintéticos es pobre, el enfoque resultaría desastroso. Supongo que para cualquier problema en el que las predicciones son inciertos, el sintético conjunto de datos sería de escasa precisión. Si la estructura es muy compleja y el sistema tiene bajo nivel de ruido, que puede ayudar a generar datos sintéticos, supongo. Creo aprendizaje semi-supervisado es bastante grande dentro de aprendizaje profundo (no es mi experiencia), donde la función de la representación que se va a aprender también.

He tratado de reproducir el aumento de la precisión con la semi.entrenamiento supervisado en varios conjuntos de datos con tanto de rf y xgboost sin ningún resultado positivo. [Siéntase libre de modificar mi código.] Noto la mejora de la precisión de uso semi-supervisado es bastante modesta en el kaggle informe, tal vez al azar?

rm(list=ls())
#define a data structure
fy2 = function(nobs=2000,nclass=9) sample(1:nclass-1,nobs,replace=T)
fX2 = function(y,noise=.05,twist=8,min.width=.7) {
  x1 = runif(length(y)) * twist
  helixStart = seq(0,2*pi,le=length(unique(y))+1)[-1]
  x2 = sin(helixStart[y+1]+x1)*(abs(x1)+min.width) + rnorm(length(y))*noise
  x3 = cos(helixStart[y+1]+x1)*(abs(x1)+min.width) + rnorm(length(y))*noise
  cbind(x1,x2,x3)
}

#define a wrapper to predict n-1 folds of test set and retrain and predict last fold  
smartTrainPred = function(model,trainX,trainy,testX,nfold=4,...) {
  obj = model(trainX,trainy,...)
  folds = split(sample(1:dim(trainX)[1]),1:nfold)
  predDF = do.call(rbind,lapply(folds, function(fold) {
    bigX      = rbind(trainX ,testX[-fold,])
    bigy      = c(trainy,predict(obj,testX[-fold,]))
    if(is.factor(trainy)) bigy=factor(bigy-1)
    bigModel  = model(bigX,bigy,...)
    predFold  = predict(bigModel,testX[fold,])
    data.frame(sampleID=fold, pred=predFold)
  }))
  smartPreds = predDF[sort(predDF$sampleID,ind=T)$ix,2]
}

library(xgboost)
library(randomForest)

#complex but perfect separatable
trainy = fy2(); trainX = fX2(trainy)
testy  = fy2();  testX = fX2(testy )
pairs(trainX,col=trainy+1)

enter image description here

#try with randomForest
rf = randomForest(trainX,factor(trainy))
normPred = predict(rf,testX)
cat("\n supervised rf", mean(testy!=normPred))
smartPred = smartTrainPred(randomForest,trainX,factor(trainy),testX,nfold=4)
cat("\n semi-supervised rf",mean(testy!=smartPred))

#try with xgboost
xgb = xgboost(trainX,trainy,
              nrounds=35,verbose=F,objective="multi:softmax",num_class=9)
normPred = predict(xgb,testX)
cat("\n supervised xgboost",mean(testy!=normPred))

smartPred = smartTrainPred(xgboost,trainX,trainy,testX,nfold=4,
                           nrounds=35,verbose=F,objective="multi:softmax",num_class=9)
cat("\n semi-supervised xgboost",mean(testy!=smartPred))



printing prediction error:
 supervised rf 0.007
 semi-supervised rf 0.0085
 supervised xgboost 0.046
 semi-supervised xgboost 0.049

2voto

MartyTPS Puntos 186

No, no es el sobreajuste.

Creo que su preocupación aquí es que el modelo es byhearting los datos en lugar de crearlo. Que depende de la complejidad del modelo (que sigue siendo el mismo) y el tamaño de los datos. Esto ocurre cuando el modelo es demasiado complejo y/o cuando los datos de entrenamiento es demasiado pequeño, ni de que es el caso aquí. El hecho de que el error de la prueba (de la cruz-error de validación) es mínimo después de que el aprendizaje semi-supervisado debe implicar que no es la más equipada.

Sobre el por qué de este enfoque es aún trabajando
El enfoque utilizado aquí no está fuera del mundo, he visto a mucha gente hacer esto en muchos de aprendizaje de la máquina competiciones (lo Siento, he intentado, pero no puede recordar donde lo he visto).
Cuando usted puede predecir que una parte de los datos de prueba y que lo incluya en la formación, el modelo estará expuesto a nuevas características. En este caso, los datos de prueba es tan grande como los datos de entrenamiento, no es de extrañar que están ganando tanto por el aprendizaje semi-supervisado.

Espero que esto explica
Gracias

1voto

Phil Puntos 1

Por esta definición: "el Sobreajuste se produce cuando un modelo estadístico que describe el error aleatorio o ruido en lugar de la relación subyacente."(wikipedia), la solución no es el sobreajuste.

Pero en esta situación: - Los datos de prueba es una secuencia de elementos y no un conjunto fijo de elementos O - Proceso de predicción no debe contener fase de aprendizaje (por ejemplo debido a problemas de rendimiento) el mencionado solución es el sobreajuste. Debido a que la exactitud de modelado es más que real de las situaciones.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X