22 votos

Cómo elegir entre los algoritmos de aprendizaje

Necesito implementar un programa que va a clasificar los registros en 2 categorías (true/false), se basa en algunos datos de entrenamiento, y me preguntaba en que el algoritmo de la metodología que debo estar mirando. Parece ser que hay un montón de ellos para elegir, Red Neuronal Artificial, algoritmos Genéticos, Aprendizaje de Máquina, Bayesiano de Optimización, etc. etc., y yo no estaba seguro de por dónde empezar. Por lo tanto, mi pregunta es: ¿Cómo debo elegir un algoritmo de aprendizaje que debo usar para mi problema?

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


Los datos de entrenamiento:
Los datos de entrenamiento se compone de muchas filas como esta:

Precursor1, Precursor2, Boolean (true/false)

La carrera
Me dará un montón de precursores.
A continuación,

  1. Puedo elegir un algoritmo de diferentes algoritmos (o generar dinámicamente un algoritmo), y se aplican en todas las combinaciones posibles de estos precursores y recoger el "expediente"s que se emiten. El "registro" se compone de varios pares clave-valor*.
  2. Voy a aplicar algunas impresionante algoritmo y clasificar estos registros en 2 categorías (verdadero/falso).

  3. Voy a generar una tabla que tiene el mismo formato que el tren de datos:
    Precursor1, Precursor2, Boolean

Y todo el programa se basa en cómo muchos de verdadero/falso tengo derecho.

*"Registro"s se parezca a esto (espero que esto tenga sentido)

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

Hay sólo un número finito de posibles Claves. Los registros contienen diferentes subconjunto de estas teclas (algunos registros han key1, key2, key3... otros registros han key3, key4, etc...).

Yo en realidad necesitan de 2 de aprendizaje. Uno es el paso 1. Necesito tener un módulo que se ve en el Precursor de pares, etc. y decidir qué algoritmo a aplicar con el fin de emitir un registro para la comparación. Otro es el paso 2. Necesito un módulo que analiza la colección de registros y clasificar en 2 categorías (verdadero/falso).

Gracias de antemano!

16voto

Boris Tsirelson Puntos 191

Hay un paquete para "R" llamado "símbolo de intercalación", que significa "clasificación y pruebas de regresión." Creo que sería un buen lugar para empezar, como fácilmente se permiten aplicar una docena de diferentes algoritmos de aprendizaje para sus datos y, a continuación, validación cruzada de ellos para estimar cómo exacta de cada uno de ellos.

Aquí es un ejemplo de que se 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 romper sus datos en un conjunto de entrenamiento y un conjunto de prueba y, a continuación, comparar cómo cada modelo se realiza sobre el conjunto de prueba. Si te gusta, puedo mostrarle cómo hacerlo.

8voto

patfla Puntos 1

Me gustaría utilizar la teoría de la probabilidad para empezar y, a continuación, elija el mejor algoritmo calcula lo que la teoría de la probabilidad dice que hacer. Así que usted tiene los datos de entrenamiento $T$, y algunos de los nuevos precursores $X$, y un objeto a clasificar a $Y$, así como su información previa,$I$.

Así que usted quiere saber acerca de la $Y$. A continuación, la teoría de la probabilidad dice, simplemente calcular su probabilidad, condicionada a toda la información que tiene disponible para usted.

$$P(Y|T,X,I)$$

Ahora podemos utilizar cualquiera de las reglas de la teoría de la probabilidad para manipular esta en las cosas que sí sabemos cómo calcular. Así que, usando el teorema de Bayes, se obtiene:

$$P(Y|T,X,I)=\frac{P(Y|T,I)P(X|Y,T,I)}{P(X|T,I)}$$

Ahora $P(Y|T,I)$ es generalmente fácil - a menos que la información previa puede decir algo acerca de las $Y$ más allá de los datos de entrenamiento (por ejemplo, correlaciones), entonces está dada por la regla de la sucesión - o, básicamente, la observó fracción de las veces $Y$ era cierto en el conjunto de datos de entrenamiento.

Para el segundo plazo $P(X|Y,T,I)$ - este es su modelo, y donde la mayoría de su trabajo, y donde los diferentes algoritmos se hacen cosas diferentes. $P(X|T,I)$ es un poco de una vil bestia para calcular, así que hacer el siguiente truco para evitar tener que hacer esto: tomar las probabilidades de $Y$ contra $\overline{Y}$ (es decir, no $Y$). Y obtenemos:

$$O(Y|T,X,I)=\frac{P(Y|T,X,I)}{P(\overline{Y}|T,X,I)}=\frac{P(Y|T,I)}{P(\overline{Y}|T,I)}\frac{P(X|Y,T,I)}{P(X|\overline{Y},T,I)}$$

