Cuando escuchas a la gente hablar de aprendizaje automático, ¿no tienes una idea muy vaga de lo que significa? ¿Estás cansado de simplemente guiñar la cabeza cuando hablas con tus colegas?
Esta guía está dirigida a todos los amigos que están interesados en el aprendizaje automático pero no saben cómo comenzar. Supongo que muchos de ustedes han leído los términos de Wikipedia sobre el aprendizaje automático y se han sentido frustrados al pensar que nadie puede dar una explicación de alto nivel.
El objetivo de este artículo es ser accesible, lo que significa que hay una gran cantidad de generalizaciones. Pero ¿a quién le importa?
El concepto de aprendizaje automático sugiere que no se necesita escribir ningún código de programación especializado para los problemas pendientes, y que los algoritmos genéricos pueden obtener respuestas interesantes en el conjunto de datos. Para los algoritmos genéticos, no se codifica, sino que se ingresa datos y construye su propia lógica sobre los datos.
Por ejemplo, hay un algoritmo llamado algoritmo de clasificación que puede dividir los datos en diferentes grupos. Un algoritmo de clasificación que se utiliza para reconocer números escritos a mano, sin modificar una línea de código, puede ser utilizado para dividir los correos electrónicos en correo basura y correo electrónico. El algoritmo no cambia, pero los datos de entrenamiento que se ingresan cambian, por lo que produce una lógica de clasificación diferente.
Los algoritmos de aprendizaje automático son una caja negra que se puede reutilizar para resolver muchos problemas de clasificación.
El algoritmo de aprendizaje automático es un término general que abarca un gran número de algoritmos genéticos similares.
Se puede pensar que los algoritmos de aprendizaje automático se dividen en dos grandes categorías: aprendizaje supervisado y aprendizaje no supervisado.
Supongamos que eres un agente inmobiliario y el negocio es cada vez más grande, por lo que contratas a un grupo de internos para que te ayuden.
Para ayudar a tus pasantes (tal vez para liberarte para irte de vacaciones), decides escribir un pequeño software que evalúa el valor de una vivienda en tu área en función de factores como el tamaño de la casa, el emplazamiento y el precio de venta de una vivienda similar.
Usted escribe cada transacción de vivienda en la ciudad durante los últimos tres meses, y en cada una de ellas registra una larga serie de detalles: número de dormitorios, tamaño de la casa, terreno, etc. Pero lo más importante es que escribe el precio final:
Este es nuestro catálogo de datos de entrenamiento para mamíferos.
Usamos estos datos de entrenamiento para escribir un programa para estimar el valor de otras casas en el área:
Esto se llama aprendizaje supervisado. Ya sabes el precio de venta de cada casa, en otras palabras, sabes la respuesta a la pregunta y puedes invertir la lógica de la solución.
Para escribir el software, ingresas los datos de entrenamiento de cada conjunto de propiedades a tu algoritmo de aprendizaje automático.
Es como un ejercicio de matemáticas, donde se borran todos los símbolos de operación de la fórmula:
¡Dios mío! ¡un estudiante malicioso borró el símbolo matemático de la respuesta del profesor!
Después de ver estas preguntas, ¿puedes entender qué tipo de problemas matemáticos hay dentro de estas pruebas?
En el aprendizaje supervisado, usted está permitiendo que el ordenador calcule las relaciones entre los números para usted. Una vez que usted sabe los métodos matemáticos necesarios para resolver este tipo de problemas específicos, usted puede resolver otros problemas de la misma clase.
Volvamos al ejemplo del agente de bienes raíces al principio. Si no sabes cuál es el precio de venta de cada casa. Incluso si sólo sabes el tamaño de la casa, la ubicación, etc., puedes hacer cosas geniales. Esto se llama aprendizaje no supervisado.
Incluso si no estás tratando de predecir datos desconocidos (como el precio), puedes usar el aprendizaje automático para hacer algo interesante.
Es un poco como si alguien te diera un pedazo de papel con una lista de números y te dijera: "Eh, no sé qué significan estos números, tal vez puedas encontrar una regla o clasificarlos o algo así.
¿Qué haces con los datos? Primero, puedes usar un algoritmo para segmentar automáticamente los diferentes segmentos de mercado a partir de los datos. Tal vez descubras que los compradores de viviendas cerca de la universidad prefieren casas pequeñas con muchos dormitorios, mientras que los compradores de viviendas en los suburbios prefieren casas grandes con tres dormitorios.
También puedes hacer algo genial: encontrar automáticamente los datos de los precios de las viviendas, es decir, los valores que difieren de los demás datos. Las propiedades de estos grupos pueden ser edificios altos, y puedes concentrar a los mejores vendedores en esas áreas porque sus comisiones son más altas.
En el resto de este artículo, hablaremos principalmente sobre el aprendizaje supervisado, pero no es porque el aprendizaje no supervisado sea inútil o simplemente inútil. De hecho, el aprendizaje no supervisado es cada vez más importante a medida que los algoritmos mejoran y no se requiere vincular los datos con las respuestas correctas.
Hay muchos otros tipos de algoritmos de aprendizaje automático.
Eso es genial, pero ¿podría evaluar el precio de una vivienda realmente considerarse una forma de aprender?
Como ser humano, tu cerebro puede manejar la mayoría de las situaciones y aprender a manejarlas sin ninguna instrucción clara. Si has sido un agente de bienes raíces durante mucho tiempo, tendrás una sensación instintiva del precio adecuado de la propiedad, la mejor manera de comercializarla y qué clientes estarán interesados, etc. El objetivo de los estudios de inteligencia artificial fuerte (AI fuerte) es ser capaz de replicar esta capacidad con una computadora.
Sin embargo, los algoritmos de aprendizaje automático actuales no son tan buenos, ya que solo se centran en problemas muy específicos y limitados. Tal vez, en este caso, la definición más adecuada de algoritmo de aprendizaje automático es encontrar una ecuación para resolver un problema específico basándose en un pequeño número de datos de ejemplo.
Desgraciadamente, las máquinas de filtrar encuentran una ecuación para resolver un problema específico basándose en una pequeña cantidad de datos de ejemplo.
Por supuesto, si estás leyendo este artículo en 50 años, entonces ya hemos desarrollado un algoritmo de inteligencia artificial potente, y este artículo parece un anticuado.
¡Vamos a escribir el código!
En el ejemplo anterior, ¿cómo vas a escribir el procedimiento para evaluar el precio de una vivienda?
Si no sabes nada de aprendizaje automático, es probable que intentes escribir algunas reglas básicas para evaluar el precio de una casa, como:
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# In my area, the average house costs $200 per sqft
price_per_sqft = 200
if neighborhood == "hipsterton":
# but some areas cost a bit more
price_per_sqft = 400
elif neighborhood == "skid row":
# and some areas cost less
price_per_sqft = 100
# start with a base price estimate based on how big the place is
price = price_per_sqft * sqft
# now adjust our estimate based on the number of bedrooms
if num_of_bedrooms == 0:
# Studio apartments are cheap
price = price — 20000
else:
# places with more bedrooms are usually
# more valuable
price = price + (num_of_bedrooms * 1000)
return price
Tal vez se logre un poco de productividad si te quedas así por horas, pero tu programa nunca será perfecto y es difícil de mantener cuando los precios cambian.
¿No sería mejor si el ordenador pudiera encontrar la manera de implementar las funciones mencionadas?
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = <computer, plz do some math for me>
return price
Una forma de pensar en esto es pensar que el precio de una vivienda es como un plato de salsa deliciosa, y los ingredientes de la salsa son el número de habitaciones, el área y el terreno. Si se puede calcular la influencia de cada ingrediente en el precio final, tal vez se pueda obtener una proporción concreta de los ingredientes mezclados para formar el precio final.
Esto puede simplificar su programa original (todo es una frase de if else loco) a algo como esto:
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# a little pinch of this
price += num_of_bedrooms * .841231951398213
# and a big pinch of that
price += sqft * 1231.1231231
# maybe a handful of this
price += neighborhood * 2.3242341421
# and finally, just a little extra salt for good measure
price += 201.23432095
return price
Tenga en cuenta los números mágicos de las cuerdas.841231951398213, 1231.1231231, 2.3242341421, y 201.23432095; se llaman pesos. ¡Si pudiéramos encontrar el peso perfecto para cada cuadra, nuestra función podría predecir todos los precios de las casas!
Una forma de encontrar el peso óptimo es:
Paso uno:
Primero, se establece que cada peso sea de 1.0:
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# a little pinch of this
price += num_of_bedrooms * 1.0
# and a big pinch of that
price += sqft * 1.0
# maybe a handful of this
price += neighborhood * 1.0
# and finally, just a little extra salt for good measure
price += 1.0
return price
El paso 2:
Trae cada propiedad a tu cálculo funcional y comprueba el grado de desviación entre el valor estimado y el precio correcto:
Utilice su programa para predecir los precios de las casas.
Por ejemplo: el primer conjunto de propiedades en la tabla anterior tiene un precio de transacción real de $250,000, y tu función de estimación es de $178,000, lo que te hace perder $72,000.
Luego, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación. Supongamos que el conjunto de datos tiene 500 transacciones de bienes raíces, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación. Supongamos que el conjunto de datos tiene 500 transacciones, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación, a continuación,
Ahora, divide el total por 500 y obtendrá el valor medio de la desviación de la estimación de cada conjunto de propiedades. Llame a este valor de error medio el costo de su función.
Si puedes ajustar la ponderación para que este costo sea 0, tu función es perfecta. Esto significa que tu programa puede evaluar cada transacción de bienes raíces de la misma manera en función de los datos introducidos. Y ese es nuestro objetivo.
El paso 3:
Repetir el paso 2 y intentar todas las combinaciones posibles de valores de peso. ¡Cuál combinación hace que el costo sea más cercano a cero es la que vas a usar, y tan pronto como encuentres esa combinación, el problema se resuelve!
La mente perturba el tiempo
Es muy simple, ¿no? Piensa en lo que acabas de hacer. Obtienes algunos datos, los ingresas en tres sencillos pasos generales, y al final obtienes una función que puede estimar las casas de tu área. Sin embargo, los siguientes hechos pueden perturbar su mente:
1. Durante los últimos 40 años, investigaciones en muchos campos (como la lingüística/traducción) han demostrado que este tipo de algoritmos de aprendizaje, como el de la máquina de datos vibratoria (la palabra que he creado), han superado a los métodos que requieren la utilización de personas reales con reglas claras. Los métodos de aprendizaje automático han vencido finalmente a los expertos humanos.
2.你最后写出的函数真是笨,它甚至不知道什么是“面积”和“卧室数”。它知道的只是搅动,改变数字来得到正确的答案。
3.很可能你都不知道为何一组特殊的权重值能起效。所以你只是写出了一个你实际上并不理解却能证明的函数。
4.试想一下,你的程序里没有类似“面积”和“卧室数”这样的参数,而是接受了一组数字。假设每个数字代表了你车顶安装的摄像头捕捉的画面中的一个像素,再将预测的输出不称为“价格”而是叫做“方向盘转动度数”,这样你就得到了一个程序可以自动操纵你的汽车了!
Es una locura, ¿no?
¿Qué pasa con cada pieza de número que se prueba en el paso 3?
Bueno, por supuesto que no es posible probar todos los posibles valores de peso para encontrar la mejor combinación de resultados. Eso puede llevar mucho tiempo, porque los números que hay que probar pueden ser infinitos. Para evitar esto, los matemáticos han encontrado muchas maneras inteligentes de encontrar rápidamente buenos valores de peso sin tener que intentarlo demasiado. Primero, escriba una simple ecuación que represente el paso 2:
Esta es tu función de costos.
Ahora, vamos a reescribir este mismo término matemático de aprendizaje automático (ahora puedes ignorarlos):
θ representa el valor de peso actual. J ((θ) significa que el valor de peso actual corresponde al valor de costo de la píldora.
Esta ecuación indica el tamaño del grado de desviación de nuestro estimador en el valor de peso actual.
Si se representan gráficamente todos los posibles valores de peso para el número y la superficie de los dormitorios, se obtiene un gráfico similar al siguiente:
El gráfico de la función de costos es como un plato. El eje vertical representa el costo.
El punto más bajo en el gráfico en azul es el punto más bajo en el que el costo es más bajo. El punto más alto significa que nuestro programa es el más pequeño. Así que, si podemos encontrar el punto más bajo en el gráfico que nos lleva a él, tenemos la respuesta.
Por lo tanto, solo necesitamos ajustar el peso para que podamos ir hacia el punto más bajo en el gráfico. Si los pequeños ajustes en el peso nos mantienen en movimiento hacia el punto más bajo, finalmente podemos llegar allí sin tener que intentar demasiado peso.
Si aún recuerdan un poco el cálculo, quizás recuerden que si buscan una función, el resultado les dice cuál es la inclinación de la función en cualquier punto. En otras palabras, para un punto dado en el gráfico, nos dice que el camino es descendente. Podemos usar este punto para avanzar hacia abajo.
Así que si hacemos una derivación de la función de costos con respecto a cada peso, entonces podemos restar ese valor de cada peso. Esto nos acerca más al fondo de la montaña. Sigue haciéndolo, y finalmente llegaremos al fondo y obtendremos el valor óptimo del peso.
Este método para encontrar el peso óptimo se llama descenso de la gradiente de volumen, y se generaliza en su altura.http://hbfs.wordpress.com/2012/04/24/introduction-to-gradient-descent/¡No lo hagas!
Todo esto está listo para ti cuando utilizas la biblioteca de algoritmos de aprendizaje automático para resolver problemas reales.
¿Qué más has pasado por alto?
El algoritmo de tres pasos que he descrito anteriormente se llama regresión multilineal. Su ecuación de estimación es buscar una línea recta que pueda adaptarse a todos los puntos de datos de precios de vivienda. Luego, usa esta ecuación para estimar el precio de una vivienda que nunca se ha visto según la ubicación en la que la vivienda puede aparecer en su línea recta.
Sin embargo, el método que te mostré puede funcionar en situaciones simples, pero no en todas las situaciones. Una de las razones es que los precios de las casas no siempre siguen una línea continua.
Pero, afortunadamente, hay muchas maneras de manejar esto. Para los datos no lineales, muchos otros tipos de algoritmos de aprendizaje automático pueden ser manejados (como redes neuronales o máquinas vectoriales nucleares). También hay muchas maneras de usar la regresión lineal con más flexibilidad, pensando en ajustarlas con líneas más complejas. En todos los casos, la idea básica de buscar la máxima prioridad sigue siendo válida.
Además, ignoro el concepto de superajuste. Es fácil encontrar un conjunto de pesos que pueden predecir perfectamente los precios de las viviendas en su conjunto de datos original, pero no para cualquier nueva vivienda fuera del conjunto de datos original. Hay muchas soluciones para esto (como la normalización y el uso de conjuntos de datos de verificación cruzada). Aprender a manejar este problema es fundamental para aplicar el aprendizaje automático con éxito.
En otras palabras, los conceptos básicos son muy simples y requieren algunas habilidades y experiencia para obtener resultados útiles con el aprendizaje automático.
Una vez que comienzas a entender que las técnicas de aprendizaje automático se pueden aplicar fácilmente para resolver problemas que parecen difíciles (como el reconocimiento de escritura), tienes la sensación de que con suficientes datos, puedes resolver cualquier problema con aprendizaje automático.
Pero es importante recordar que el aprendizaje automático solo se aplica a problemas que se pueden resolver con los datos que tienes.
Por ejemplo, si construyes un modelo para predecir el precio de una vivienda según el número de plantas en cada conjunto de viviendas, nunca tendrás éxito. No hay ninguna relación entre el número de plantas en la vivienda y el precio de la vivienda. Por lo tanto, no importa lo que intentes, el ordenador no puede deducir la relación entre las dos.
Solo puedes modelar relaciones que realmente existen.
Creo que el mayor problema con el aprendizaje automático actual es que está activo principalmente en el mundo académico y las organizaciones de investigación comerciales. No hay mucho material de aprendizaje sencillo y fácil de entender para las personas que desean tener un conocimiento general y no ser expertos. Pero esta situación mejora cada día.
El curso gratuito de aprendizaje automático del profesor Andrew Ng en Coursera es muy bueno. Lo recomiendo encarecidamente. Cualquier persona con un título en ciencias de la computación y un poco de memoria matemática debería entenderlo.
Además, puedes descargar e instalar SciKit-Learn para probar miles de algoritmos de aprendizaje automático. Es un marco de Python con versiones de caja negra para todos los algoritmos estándar.
Traducido por el desarrollador de Python
OcluaquánEste ejemplo es el que el profesor Leonda repite cada vez que comienza una nueva clase.
el tren¿No debería ser m en el denominador de la función de cost? ¿Por qué se convierte en 2m?