Cómo elegir entre algoritmos de aprendizaje

21

Necesito implementar un programa que clasifique los registros en 2 categorías (verdadero / falso) en función de algunos datos de entrenamiento, y me preguntaba qué algoritmo / metodología debería considerar. Parece que hay muchos para elegir: red neuronal artificial, algoritmo genético, aprendizaje automático, optimización bayesiana, etc., etc., y no estaba seguro de por dónde empezar. Entonces, mi pregunta es: ¿Cómo debo elegir un algoritmo de aprendizaje que debería usar para mi problema?

Si esto ayuda, aquí está el problema que necesito resolver.


Los datos de entrenamiento:
Los datos de entrenamiento consisten en muchas filas como esta:

Precursor1, Precursor2, Boolean (true/false)

La carrera
me dará un montón de precursores.
Luego,

  1. Elijo un algoritmo A de diferentes algoritmos (o genero dinámicamente un algoritmo), y lo aplico en todas las combinaciones posibles de estos precursores y recopilo los "registros" que se emiten. El "registro" consta de varios pares clave-valor *.
  2. Aplico un algoritmo increíble y clasifico estos registros en 2 categorías (verdadero / falso).

  3. Generaré una tabla que tenga el mismo formato que los datos del tren:
    Precursor1, Precursor2, Boolean

Y todo el programa se califica en función de cuántos verdadero / falso acerté.

*: "Grabar" se verá así (espero que esto tenga sentido)

Record         [1...*] Score
-Precursor1             -Key
-Precursor2             -Value

Solo hay un número finito de claves posibles. Los registros contienen diferentes subconjuntos de estas claves (algunos registros tienen clave1, clave2, clave3 ... otros registros tienen clave3, clave4 ... etc.).

Realmente necesito 2 aprendizajes. Uno es para el paso 1. Necesito tener un módulo que observe los pares de precursores, etc. y decida qué algoritmo aplicar para emitir un registro para la comparación. Otro es para el paso 2. Necesito un módulo que analice la colección de registros y los clasifique en las 2 categorías (verdadero / falso).

¡Gracias de antemano!

Enno Shioji
fuente

Respuestas:

16

Hay un paquete para " R " llamado " caret ", que significa "prueba de clasificación y regresión". Creo que sería un buen lugar para comenzar, ya que le permitirá aplicar fácilmente una docena de algoritmos de aprendizaje diferentes a sus datos y luego validarlos de forma cruzada para estimar la precisión de cada uno.

Aquí hay un ejemplo que puede modificar con sus propios datos / otros métodos:

install.packages('caret',dependencies = c('Depends','Suggests'))
library(caret)

set.seed(999)
Precursor1 <- runif(25)
Precursor2 <- runif(25)
Target <- sample(c('T','F'),25,replace=TRUE)
MyData <- data.frame(Precursor1,Precursor2,Target)
str(MyData)

#Try Logistic regression
model_Logistic <- train(Target~Precursor1+Precursor2,data=MyData,method='glm')

#Try Neural Network
model_NN <- train(Target~Precursor1+Precursor2,data=MyData,method='nnet',trace=FALSE)

#Try Naive Bayes
model_NB <- train(Target~Precursor1+Precursor2,data=MyData,method='nb')

#Try Random Forest
model_RF <- train(Target~Precursor1+Precursor2,data=MyData,method='rf')

#Try Support Vector Machine
model_SVM<- train(Target~Precursor1+Precursor2,data=MyData,method='svmLinear')

#Try Nearest Neighbors
model_KNN<- train(Target~Precursor1+Precursor2,data=MyData,method='knn')

#Compare the accuracy of each model
cat('Logistic:',max(model_Logistic$results$Accuracy))
cat('Neural:',max(model_NN$results$Accuracy))
cat('Bayes:',max(model_NB$results$Accuracy))
cat('Random Forest:',max(model_RF$results$Accuracy))
cat('Support Vector Machine:',max(model_SVM$results$Accuracy))
cat('Nearest Neighbors:',max(model_KNN$results$Accuracy))

#Look at other available methods
?train

Otra idea sería dividir sus datos en un conjunto de entrenamiento y un conjunto de prueba, y luego comparar cómo funciona cada modelo en el conjunto de prueba. Si lo desea, puedo mostrarle cómo hacerlo.

Zach
fuente
8

Para empezar, usaría la teoría de la probabilidad y luego elegiría el algoritmo que mejor calcule qué teoría de la probabilidad le dice que haga. Por lo que tienen una formación de datos , y algunos nuevos precursores , y un objeto de clasificar , así como su información antes .TXYyo

Por lo que desea saber sobre . Entonces la teoría de la probabilidad dice, solo calcule su probabilidad, condicional a toda la información que tenga disponible.Y

PAGS(YEl |T,X,yo)

Ahora podemos usar cualquiera de las reglas de la teoría de la probabilidad para manipular esto en cosas que sí sabemos calcular. Entonces, usando el teorema de Bayes, obtienes:

PAGS(YEl |T,X,yo)=PAGS(YEl |T,yo)PAGS(XEl |Y,T,yo)PAGS(XEl |T,yo)

Ahora es generalmente fácil, a menos que su información previa pueda decirle algo sobre más allá de los datos de entrenamiento (por ejemplo, correlaciones), entonces está dado por la regla de sucesión, o básicamente la fracción observada de veces fue cierto en el conjunto de datos de entrenamiento.PAGS(YEl |T,yo)YY

