2010-03-10 8 views
12

Encuentro esta pregunta un poco complicada. Tal vez alguien conoce un enfoque para responder a esta pregunta. Imagine que tiene un conjunto de datos (datos de entrenamiento) de los que no sabe de qué se trata. ¿Qué características de los datos de entrenamiento consideraría para inferir el algoritmo de clasificación para clasificar estos datos? ¿Podemos decir algo si debemos usar un algoritmo de clasificación lineal o no lineal?Elija el algoritmo de clasificación correcto. Lineal o no lineal?

Por cierto, estoy usando WEKA para analizar los datos.

¿Alguna sugerencia? Gracias.

+3

[a quien haya comenzado a cerrar esta publicación]: Esta _es_ programación relacionada! – mjv

+0

@mjv: ¿Qué quieres decir? –

+0

Sin preocupaciones; Los usuarios con mayor reputación pueden ver el recuento de votos para cerrar la pregunta, y anoté un voto, con la razón "NPR" (No relacionado con el programa). Mi comentario fue en apoyo de la pregunta, indicando que aunque suena algo teórico y matemático, esta pregunta fue muy relevante para la programación. La pregunta parece segura, no ha habido otros votos para el cierre (se requieren 5). – mjv

Respuesta

15

Wow, por lo que tiene algunos datos de entrenamiento y no sabe si está mirando las funciones que representan palabras en un documento, o genese en una celda y necesita ajustar un clasificador. Bueno, ya que no tiene ninguna información semántica, tendrá que hacer esto solo mirando las propiedades estadísticas de los conjuntos de datos.

Primero, para formular el problema, esto es más que lineal versus no lineal. Si realmente está buscando clasificar estos datos, lo que realmente necesita hacer es seleccionar una función del núcleo para el clasificador que puede ser lineal o no lineal (gaussiana, polinómica, hiperbólica, etc. Además, cada función del núcleo puede tomar uno o más parámetros que tendrían que establecerse. Determinar una función óptima del kernel y un conjunto de parámetros para un problema de clasificación dado no es realmente un problema resuelto, solo hay heurísticas útiles y si googleas 'seleccionando una función kernel' o 'elegir kernel' función ', se le tratará con muchos artículos de investigación que proponen y prueban varios enfoques. Si bien hay muchos enfoques, uno de los más básicos y bien recorridos es hacer un descenso de gradiente en los parámetros, básicamente se prueba un método de kernel y un juego de parámetros, entrena en la mitad de tus puntos de datos y observa cómo lo haces. Luego, prueba con un conjunto diferente de parámetros y observa cómo lo haces. Mueves los parámetros en la dirección de mejoría de precisión hasta que obtienes satisfacción resultados de tory.

Si no necesita pasar por toda esta complejidad para encontrar una buena función de núcleo, y simplemente quiere una respuesta lineal o no lineal. entonces la pregunta se reduce principalmente a dos cosas: Los clasificadores no lineales tendrán un mayor riesgo de sobreajuste (generalización insuficiente) ya que tienen más dimensiones de libertad. Pueden sufrir del clasificador simplemente memorizando conjuntos de buenos puntos de datos, en lugar de tener una buena generalización. Por otro lado, un clasificador lineal tiene menos libertad para ajustarse, y en el caso de datos que no son separables linealmente, no podrá encontrar una buena función de decisión y sufrirá altas tasas de error.

Desafortunadamente, no conozco una mejor solución matemática para responder a la pregunta "¿Es esta información linealmente separable?", Aparte de probar el clasificador y ver cómo funciona. Para eso, vas a necesitar una respuesta más inteligente que la mía.

Editar: Este artículo de investigación describe un algoritmo que parece que debería ser capaz de determinar qué tan cerca de un conjunto de datos dado se puede separar de forma lineal.

http://www2.ift.ulaval.ca/~mmarchand/publications/wcnn93aa.pdf

+0

Gracias bdk. Desafortunadamente, solo tengo las variables de valor real y sus clases (como x, y) lo que hace que sea imposible hacer una conclusión significativa sobre los datos. Como dijiste, lo único que puedo hacer es mirar las propiedades estadísticas de los datos. Voy a echar un vistazo al periódico. Gracias... –

15

Esta es, de hecho, dos preguntas en una ;-)

  • La selección de características
  • lineal o no

complemento "algoritmo de selección", y se probablemente tenga tres preguntas fundamentales del diseño del clasificador.

Como nota aparte, es bueno que no tenga ningún conocimiento de dominio que le hubiera permitido guiar la selección de características y/o afirmar la linealidad del espacio de características. Esa es la diversión de la minería de datos: inferir tal información sin una experiencia previa. (Por cierto, y aunque la experiencia en el dominio es buena para verificar el resultado del clasificador, una visión demasiado a priori puede hacerle perder buenas oportunidades de minería). Sin ese conocimiento a priori, se ve obligado a establecer metodologías sólidas y aplicar un escrutinio cuidadoso a los resultados.

Es difícil proporcionar orientación específica, en parte debido a que se han omitido muchos detalles en la pregunta, y también porque estoy algo de BS-ing paso a través de esto ;-). Nunca lo menos espero que el siguiente consejo genérico será útil

  • Para cada algoritmo intenta (o más precisamente, para cada conjunto de parámetros para un determinado algoritmo), tendrá que ejecutar muchas pruebas . La teoría puede ser muy útil, pero seguirá habiendo un montón de "prueba y error". Encontrará Cross-Validation una técnica valiosa.
    En pocas palabras, [y dependiendo del tamaño de los datos de entrenamiento disponibles], divide aleatoriamente los datos de entrenamiento en varias partes y entrena el clasificador en una [o varias] de estas partes, y luego evalúa el clasificador en su rendimiento en otra [o varias] partes. Para cada ejecución se miden varios indicadores de rendimiento, como error de clasificación errónea (MCE) y, además de indicarle cómo funciona el clasificador, estas métricas, o más bien su variabilidad, proporcionarán pistas sobre la relevancia de las características seleccionadas y/o su falta de escala o linealidad.

  • Independientemente de la suposición de la linealidad, es útil normalizar los valores de de numéricos características. Esto ayuda con las funciones que tienen un rango impar, etc.
    Dentro de cada dimensión, establezca el rango dentro de, digamos, 2.5 desviaciones estándar a cada lado de la mediana, y convierta los valores de las características a un porcentaje sobre la base de este rango.

  • Convierta los atributos nominales a los binarios, creando tantas dimensiones hay valores distintos del atributo nominal. (Creo que muchos optimizadores de algoritmo harán esto por usted)

  • Una vez que haya identificado uno o unos clasificadores con un rendimiento relativamente decente (digamos 33% MCE), realice la misma serie de prueba, con dicho clasificador modificando solo un parámetro a la vez. Por ejemplo, elimine algunas características y vea si el clasificador de dimensionalidad inferior resultante mejora o se degrada.

  • El factor de pérdida es un parámetro muy sensible. Intente mantener un valor "razonable" pero posiblemente no óptimo para la mayoría de las pruebas, ajuste la pérdida al final.

  • Aprenda a explotar la información de "descarga" proporcionada por los optimizadores SVM. Estos resultados proporcionan información muy valiosa sobre lo que el optimizador "piensa"

  • recordar que lo que funcionó muy bien facturan con un determinado conjunto de datos en un dominio determinado puede realizar muy mal con los datos de otro dominio ...

  • el café es bueno, no demasiado.Cuando todo falla, hágalo irlandés ;-)

Cuestiones relacionadas