performance - software - que hace un programador
¿Qué estadísticas debería saber un programador(o científico informático)? (17)
Soy un programador con una formación decente en matemáticas e informática. Estudié computabilidad, teoría de grafos, álgebra lineal, álgebra abstracta, algoritmos y un poco de probabilidad y estadística (a través de algunas clases de CS) a nivel de pregrado.
Siento, sin embargo, que no sé lo suficiente sobre estadísticas. Las estadísticas son cada vez más útiles en computación, con procesamiento estadístico del lenguaje natural que ayuda a alimentar algunos de los algoritmos de Google para búsqueda y traducción automática, con análisis de rendimiento de hardware, software y redes que necesitan una base estadística adecuada para ser creíbles y con campos como la bioinformática. más frecuente todos los días.
He leído acerca de cómo "Google usa el filtrado bayesiano de la forma en que Microsoft usa la declaración if" , y conozco el poder de enfoques estadísticos incluso simples e ingenuos de los problemas del Plan A para Spam y Better Bayesian Filtering de Paul Graham, pero yo me gusta ir más allá de eso.
Intenté estudiar más estadísticas, pero me perdí un poco. El artículo de Wikipedia tiene una larga lista de temas relacionados, pero no estoy seguro de cuál debería ver. Siento que por lo que he visto, muchas estadísticas hacen la suposición de que todo es una combinación de factores que se combinan linealmente, más algún ruido aleatorio en una distribución Gaussiana; Me pregunto qué debería aprender más allá de la regresión lineal, o si debería pasar el tiempo para comprenderlo realmente antes de pasar a otras técnicas. He encontrado algunas listas largas de libros para mirar; ¿donde debería empezar?
Así que me pregunto a dónde ir desde aquí; qué aprender y dónde aprenderlo En particular, me gustaría saber:
- ¿Qué tipo de problemas en programación, ingeniería de software e informática son adecuados para los métodos estadísticos? ¿Dónde voy a obtener los mejores pagos?
- ¿Qué tipo de métodos estadísticos debería emplear para aprender?
- ¿Qué recursos debería usar para aprender esto? Libros, documentos, sitios web. Apreciaría una discusión sobre de qué se trata cada libro (u otro recurso) y por qué es relevante.
Para aclarar lo que estoy buscando, me interesan los problemas que suelen enfrentar los programadores para poder beneficiarse de un enfoque estadístico y qué tipo de herramientas estadísticas pueden ser útiles. Por ejemplo:
- Los programadores a menudo necesitan tratar con grandes bases de datos de texto en lenguajes naturales, y ayudar a categorizar, clasificar, buscar y procesar de otra manera. ¿Qué técnicas estadísticas son útiles aquí?
- En términos más generales, la inteligencia artificial se ha estado alejando de los enfoques discretos y simbólicos y hacia las técnicas estadísticas. ¿Qué enfoques estadísticos de AI tienen más que ofrecer ahora al programador que trabaja (a diferencia de la investigación en curso que puede o no proporcionar resultados concretos)?
- Con frecuencia, se les pide a los programadores que produzcan sistemas de alto rendimiento que escalen bien bajo carga. Pero no se puede hablar de rendimiento a menos que se pueda medir. ¿Qué tipo de diseño experimental y herramientas estadísticas necesita usar para poder decir con confianza que los resultados son significativos?
- La simulación de sistemas físicos, como en gráficos de computadora, con frecuencia implica un enfoque estocástico.
- ¿Hay otros problemas comúnmente encontrados por los programadores que se beneficiarían de un enfoque estadístico?
Aquí hay un excelente libro, disponible gratuitamente en la web: ''Los elementos del aprendizaje estadístico'' , de Hastie, Tsibshirani y Freidman.
Cubre una variedad de temas útiles y debería ser una buena introducción al campo de aprendizaje automático. Su explicación de los modelos sobreajustados es la mejor que he visto en ~ 20-30 libros de estadísticas que he leído.
Chico, algunas de estas respuestas son buenas. Provengo de los mismos antecedentes y tuve que ingresar en bioestadística en gran parte por libros y por ósmosis de mis colegas. Aquí están mis recomendaciones:
Comience con una sólida base de probabilidad, que incluya la probabilidad condicional, el teorema de Bayes, los modelos de Markov y algunas de las distribuciones estadísticas básicas.
Si no lo tienes, consigue algo de álgebra lineal, para que no te asustes con las matrices. Si te enfrentas al álgebra y al cálculo difíciles, ponte cómodo y trabaja a través de él. Vale la pena.
La teoría de las estadísticas se divide en dos campos, frecuentista y bayesiano. Frequentista es más viejo y sólido. Bayesian es más nuevo, más flexible y más emocionante. En particular, están las cosas emocionantes que se pueden hacer con Markov Chain Monte Carlo y técnicas relacionadas.
En mi área, los pharmacometrics, hay una gran recompensa en la capacidad de extraer resultados significativos a partir de datos escasos y costosos, por lo que una habilidad en estadística es muy importante.
Agregado: Aquí hay algunos libros favoritos (no una lista completa):
" Distribuciones estadísticas ", segunda edición, por Evans, Hastings y Peacock. Proporciona una lista muy completa de distribuciones, explica cómo se relacionan, cómo obtener muestras y estimarlas. Lo uso a diario.
" Matrices y Linear Algebra ", Schneider y Barker. Muy bueno y fácil de seguir.
" Bayesian Statistics: An Introduction ", 2da Edición, por Lee. Muy conciso y fácil de leer.
" Markov Chain Monte Carlo in Practice ", de Gilks, Richardson y Spiegelhalter. Me encantó este libro, y estos son los tipos que hacen WinBugs, un excelente paquete gratuito.
Diría las cosas en "Todas las estadísticas" (2004), de Larry Wasserman, justo aquí. También tiene la ventaja de que se le presenta la idea de cerrar la brecha entre las estadísticas y la informática.
Espera ayuda.
Es sorprendente que nadie haya mencionado el Método Bootstrap, el Análisis de componentes principales o el algoritmo LASSO. Cubren la reducción de datos, la simulación y el análisis de datos exploratorios, por nombrar algunos.
Espero que esté bien con el Sr. Shaw y todos los demás si la mayoría de los programadores de nosotros nunca necesitaran saber nada sobre estadísticas, o probabilidad, o mucha matemática.
Esa ha sido mi experiencia en los últimos 30 años, a pesar de las excelentes calificaciones en matemáticas.
Entonces, tal vez el título de esta pregunta debería ser: "¿Qué estadísticas debería saber un programador si necesita saber estadísticas?"
Gran pregunta! De hecho, creo que vale la pena dar un paso atrás por un minuto y llegar a una perspectiva más amplia. Por ejemplo, lo que me gustó de la diatriba de Zed fue casi el comienzo:
Cuestiono sus métricas e intentan respaldarlo con intentos cojos en razonamiento estadístico. Realmente no puedo culparlos, ya que probablemente se les dijo en la universidad que la lógica y la razón son superiores a la evidencia y la observación.
lo cual para mí enfatiza la necesidad de empirismo . Por supuesto, te escucho decir, lo sabías y es por eso que tu perfil. Bueno, sí, pero realmente hay más que eso. Zed vuelve a esto en la diatriba sobre los promedios, y creo que esto suena cierto: mostrar distribuciones, trazar los datos, observar el comportamiento de la cola.
Entonces, lo que trato de hacer es que la respuesta no está tanto en un solo libro, sino más bien en forma de pensar sobre los problemas , sobre ver el mundo como probabilístico .
Y también me parece que R ayuda mucho a pensar y programar con y sobre los datos.
Más probabilidad que estadísticas, pero Bayesian Probabilty puede ser muy útil (respalda los filtros de spam) y la OMI más software debería usarlo para inferir los hábitos de un usuario.
Head First Statistics es un excelente libro para aprender estadísticas (un matemático / estadístico me informa que no tiene muchos errores, sino algunas simplificaciones de lo teórico).
Casi me olvido de mencionar: Cómo mentir con estadísticas
Me sorprende que nadie haya mencionado una gran comprensión de los gráficos como esencial para una buena práctica estadística. El aprendizaje automático y el análisis Bayesiano son geniales (prueba el libro de Gelman si quieres una introducción formal pero accesible y aplicada a Bayes), pero puedes llegar a comprender increíblemente un problema con visualizaciones realmente buenas. El clásico de Tufte es un buen lugar para comenzar, y vale la pena leer la semiology y la gramática clásica de los libros gráficos . Finalmente, eche un vistazo al paquete R ggplot2 para una manera simple de comenzar a implementar ideas gráficas complejas.
Mi respuesta breve es esta: estadísticas variables latentes, que incluyen tanto el modelado de ecuaciones estructurales como el modelado de mezclas finitas (clase / perfil latente). Estos cubren una cantidad impresionante de modelos estadísticos.
No tengo mucho que agregar, pero sucede que acabo de empezar a leer este libro: DS Sivia con J. Skilling, '' Data Analysis-a Bayesian tutorial '', 2nd Edition, 2006, Oxford University Press .
Lo que me llamó la atención es el prefacio, donde el autor se refiere a una insatisfacción común con quienes se acercan al estudio de las estadísticas:
Prefacio
Como estudiante, siempre encontré el tema de las estadísticas bastante misterioso. Este tema no era completamente nuevo para mí, ya que nos habían enseñado un poco sobre la probabilidad antes en la escuela secundaria; por ejemplo, ya estaba familiarizado con las distribuciones binomial, Poisson y normal. La mayoría tenía sentido, pero solo parecía relacionarse con cosas como tirar dados, lanzar monedas, barajar cartas, etc. Sin embargo, teniendo aspiraciones de convertirme en científico, lo que realmente quería saber era cómo analizar los datos experimentales. Por lo tanto, ansiosamente esperaba las conferencias sobre estadísticas . Lamentablemente, fueron una gran decepción . Aunque muchas de las pruebas y procedimientos expuestos fueron intuitivamente razonables, había algo profundamente insatisfactorio en todo el asunto: ¡no parecía haber ningún principio básico subyacente! Por lo tanto, el curso sobre "probabilidad y estadística" había conducido a una desafortunada dicotomía: la probabilidad tenía sentido, pero era solo un juego; las estadísticas eran importantes, pero era una colección desconcertante de pruebas con poca rima o razón . Aunque no estoy contento con esta situación, decidí dejar de lado el tema y concentrarme en la ciencia real. Después de todo, la situación era solo un reflejo de mis propias deficiencias y tendría que trabajar en ello cuando llegara el momento de analizar realmente mis datos.
La historia anterior no es solo mía, sino que es la experiencia demasiado común de muchos científicos. Afortunadamente, no tiene por qué ser así . Lo que no nos dijeron en nuestras clases de pregrado es que hay un enfoque alternativo al tema completo del análisis de datos que usa solo la teoría de la probabilidad. En cierto sentido, hace que el tema de las estadísticas sea completamente superfluo. En otro, proporciona la justificación lógica para muchas de las pruebas y procedimientos estadísticos prevalecientes, haciendo explícitas las condiciones y aproximaciones asumidas implícitamente en su uso .
Este libro pretende ser una guía tutorial de este enfoque bayesiano alternativo, que incluye desarrollos modernos como la máxima entropía.
...
Espero que este libro mantenga sus promesas.
Hay un par de capítulos de la primera edición here , de un curso en Psicología Cognitiva / AI donde se adoptó este libro, y otros materiales del mismo curso here . Software relacionado por el segundo autor here . También una vista previa más extensa de Google Books here .
Puedes hacer bastante con la media y la desviación estándar.
Depende completamente de en qué problemas va a estar trabajando.
Qué gran hilo. Hay mucha información buena en la pregunta en sí y en las respuestas, pero estoy realmente sorprendido de que nadie haya mencionado el libro Programming Collective Intelligence todavía.
Es el mejor libro que conozco si eres un novato en esta materia (como yo) y quieres poner en práctica el aprendizaje automático y la teoría de las estadísticas.
Este libro explica:
- Técnicas colaborativas de filtrado que permiten a los minoristas en línea recomendar productos o medios
- Métodos de agrupamiento para detectar grupos de elementos similares en un gran conjunto de datos
- Características del motor de búsqueda: rastreadores, indexadores, motores de búsqueda y el algoritmo de PageRank
- Algoritmos de optimización que buscan millones de posibles soluciones a un problema y eligen el mejor
Filtrado Bayesiano, utilizado en filtros de spam para clasificar documentos basados en tipos de palabras y otras características
Usar árboles de decisión no solo para hacer predicciones, sino para modelar la forma en que se toman las decisiones
- Predecir valores numéricos en lugar de clasificaciones para construir modelos de precios
- Admite máquinas vectoriales para unir personas en sitios de citas en línea
- Factorización de matriz no negativa para encontrar las características independientes en adataset
- Inteligencia evolutiva para la resolución de problemas: cómo una computadora desarrolla sus habilidades mejorando su propio código cuanto más juega un juego
Aparte de eso, hay una gran charla sobre TED sobre por qué todos deberían aprender Estadísticas .
Solo como un punto, no como un crítico, pero su pregunta debe formularse de una manera diferente: "¿Qué estadísticas debería saber una persona?".
El hecho es que, lamentablemente, todos lidiamos con estadísticas. Es un hecho de la vida. Las encuestas, el pronóstico del tiempo, la efectividad de los medicamentos, los seguros y, por supuesto, algunas partes de la informática. Ser capaz de analizar críticamente los datos presentados da la línea entre escoger la comprensión correcta o ser estafado, sea lo que sea que eso signifique.
Dicho eso, creo que los siguientes puntos son importantes para entender
- media, mediana, desviación estándar de una muestra y la diferencia entre muestra y población (esto es muy importante)
- las distribuciones y por qué la distribución gaussiana es tan importante (el teorema del límite central)
- Qué significa con la prueba de Hipótesis nula.
- ¿Qué es la transformación de variables, correlación, regresión, análisis multivariable?
- ¿Qué son las estadísticas bayesianas?
- Métodos de trazado
Todos estos puntos son críticos no solo para usted como científico de la computación, sino también como ser humano. Te daré algunos ejemplos.
La evaluación de la hipótesis nula es crítica para probar la efectividad de un método. Por ejemplo, si un medicamento funciona, o si una solución para su hardware tiene un resultado concreto o simplemente es una cuestión de suerte. Digamos que quiere mejorar la velocidad de una máquina y cambiar el disco duro. ¿Importa este cambio? podría hacer un muestreo del rendimiento con el disco duro viejo y el nuevo y verificar las diferencias. Incluso si encuentra que el promedio con el nuevo disco es menor, eso no significa que el disco duro tenga un efecto en absoluto. Aquí entra en la prueba de hipótesis nula, y le dará un intervalo de confianza, no una respuesta definitiva, como: hay un 90% de probabilidad de que cambiar el disco duro tenga un efecto concreto en el rendimiento de su máquina.
La correlación es importante para saber si dos entidades "cambian por igual". Como la "correlación del mantra de Internet" no es causalidad ", se debe tomar con cuidado. El hecho de que dos variables aleatorias muestren correlación no significa que una cause la otra, ni que estén relacionadas por una tercera variable (que no está midiendo). Podrían simplemente comportarse de la misma manera. Busque piratas y el calentamiento global para entender el punto. Una correlación informa una posible señal, no informa un hallazgo.
Bayesiano Todos conocemos el filtro de spam. pero hay más. Supongamos que va a un chequeo médico y el resultado dice que tiene cáncer (en serio espero que no, pero es para ilustrar un punto). El hecho es que la mayoría de la gente en este momento pensaría "Tengo cáncer". Eso no es cierto. Una prueba positiva para el cáncer mueve su probabilidad de tener cáncer desde la línea de base para la población (digamos, 8 por cada mil personas tienen cáncer, escogido de un número de aire delgado) a un valor más alto, que no es del 100%. Qué tan alto es este número depende de la precisión de la prueba. Si la prueba es pésima, podría ser un falso positivo. Cuanto más preciso es el método, mayor es el sesgo, pero aún no es 100%. Por supuesto, si múltiples pruebas independientes confirman que tienes cáncer, entonces es muy probable que realmente lo tengas, pero aún así no es 100%. tal vez es 99.999%. Este es un punto que muchas personas no entienden acerca de las estadísticas bayesianas.
Métodos de trazado Esa es otra cosa que siempre se deja desatendida. El análisis de datos no significa nada si no se puede transmitir de manera efectiva lo que significan a través de una simple trama. Según la información que desee poner en foco o el tipo de datos que tenga, preferirá una gráfica xy, un histograma, una gráfica de violín o un gráfico circular.
Ahora, vamos a tus preguntas. Creo que me di demasiado en una nota rápida, pero como mi respuesta fue bastante votada, creo que es mejor si respondo correctamente a sus preguntas tanto como lo permita mi conocimiento (y aquí están las vacaciones, así que puedo disfrutar tanto como yo quiero sobre eso)
¿Qué tipo de problemas en programación, ingeniería de software e informática son adecuados para los métodos estadísticos? ¿Dónde voy a obtener los mejores pagos?
Normalmente, todo lo que tiene que ver con la comparación de datos implica entradas numéricas (o reducidas a numéricas) de fuentes no confiables. Una señal de un instrumento, un grupo de páginas y el número de palabras que contienen. Cuando obtiene estos datos, y tiene que encontrar una respuesta destilada del grupo, entonces necesita estadísticas. Por ejemplo, piense en el algoritmo para realizar la detección de clics en el iPhone. Está utilizando una aguja temblorosa y gruesa para referirse a un icono que es mucho más pequeño que el lápiz óptico. Claramente, el hardware (pantalla capacitiva) le enviará un montón de datos sobre el dedo, además de un montón de datos sobre ruido aleatorio (¿aire ?, no sé cómo funciona). El conductor debe darle sentido a este lío y darle coordenada ax, y en la pantalla. Eso necesita (muchas) estadísticas.
¿Qué tipo de métodos estadísticos debería emplear para aprender?
Los que te dije son más que suficientes, también porque para entenderlos, tienes que caminar por otras cosas.
¿Qué recursos debería usar para aprender esto? Libros, documentos, sitios web. Apreciaría una discusión sobre de qué se trata cada libro (u otro recurso) y por qué es relevante.
Aprendí estadísticas principalmente de cursos universitarios estándar. Mi primer libro fue el " libro de restos de trenes ", y es muy bueno. También probé este , que se enfoca en R pero no me satisfizo particularmente. Tienes que saber cosas y R para superarlo.
Los programadores a menudo necesitan tratar con grandes bases de datos de texto en lenguajes naturales, y ayudar a categorizar, clasificar, buscar y procesar de otra manera. ¿Qué técnicas estadísticas son útiles aquí?
Eso depende de la pregunta que necesita responder utilizando su conjunto de datos.
Con frecuencia, se les pide a los programadores que produzcan sistemas de alto rendimiento que escalen bien bajo carga. Pero no se puede hablar de rendimiento a menos que se pueda medir. ¿Qué tipo de diseño experimental y herramientas estadísticas necesita usar para poder decir con confianza que los resultados son significativos?
Hay muchos problemas con la medición. La medición es un arte fino y delicado. La medición correcta es casi más allá de lo humano. El hecho es que el muestreo introduce un sesgo, ya sea desde la muestra, o desde el método, o desde la naturaleza de la muestra, o desde la naturaleza de la naturaleza. Una buena muestra conoce estas cosas e intenta reducir tanto el sesgo no deseado en una distribución aleatoria.
Los ejemplos del blog que publicaste son relevantes. Supongamos que tiene un tiempo de inicio para una base de datos. Si toma medidas de rendimiento dentro de ese tiempo, todas sus medidas estarán sesgadas. No hay un método estadístico que pueda decirte esto. Solo tu conocimiento del sistema puede.
¿Hay otros problemas comúnmente encontrados por los programadores que se beneficiarían de un enfoque estadístico?
Cada vez que tiene un conjunto de productores de datos, tiene estadísticas, por lo que la computación científica y el análisis de datos son, obviamente, un lugar. La folksonomía y las redes sociales son casi todas estadísticas. Incluso es, en cierto sentido, estadístico. El hecho de que una respuesta sea altamente votada no significa que sea la correcta. Significa que hay una alta probabilidad de que sea correcto, de acuerdo con la evaluación de un conjunto estadístico de evaluadores independientes. Cómo se comportan estos evaluadores hace la diferencia entre , reddit y digg.
Tal vez eche un vistazo al libro (gratuito), Think Stats: Probability and Statistics for Programmers . Aunque usa Python para demostrar conceptos estadísticos, cualquier persona con experiencia en otros lenguajes de programación debería ser capaz de seguirlo.
Descripción del sitio:
Think Stats es una introducción a Probability and Statistics para programadores de Python.
Si tiene habilidades básicas en Python, puede usarlas para aprender conceptos de probabilidad y estadística. Este nuevo libro enfatiza técnicas simples que puede usar para explorar conjuntos de datos reales y responder preguntas estadísticas interesantes.
Un buen recurso sobre programación es "Inteligencia Artificial: Un Enfoque Moderno" de Russell y Norvig. Puede ser un recurso realmente útil para comprender las técnicas de aprendizaje automático basadas en estadísticas.
Interesante pregunta. Como un estadístico cuyo interés está cada vez más alineado con la informática quizás podría proporcionar algunas reflexiones ...
No aprenda la prueba de hipótesis frecuentista . Si bien la mayor parte de mi trabajo se realiza en este paradigma, no coincide con las necesidades de las empresas o la minería de datos. Los científicos generalmente tienen en mente hipótesis específicas, y podrían querer medir la probabilidad de que, dado que su hipótesis no es cierta, los datos serían tan extremos como lo son. Raramente este es el tipo de respuesta que quiere un científico informático.
Bayesian es útil , incluso si no sabes por qué estás asumiendo los priores que estás usando. Un análisis de Baysian puede proporcionarle una estimación de probabilidad precisa para varias contingencias, pero es importante darse cuenta de que la única razón por la que tiene esta estimación precisa es porque tomó una decisión difusa con respecto a la probabilidad previa. (Para los que no lo sepan, con la inferencia baysiana, puede especificar una probabilidad previa arbitraria y actualizarla según los datos recopilados para obtener una mejor estimación).
El aprendizaje y la clasificación de máquinas pueden ser un buen lugar para comenzar. La literatura sobre el aprendizaje automático está más centrada en los problemas de la informática, aunque su misión es casi idéntica a la de las estadísticas (ver: http://anyall.org/blog/2008/12/statistics-vs-machine-learning-fight/ ) .
Dado que hablaste de grandes bases de datos con grandes cantidades de variables, aquí hay algunos algoritmos que son útiles en este dominio.
- adaboost : si tienes una gran cantidad de clasificadores de mierda, y quieres hacer un buen clasificador. (ver también aumento de logit)
- Soporte Vector Machines : Un clasificador potente y flexible. Puede aprender patrones no lineales (bien lineal en el espacio del kernel no lineal si quiere ser exigente al respecto).
- k-vecino más cercano : un algoritmo simple pero poderoso. No escala bien, pero hay alternativas cercanas más cercanas que no son tan patológicas.
- CART : este algoritmo divide los datos en función de varias variables de predicción. Es particularmente bueno si hay interacciones variables, o existe un muy buen predictor que solo funciona en un subconjunto de los datos.
- Regresión de ángulo mínimo : si el valor que intentas predecir es continuo y tienes muchos datos y muchos predictores.
Esto de ninguna manera es completo, pero debería darle un buen punto de partida. Un libro muy bueno y accesible sobre el tema es Duda, Hart, Stork: Pattern Classification
Además, una gran parte de las estadísticas son visualizaciones y análisis descriptivos. Estos son de particular interés para el programador porque le permiten transmitir información al usuario. En R, ggplot2 es mi paquete de elección para crear visualizaciones. En el lado del análisis descriptivo (y útil en el análisis de texto) está el escalado multidimensional , que puede dar una interpretación espacial de los datos no espaciales (por ejemplo, las ideologías de los senadores http://projecteuclid.org/DPubS?service=UI&version=1.0&verb=Display&handle=euclid.aoas/1223908041 ).
Simplemente depende del área en la que esté trabajando. Como ejemplo, si está trabajando en aplicaciones que implican muestreo y análisis de datos, las áreas como Distribuciones (Normal, ty Chi Cuadrado) serán útiles. Y si su aplicación es algo así como un software de predicción, es posible que también necesite conocer distribuciones como Poisson.
Si su herramienta va a tomar algunas decisiones basadas en datos previos, las ideas de media, varianza y desviación estándar pueden ser útiles. (Con la prueba de Hipótesis)
Actualización: la mayoría de las universidades ofrecen cursos sobre estadísticas. He visto algunas notas de conferencias que pueden considerarse breves pero aún buenas. Example