Para el segundo término : este es su modelo, y hacia dónde irá la mayor parte de su trabajo, y dónde diferentes algoritmos harán diferentes cosas. es un poco una bestia cruel para calcular, por lo que hacemos el siguiente truco para evitar tener que hacer esto: tomar las probabilidades de contra (es decir, no ). Y obtenemos:PAGS(XEl |Y,T,yo)PAGS(XEl |T,yo)YY¯Y

O(YEl |T,X,yo)=PAGS(YEl |T,X,yo)PAGS(Y¯El |T,X,yo)=PAGS(YEl |T,yo)PAGS(Y¯El |T,yo)PAGS(XEl |Y,T,yo)PAGS(XEl |Y¯,T,yo)

Ahora, básicamente, necesita una regla de decisión: cuando la probabilidad / probabilidad está por encima de cierto umbral, clasificará como "verdadero", de lo contrario lo clasificará como "falso". Ahora nadie puede realmente ayudarlo con esto: es una decisión que depende de las consecuencias de tomar decisiones correctas e incorrectas. Este es un ejercicio subjetivo, y solo el contexto adecuado puede responderlo. Por supuesto, la "subjetividad" solo importará si existe una alta incertidumbre (es decir, si tiene un modelo / datos "basura" que no pueden distinguir los dos muy bien).Y

La segunda cantidad: el modelo es un modelo "predictivo". Suponga que la información previa indica un modelo único que depende del parámetro . Entonces la cantidad viene dada por:PAGS(XEl |Y,T,yo)θY

PAGS(XEl |Y,T,yo)=PAGS(X,θYEl |Y,T,yo)reθ=PAGS(XEl |θY,Y,T,yo)PAGS(θYEl |Y,T,yo)reθY

Ahora, si su modelo es de la variedad "iid", entonces . Pero si tiene un modelo dependiente, como uno autorregresivo, entonces aún puede ser importante. Y es la distribución posterior de los parámetros en el modelo; esta es la parte que determinarían los datos de entrenamiento. Y aquí es probablemente donde irá la mayor parte del trabajo.PAGS(XEl |θY,Y,T,yo)=PAGS(XEl |θY,Y,yo)TPAGS(θYEl |Y,T,yo)

Pero, ¿qué pasa si el modelo no se conoce con certeza? bueno, se convierte en otro parámetro molesto para integrar, tal como se hizo para . Llame al i-ésimo modelo y su conjunto de parámetros , y la ecuación se convierte en:θYMETROyoθY(yo)

PAGS(XEl |Y,T,yo)=yoPAGS(METROyoEl |Y,T,yo)PAGS(XEl |θY(yo),METROyo,Y,T,yo)PAGS(θY(yo)El |METROyo,Y,T,yo)reθY(yo)
Donde
PAGS(METROyoEl |Y,T,yo)=PAGS(METROyoEl |Y,yo)PAGS(θY(yo)El |METROyo,Y,yo)PAGS(TEl |θY(yo),METROyo,Y,yo)reθY(yo)

(NOTA: es una proposición de la forma "el modelo i-ésimo es el mejor en el conjunto que se está considerando". Y no se permiten previos impropios si se está integrando sobre modelos: los infinitos no se cancelan en este caso, y usted quedará sin sentido)METROyo

Ahora, hasta este punto, todos los resultados son exactos y óptimos (esta es la opción 2: aplicar un algoritmo increíble a los datos). Pero esta es una tarea desalentadora para emprender. En el mundo real, las matemáticas requeridas pueden no ser factibles en la práctica, por lo que tendrá que comprometerse. siempre debe "intentar" hacer las ecuaciones exactas, ya que cualquier matemática que pueda simplificar le ahorrará tiempo en la PC. Sin embargo, este primer paso es importante porque establece "el objetivo" y deja en claro lo que se debe hacer. De lo contrario, queda (como parece) con una gran cantidad de opciones potenciales sin nada que elegir entre ellas.

Ahora en esta etapa, todavía estamos en el mundo de la "lógica simbólica", donde nada tiene realmente sentido. Por lo tanto, debe vincularlos a su problema específico:

  1. PAGS(METROyoEl |Y,yo) es la probabilidad previa para el i-ésimo modelo; generalmente será igual para todo i.
  2. PAGS(θY(yo)El |METROyo,Y,yo) es el previo para los parámetros en el i-ésimo modelo (¡debe ser apropiado!)
  3. PAGS(TEl |θY(yo),METROyo,Y,yo) es la función de probabilidad para los datos de entrenamiento, dado el i-ésimo modelo
  4. PAGS(θY(yo)El |T,METROyo,Y,yo) es la parte posterior de los parámetros en el modelo i-ésimo, condicional a los datos de entrenamiento.
  5. PAGS(METROyoEl |Y,T,yo) es la posterior para el i-ésimo modelo condicional en los datos de entrenamiento

Habrá otro conjunto de ecuaciones paraY¯

Tenga en cuenta que las ecuaciones se simplificarán enormemente si a) un modelo es un claro ganador, de modo que yb) dentro de este modelo, sus parámetros son muy precisos, por lo que integrand se asemeja a una función delta (y la integración está muy cerca de las estimaciones de sustitución o plug-in). Si se cumplen estas dos condiciones, tiene:PAGS(METROjEl |Y,T,yo)1

PAGS(XEl |Y,T,yo)PAGS(XEl |θY(j),METROj,Y,T,yo)θY(j)=θ^Y(j)

¿Cuál es el enfoque "estándar" para este tipo de problema?

probabilidadislogica
fuente