Ahora, básicamente, necesitamos una regla de decisión - cuando las probabilidades/probabilidad está por encima de un cierto umbral, se clasificará $Y$ como "verdadero", de lo contrario se clasifican como "falso". Ahora nadie puede realmente ayudar con esto - es una decisión que depende de las consecuencias de derecho y las decisiones equivocadas. Este es un ejercicio subjetivo, y sólo el contexto puede responder a esto. Por supuesto, la "subjetividad" sólo importa si hay un alto nivel de incertidumbre (es decir, usted tiene una "mierda" del modelo de datos que no se pueden distinguir los dos muy bien).

La segunda cantidad - el modelo de $P(X|Y,T,I)$ es un modelo "predictivo". Supongamos que la información anterior indica un único modelo que depende del parámetro $\theta_{Y}$. A continuación, la cantidad está dada por:

$$P(X|Y,T,I)=\int P(X,\theta_{Y}|Y,T,I) d\theta = \int P(X|\theta_{Y},Y,T,I)P(\theta_{Y}|Y,T,I) d\theta_{Y}$$

Ahora, si tu modelo es el de la "iid" variedad, a continuación,$P(X|\theta_{Y},Y,T,I)=P(X|\theta_{Y},Y,I)$. Pero si usted tiene un modelo dependiente, como un proceso autorregresivo uno, a continuación, $T$ puede todavía importa. Y $P(\theta_{Y}|Y,T,I)$ es la distribución posterior de los parámetros en el modelo - esta es la parte que los datos de entrenamiento podría determinar. Y este es, probablemente, donde la mayoría de los trabajos se vaya.

Pero ¿y si el modelo es que no se sabe con certeza? así se convierte en otra molestia parámetro para integrar a cabo, tal como se hizo para $\theta_{Y}$. Llame a la i-ésima modelo de $M_i$ y su conjunto de parámetros $\theta^{(i)}_{Y}$, y la ecuación se convierte en:

$$P(X|Y,T,I)= \sum_{i}P(M_{i}|Y,T,I)\int P(X|\theta_{Y}^{(i)},M_{i},Y,T,I)P(\theta_{Y}^{(i)}|M_{i},Y,T,I) d\theta_{Y}^{(i)}$$ Donde $$P(M_{i}|Y,T,I)=P(M_{i}|Y,I)\int P(\theta_{Y}^{(i)}|M_{i},Y,I)P(T|\theta_{Y}^{(i)},M_{i},Y,I) d\theta_{Y}^{(i)}$$

(NOTA: $M_i$ es una proposición de la forma "de la i-ésima modelo es el mejor en el conjunto que está siendo considerado". y no inadecuado de los priores permitido si se están integrando con respecto a los modelos - la infinitos no cancela en este caso, y usted se queda con el no-sentido)

Ahora, hasta este punto, todos los resultados son exactos y óptimo (esta es la opción 2 - aplicar impresionante el algoritmo a los datos). Pero esta tarea de enormes proporciones para emprender. En el mundo real, el mundo de las matemáticas puede ser no factible en la práctica - así que usted tendrá que comprometer. siempre debe "ir" haciendo exactamente ecuaciones, para cualquier matemática de la que se puede simplificar va a ahorrar tiempo en la PC. Sin embargo, este primer paso es importante, ya que esta establece que "el destino", y deja en claro lo que se debe hacer. De lo contrario, usted está a la izquierda (como parece ser), con un montón de opciones potenciales con nada para elegir entre ellos.

Ahora en esta etapa, todavía estamos en la "lógica simbólica" del mundo, donde nada tiene sentido. Así que es necesario vincular estas a su problema específico:

  1. $P(M_{i}|Y,I)$ es la probabilidad anterior por la i-ésima modelo - generalmente será igual para todos los que me.
  2. $P(\theta_{Y}^{(i)}|M_{i},Y,I)$ es el previo de los parámetros en la i-ésima modelo (debe ser la correcta!)
  3. $P(T|\theta_{Y}^{(i)},M_{i},Y,I)$ es la función de probabilidad para los datos de entrenamiento, dado el modelo de ith
  4. $P(\theta_{Y}^{(i)}|T,M_{i},Y,I)$ es la parte posterior de los parámetros en la i-ésima modelo, condicional en los datos de entrenamiento.
  5. $P(M_{i}|Y,T,I)$ es la parte posterior de la i-ésima modelo condicional en los datos de entrenamiento

Habrá otro conjunto de ecuaciones para $\overline{Y}$

Tenga en cuenta que las ecuaciones se simplifican enormemente, si a) un modelo es un claro ganador, por lo que el $P(M_{j}|Y,T,I)\approx 1$ y b) dentro de este modelo, sus parámetros son muy precisos, por lo que el integrando se asemeja a una función delta (y la integración está muy cerca de la sustitución o complemento de las estimaciones). Si estas dos condiciones son cumplidas, se tiene:

$$P(X|Y,T,I)\approx P(X|\theta_{Y}^{(j)},M_{j},Y,T,I)_{\theta_{Y}^{(j)}=\hat{\theta}_{Y}^{(j)}}$$

Que es el "estándar" para este tipo de problema.

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