Saltar al contenido principal
InicioTutorialesProgramación R

Aprendizaje automático en R para principiantes

Este pequeño tutorial pretende introducirte en los fundamentos del aprendizaje automático en R: te mostrará cómo utilizar R para trabajar con KNN.
Actualizado 11 sept 2024  · 24 min leer

Presentación: Aprendizaje automático en R

El aprendizaje automático es una rama de la informática que estudia el diseño de algoritmos capaces de aprender. Las tareas típicas del aprendizaje automático son el aprendizaje de conceptos, el aprendizaje de funciones o "modelado predictivo", la agrupación y la búsqueda de patrones predictivos. Estas tareas se aprenden a través de los datos disponibles que se observaron mediante experiencias o instrucciones, por ejemplo. El aprendizaje automático espera que incluir la experiencia en sus tareas acabe mejorando el aprendizaje. El objetivo final es mejorar el aprendizaje de tal forma que se convierta en automático, para que los humanos como nosotros no necesitemos interferir más.

Este pequeño tutorial pretende introducirte en los fundamentos del aprendizaje automático en R: más concretamente, te mostrará cómo utilizar R para trabajar con el conocido algoritmo de aprendizaje automático llamado "KNN" o k-vecinos más próximos.

Si estás interesado en seguir un curso, ¡considera echar un vistazo a nuestra Introducción al Aprendizaje Automático con R o al curso Aprendizaje no Supervisado en R de DataCamp!

Uso de R para k-Nearest Neighbors (KNN)

El algoritmo KNN o k-vecinos más cercanos es uno de los algoritmos de aprendizaje automático más sencillos y es un ejemplo de aprendizaje basado en instancias, en el que los datos nuevos se clasifican basándose en instancias almacenadas y etiquetadas.

Más concretamente, la distancia entre los datos almacenados y la nueva instancia se calcula mediante algún tipo de medida de similitud. Esta medida de similitud suele expresarse mediante una medida de distancia, como la distancia euclídea, la similitud coseno o la distancia Manhattan.

En otras palabras, la similitud con los datos que ya estaban en el sistema se calcula para cualquier punto de datos nuevo que introduzcas en el sistema.

A continuación, utiliza este valor de similitud para realizar un modelado predictivo. El modelado predictivo puede ser de clasificación, asignando una etiqueta o una clase a la nueva instancia, o de regresión, asignando un valor a la nueva instancia. Que clasifiques o asignes un valor a la nueva instancia depende, por supuesto, de cómo compongas tu modelo con KNN.

El algoritmo del vecino más próximo k añade a este algoritmo básico que, una vez calculada la distancia del nuevo punto a todos los puntos de datos almacenados, se ordenan los valores de distancia y se determinan los vecinos más próximos k. Se reúnen las etiquetas de estos vecinos y se utiliza un voto mayoritario o ponderado con fines de clasificación o regresión.

En otras palabras, cuanto mayor sea la puntuación de un determinado punto de datos ya almacenado, más probable será que la nueva instancia reciba la misma clasificación que la de su vecino. En el caso de la regresión, el valor que se asignará al nuevo punto de datos será la media de sus k vecinos más próximos.



Primer paso. Obtén tus datos

El aprendizaje automático suele partir de datos observados. Puedes tomar tu propio conjunto de datos o consultar otras fuentes para encontrar uno.

Conjuntos de datos integrados en R

Este tutorial utiliza el conjunto de datos Iris, muy conocido en el ámbito del aprendizaje automático. Este conjunto de datos está integrado en R, por lo que puedes echarle un vistazo escribiendo lo siguiente en tu consola:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJpcmlzIn0=

Repositorio de Aprendizaje Automático de UC Irvine

Si quieres descargar el conjunto de datos en lugar de utilizar el que está incorporado en R, puedes ir al Repositorio de Aprendizaje Automático de la UC Irvine y buscar el conjunto de datos Iris.


Consejo: ¡no te limites a consultar la carpeta de datos del conjunto de datos Iris, sino que echa también un vistazo a la página de descripción de los datos!

A continuación, utiliza el comando siguiente para cargar los datos:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFJlYWQgaW4gYGlyaXNgIGRhdGFcbmlyaXMgPC0gcmVhZC5jc3YodXJsKFwiaHR0cDovL2FyY2hpdmUuaWNzLnVjaS5lZHUvbWwvbWFjaGluZS1sZWFybmluZy1kYXRhYmFzZXMvaXJpcy9pcmlzLmRhdGFcIiksIFxuICAgICAgICAgICAgICAgICBoZWFkZXIgPSBGQUxTRSkgXG5cbiMgUHJpbnQgZmlyc3QgbGluZXNcbmhlYWQoaXJpcylcblxuIyBBZGQgY29sdW1uIG5hbWVzXG5uYW1lcyhpcmlzKSA8LSBjKFwiU2VwYWwuTGVuZ3RoXCIsIFwiU2VwYWwuV2lkdGhcIiwgXCJQZXRhbC5MZW5ndGhcIiwgXCJQZXRhbC5XaWR0aFwiLCBcIlNwZWNpZXNcIilcblxuIyBDaGVjayB0aGUgcmVzdWx0XG5pcmlzIn0=

El comando lee el archivo .csv o "Comma Separated Value" del sitio web. El argumento header se ha puesto en FALSE, lo que significa que el conjunto de datos Iris de esta fuente no te da los nombres de los atributos de los datos.

En lugar de los nombres de los atributos, puede que veas nombres de columna extraños como "V1" o "V2" cuando inspecciones el atributo iris con una función como head(). Se fijan al azar.

Para simplificar el trabajo con el conjunto de datos, es conveniente que tú mismo hagas los nombres de las columnas: puedes hacerlo mediante la función names(), que obtiene o establece los nombres de un objeto. Concatena los nombres de los atributos tal y como quieres que aparezcan. En el trozo de código anterior, habrás enumerado Sepal.Length, Sepal.Width, Petal.Length, Petal.Width y Species.

Una vez más, estos nombres no surgen de la nada: echa un vistazo a la descripción del conjunto de datos que aparece en el enlace anterior; normalmente verás todos estos nombres en la lista.

Aprende Python para la Ciencia de Datos con DataCamp

Segundo paso. Conoce tus datos

Ahora que has cargado el conjunto de datos Iris en RStudio, debes intentar comprender a fondo de qué tratan tus datos. Para empezar, ¡no basta con mirar o leer tus datos!

Tienes que ensuciarte las manos, explorar y visualizar tu conjunto de datos e incluso reunir algo más de conocimiento del dominio si crees que los datos te sobrepasan.

Probablemente ya tendrás los conocimientos de dominio que necesitas, pero sólo como recordatorio, todas las flores contienen un sépalo y un pétalo. El sépalo encierra los pétalos y suele ser verde y parecido a una hoja, mientras que los pétalos suelen ser hojas coloreadas. En el caso de las flores de iris, es un poco diferente, como puedes ver en la siguiente imagen:

aprendizaje automático R

Visión general inicial del conjunto de datos

En primer lugar, ya puedes intentar hacerte una idea de tus datos haciendo algunos gráficos, como histogramas o boxplots. En este caso, sin embargo, los gráficos de dispersión pueden darte una gran idea de lo que tienes entre manos: puede ser interesante ver en qué medida una variable se ve afectada por otra.

En otras palabras, quieres ver si existe alguna correlación entre dos variables.

Puedes hacer gráficos de dispersión con el paqueteggvis , por ejemplo.

Ten en cuenta que primero tienes que cargar el paquete ggvis:

# Load in `ggvis`
library(ggvis)

# Iris scatter plot
iris %>% ggvis(~Sepal.Length, ~Sepal.Width, fill = ~Species) %>% layer_points()

iris de correlación

Ves que hay una correlación elevada entre la longitud y la anchura del sépalo de las flores del iris Setosa, mientras que la correlación es algo menos elevada en el caso de las flores Virginica y Versicolor: los puntos de datos están más dispersos por el gráfico y no forman un racimo como puedes ver en el caso de las flores Setosa.

El diagrama de dispersión que representa la longitud y la anchura de los pétalos cuenta una historia similar:

iris %>% ggvis(~Petal.Length, ~Petal.Width, fill = ~Species) %>% layer_points()

diagrama de dispersión iris

Verás que este gráfico indica una correlación positiva entre la longitud y la anchura de los pétalos de todas las especies incluidas en el conjunto de datos de Iris. Por supuesto, probablemente necesites probar esta hipótesis un poco más si quieres estar realmente seguro de ello:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIE92ZXJhbGwgY29ycmVsYXRpb24gYFBldGFsLkxlbmd0aGAgYW5kIGBQZXRhbC5XaWR0aGBcbmNvcihpcmlzJFBldGFsLkxlbmd0aCwgaXJpcyRQZXRhbC5XaWR0aClcblxuIyBSZXR1cm4gdmFsdWVzIG9mIGBpcmlzYCBsZXZlbHMgXG54PWxldmVscyhpcmlzJFNwZWNpZXMpXG5cbiMgUHJpbnQgU2V0b3NhIGNvcnJlbGF0aW9uIG1hdHJpeFxucHJpbnQoeFsxXSlcbmNvcihpcmlzW2lyaXMkU3BlY2llcz09eFsxXSwxOjRdKVxuXG4jIFByaW50IFZlcnNpY29sb3IgY29ycmVsYXRpb24gbWF0cml4XG5wcmludCh4WzJdKVxuY29yKGlyaXNbaXJpcyRTcGVjaWVzPT14WzJdLDE6NF0pXG5cbiMgUHJpbnQgVmlyZ2luaWNhIGNvcnJlbGF0aW9uIG1hdHJpeFxucHJpbnQoeFszXSlcbmNvcihpcmlzW2lyaXMkU3BlY2llcz09eFszXSwxOjRdKSJ9

Verás que, al combinar las tres especies, la correlación era un poco más fuerte que cuando se observan las distintas especies por separado: la correlación global es de 0,96, mientras que para Versicolor es de 0,79. En cambio, Setosa y Virginica tienen correlaciones de longitud y anchura de pétalos de 0,31 y 0,32 si redondeas las cifras.

Consejo¿tienes curiosidad por ggvis, los gráficos o los histogramas en particular? Consulta nuestro tutorial sobre histogramas y/o el curso de ggvis.

Tras una visión general visualizada de los datos, también puedes ver el conjunto de datos introduciendo

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFJldHVybiBhbGwgYGlyaXNgIGRhdGFcbmlyaXNcblxuIyBSZXR1cm4gZmlyc3QgNSBsaW5lcyBvZiBgaXJpc2BcbmhlYWQoaXJpcylcblxuIyBSZXR1cm4gc3RydWN0dXJlIG9mIGBpcmlzYFxuc3RyKGlyaXMpIn0=

Sin embargo, como verás por el resultado de este comando, ésta no es realmente la mejor forma de inspeccionar a fondo tu conjunto de datos: el conjunto de datos ocupa mucho espacio en la consola, lo que te impedirá formarte una idea clara sobre tus datos. Por lo tanto, es mejor inspeccionar el conjunto de datos ejecutando head(iris) o str(iris).

Observa que el último comando te ayudará a distinguir claramente el tipo de dato num y los tres niveles del atributo Species, que es un factor. Esto es muy conveniente, ya que muchos clasificadores de aprendizaje automático de R requieren que la característica objetivo se codifique como un factor.

Recuerda que las variables factoriales representan variables categóricas en R. Por tanto, pueden adoptar un número limitado de valores diferentes.

Un rápido vistazo al atributo Species mediante te dice que la división de las especies de flores es 50-50-50. En cambio, si quieres comprobar la división porcentual del atributo Species, puedes pedir una tabla de proporciones:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIERpdmlzaW9uIG9mIGBTcGVjaWVzYFxudGFibGUoaXJpcyRTcGVjaWVzKSBcblxuIyBQZXJjZW50dWFsIGRpdmlzaW9uIG9mIGBTcGVjaWVzYFxucm91bmQocHJvcC50YWJsZSh0YWJsZShpcmlzJFNwZWNpZXMpKSAqIDEwMCwgZGlnaXRzID0gMSkifQ==

Ten en cuenta que el argumento round redondea los valores del primer argumento, prop.table(table(iris$Species))*100 al número de dígitos especificado, que es un dígito después del punto decimal. Puedes ajustarlo fácilmente cambiando el valor del argumento digits.

Comprensión profunda de tus datos

¡No nos quedemos en esta visión general de alto nivel de los datos! R te ofrece la posibilidad de profundizar con la función summary(). Esto te dará el valor mínimo, el primer cuantil, la mediana, la media, el tercer cuantil y el valor máximo del conjunto de datos Iris para tipos de datos numéricos. Para la variable de clase, se devolverá el recuento de factores:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFN1bW1hcnkgb3ZlcnZpZXcgb2YgYGlyaXNgXG5zdW1tYXJ5KC4uLi4pIFxuXG4jIFJlZmluZWQgc3VtbWFyeSBvdmVydmlld1xuc3VtbWFyeSguLi4uW2MoXCJQZXRhbC5XaWR0aFwiLCBcIlNlcGFsLldpZHRoXCIpXSkiLCJzb2x1dGlvbiI6IiMgU3VtbWFyeSBvdmVydmlldyBvZiBgaXJpc2BcbnN1bW1hcnkoaXJpcykgXG5cbiMgUmVmaW5lZCBzdW1tYXJ5IG92ZXJ2aWV3XG5zdW1tYXJ5KGlyaXNbYyhcIlBldGFsLldpZHRoXCIsIFwiU2VwYWwuV2lkdGhcIildKSIsInNjdCI6InRlc3RfZnVuY3Rpb24oXCJzdW1tYXJ5XCIsYXJncz1cIm9iamVjdFwiLCBpbmRleD0xKVxudGVzdF9mdW5jdGlvbihcInN1bW1hcnlcIiwgYXJncz1cIm9iamVjdFwiLCBpbmRleD0yKVxuc3VjY2Vzc19tc2coXCJHcmVhdCBqb2IhXCIpIn0=

Como puedes ver, se añade la función c() al comando original: se concatenan las columnas petal width y sepal width y luego se pide un resumen sólo de estas dos columnas del conjunto de datos Iris.

Paso 3. ¿Adónde ir ahora?

Después de haber adquirido un buen conocimiento de tus datos, tienes que decidir los casos de uso que serían relevantes para tu conjunto de datos. En otras palabras, piensas en lo que tu conjunto de datos podría enseñarte o en lo que crees que puedes aprender de tus datos. A partir de ahí, puedes pensar qué tipo de algoritmos podrías aplicar a tu conjunto de datos para obtener los resultados que crees que puedes obtener.

Consejo: ten en cuenta que cuanto más familiarizado estés con tus datos, más fácil te resultará evaluar los casos de uso de tu conjunto de datos específico. Lo mismo ocurre para encontrar el algoritmo de máquina adecuado.

En este tutorial, el conjunto de datos Iris se utilizará para la clasificación, que es un ejemplo de modelado predictivo. El último atributo del conjunto de datos, Species, será la variable objetivo o la variable que quieres predecir en este ejemplo.

Ten en cuenta que también puedes tomar una de las clases numéricas como variable objetivo si quieres utilizar KNN para hacer la regresión.

Paso 4. Prepara tu espacio de trabajo

Muchos de los algoritmos utilizados en el aprendizaje automático no están incorporados por defecto en R. Lo más probable es que tengas que descargar los paquetes que quieras utilizar cuando quieras iniciarte en el aprendizaje automático.


Consejo¿Tienes una idea del algoritmo de aprendizaje que puedes utilizar, pero no del paquete que quieres o necesitas? Puedes encontrar un resumen bastante completo de todos los paquetes que se utilizan en R aquí.

Para ilustrar el algoritmo KNN, este tutorial trabaja con el paquete class:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KC4uLi4uKSIsInNvbHV0aW9uIjoibGlicmFyeShjbGFzcykiLCJzY3QiOiJ0ZXN0X2Z1bmN0aW9uKFwibGlicmFyeVwiLCBhcmdzPVwicGFja2FnZVwiKVxuc3VjY2Vzc19tc2coXCJBd2Vzb21lIGpvYiFcIikifQ==

Si aún no tienes este paquete, puedes hacerlo rápida y fácilmente escribiendo la siguiente línea de código:

install.packages("<package name>")

Recuerda el consejo de empollón: si no estás seguro de si tienes este paquete, puedes ejecutar el siguiente comando para averiguarlo.

any(grepl("<name of your package>", installed.packages()))

Paso 5. Prepara tus datos

Después de explorar tus datos y preparar tu espacio de trabajo, por fin puedes volver a centrarte en la tarea que tienes por delante: crear un modelo de aprendizaje automático. Sin embargo, antes de poder hacerlo, es importante preparar también tus datos. En la sección siguiente se describen dos formas de hacerlo: normalizando los datos (si es necesario) y dividiéndolos en conjuntos de entrenamiento y de prueba.

Normalización

Como parte de la preparación de tus datos, puede que necesites normalizarlos para que sean coherentes. Para este tutorial introductorio, sólo recuerda que la normalización facilita el aprendizaje del algoritmo KNN. Hay dos tipos de normalización:

  • La normalización de ejemplos es el ajuste de cada ejemplo individualmente, mientras que
  • La normalización de rasgos indica que ajustas cada rasgo del mismo modo en todos los ejemplos.

Entonces, ¿cuándo necesitas normalizar tu conjunto de datos?

En resumen: cuando sospeches que los datos no son coherentes.

Puedes comprobarlo fácilmente cuando revises los resultados de la función summary(). Mira los valores mínimo y máximo de todos los atributos (numéricos). Si ves que un atributo tiene un amplio rango de valores, tendrás que normalizar tu conjunto de datos, porque esto significa que la distancia estará dominada por esta característica.

Por ejemplo, si tu conjunto de datos tiene sólo dos atributos, X e Y, y X tiene valores que van de 1 a 1000, mientras que Y tiene valores que sólo van de 1 a 100, entonces la influencia de Y en la función distancia se verá normalmente superada por la influencia de X.

Cuando normalizas, en realidad ajustas el rango de todas las características, de modo que las distancias entre variables con rangos mayores no se resalten en exceso.

ConsejoVuelve al resultado de summary(iris) e intenta averiguar si es necesaria la normalización.

El conjunto de datos de Iris no necesita normalizarse: el atributo Sepal.Length tiene valores que van de 4,3 a 7,9 y Sepal.Width contiene valores de 2 a 4,4, mientras que los valores de Petal.Lengthvan de 1 a 6,9 y los de Petal.Width van de 0,1 a 2,5. Todos los valores de todos los atributos están dentro del intervalo de 0,1 y 7,9, que puedes considerar aceptable.

No obstante, sigue siendo una buena idea estudiar la normalización y su efecto, sobre todo si eres nuevo en el aprendizaje automático. Puedes realizar la normalización de rasgos, por ejemplo, creando primero tu propia función normalize().

A continuación, puedes utilizar este argumento en otro comando, en el que colocas los resultados de la normalización en un marco de datos a través de as.data.frame() después de que la función lapply() devuelva una lista de la misma longitud que el conjunto de datos que le das. Cada elemento de esa lista es el resultado de la aplicación del argumento normalize al conjunto de datos que sirvió de entrada:

YourNormalizedDataSet <- as.data.frame(lapply(YourDataSet, normalize))

¡Pruébalo en el fragmento Light de DataCamp que aparece a continuación!

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIEJ1aWxkIHlvdXIgb3duIGBub3JtYWxpemUoKWAgZnVuY3Rpb25cbm5vcm1hbGl6ZSA8LSBmdW5jdGlvbih4KSB7XG5udW0gPC0geCAtIG1pbih4KVxuZGVub20gPC0gbWF4KHgpIC0gbWluKHgpXG5yZXR1cm4gKG51bS9kZW5vbSlcbn1cblxuIyBOb3JtYWxpemUgdGhlIGBpcmlzYCBkYXRhXG5pcmlzX25vcm0gPC0gLi4uLi4uLi4uLi4uLiguLi4uLi4oaXJpc1sxOjRdLCBub3JtYWxpemUpKVxuXG4jIFN1bW1hcml6ZSBgaXJpc19ub3JtYFxuc3VtbWFyeSguLi4uLi4uLi4pIiwic29sdXRpb24iOiIjIEJ1aWxkIHlvdXIgb3duIGBub3JtYWxpemUoKWAgZnVuY3Rpb25cbm5vcm1hbGl6ZSA8LSBmdW5jdGlvbih4KSB7XG5udW0gPC0geCAtIG1pbih4KVxuZGVub20gPC0gbWF4KHgpIC0gbWluKHgpXG5yZXR1cm4gKG51bS9kZW5vbSlcbn1cblxuIyBOb3JtYWxpemUgdGhlIGBpcmlzYCBkYXRhXG5pcmlzX25vcm0gPC0gYXMuZGF0YS5mcmFtZShsYXBwbHkoaXJpc1sxOjRdLCBub3JtYWxpemUpKVxuXG4jIFN1bW1hcml6ZSBgaXJpc19ub3JtYFxuc3VtbWFyeShpcmlzX25vcm0pIiwic2N0IjoidGVzdF9vYmplY3QoXCJub3JtYWxpemVcIilcbnRlc3Rfb2JqZWN0KFwiaXJpc19ub3JtXCIpXG50ZXN0X2Z1bmN0aW9uKFwic3VtbWFyeVwiLCBhcmdzPVwib2JqZWN0XCIpIn0=

Para el conjunto de datos Iris, habrías aplicado el argumento normalize a los cuatro atributos numéricos del conjunto de datos Iris (Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) y habrías puesto los resultados en un marco de datos.

Consejo: para ilustrar mejor el efecto de la normalización en el conjunto de datos, compara el resultado siguiente con el resumen del conjunto de datos Iris que se dio en el paso dos.

Conjuntos de entrenamiento y prueba

Para evaluar posteriormente el rendimiento de tu modelo, tendrás que dividir el conjunto de datos en dos partes: un conjunto de entrenamiento y un conjunto de prueba.

El primero se utiliza para entrenar el sistema, mientras que el segundo se utiliza para evaluar el sistema aprendido o entrenado. En la práctica, la división de tu conjunto de datos en un conjunto de prueba y otro de entrenamiento es disjunta: la opción de división más común es tomar 2/3 de tu conjunto de datos original como conjunto de entrenamiento, mientras que el 1/3 restante compondrá el conjunto de prueba.

Un último vistazo al conjunto de datos te enseña que si realizaras la división de ambos conjuntos en el conjunto de datos tal cual, obtendrías una clase de entrenamiento con todas las especies de "Setosa" y "Versicolor", pero ninguna de "Virginica". Por tanto, el modelo clasificaría todas las instancias desconocidas como "Setosa" o "Versicolor", ya que no sería consciente de la presencia de una tercera especie de flores en los datos.

En resumen, obtendrías predicciones incorrectas para el conjunto de pruebas.

Por tanto, debes asegurarte de que las tres clases de especies están presentes en el modelo de entrenamiento. Es más, la cantidad de casos de las tres especies tiene que ser más o menos igual para que no favorezcas a una u otra clase en tus predicciones.

Para hacer tus conjuntos de entrenamiento y de prueba, primero estableces una semilla. Es un número del generador de números aleatorios de R. La mayor ventaja de fijar una semilla es que puedes obtener la misma secuencia de números aleatorios siempre que suministres la misma semilla en el generador de números aleatorios.

set.seed(1234)

A continuación, debes asegurarte de que tu conjunto de datos Iris está barajado y de que tienes la misma cantidad de cada especie en tus conjuntos de entrenamiento y de prueba.

Utiliza la función sample() para tomar una muestra con un tamaño que se establece como el número de filas del conjunto de datos Iris, o 150. Realizas un muestreo con reemplazo: eliges entre un vector de 2 elementos y asignas 1 ó 2 a las 150 filas del conjunto de datos Iris. La asignación de los elementos está sujeta a pesos de probabilidad de 0,67 y 0,33.

ind <- sample(2, nrow(iris), replace=TRUE, prob=c(0.67, 0.33))

Observa que el argumento replace se establece en TRUE: esto significa que asignas un 1 o un 2 a una fila determinada y luego restableces el vector de 2 a su estado original. Esto significa que, para las siguientes filas de tu conjunto de datos, puedes asignar un 1 o un 2, cada vez de nuevo. La probabilidad de elegir un 1 o un 2 no debe ser proporcional a los pesos entre los elementos restantes, así que especifica pesos de probabilidad. Observa también que, aunque no lo veas en el fragmento de DataCamp Light, la semilla se ha establecido en 1234.

Recuerda que quieres que tu conjunto de entrenamiento sea 2/3 de tu conjunto de datos original: por eso asignas "1" con una probabilidad de 0,67 y los "2" con una probabilidad de 0,33 a las 150 filas de muestra.

A continuación, puedes utilizar la muestra almacenada en la variable ind para definir tus conjuntos de entrenamiento y de prueba:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6InNldC5zZWVkKDEyMzQpXG5pbmQgPC0gc2FtcGxlKDIsIG5yb3coaXJpcyksIHJlcGxhY2U9VFJVRSwgcHJvYj1jKDAuNjcsIDAuMzMpKSIsInNhbXBsZSI6IiMgQ29tcG9zZSB0cmFpbmluZyBzZXRcbmlyaXMudHJhaW5pbmcgPC0gLi4uLltpbmQ9PTEsIDE6NF1cblxuIyBJbnNwZWN0IHRyYWluaW5nIHNldFxuaGVhZCguLi4uLi4uLi4uLi4uLi4uKVxuXG4jIENvbXBvc2UgdGVzdCBzZXRcbmlyaXMudGVzdCA8LSAuLi4uW2luZD09MiwgMTo0XVxuXG4jIEluc3BlY3QgdGVzdCBzZXRcbmhlYWQoLi4uLi4uLi4uLi4pIiwic29sdXRpb24iOiIjIENvbXBvc2UgdHJhaW5pbmcgc2V0XG5pcmlzLnRyYWluaW5nIDwtIGlyaXNbaW5kPT0xLCAxOjRdXG5cbiMgSW5zcGVjdCB0cmFpbmluZyBzZXRcbmhlYWQoaXJpcy50cmFpbmluZylcblxuIyBDb21wb3NlIHRlc3Qgc2V0XG5pcmlzLnRlc3QgPC0gaXJpc1tpbmQ9PTIsIDE6NF1cblxuIyBJbnNwZWN0IHRlc3Qgc2V0XG5oZWFkKGlyaXMudGVzdCkiLCJzY3QiOiJ0ZXN0X29iamVjdChcImlyaXMudHJhaW5pbmdcIilcbnRlc3RfZnVuY3Rpb24oXCJoZWFkXCIsIGFyZ3M9XCJ4XCIsIGluZGV4PTEpXG50ZXN0X29iamVjdChcImlyaXMudGVzdFwiKVxudGVzdF9mdW5jdGlvbihcImhlYWRcIiwgYXJncz1cInhcIiwgaW5kZXg9MikifQ==

Ten en cuenta que, además de las proporciones de 2/3 y 1/3 especificadas anteriormente, no tienes en cuenta todos los atributos para formar los conjuntos de entrenamiento y de prueba. En concreto, sólo coges Sepal.Length, Sepal.Width, Petal.Length y Petal.Width. Esto se debe a que en realidad quieres predecir el quinto atributo, Species: es tu variable objetivo. Sin embargo, sí que debes incluirla en el algoritmo KNN, pues de lo contrario nunca habrá predicción para ella.

Por tanto, tienes que almacenar las etiquetas de clase en vectores factoriales y repartirlas entre los conjuntos de entrenamiento y de prueba:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6InNldC5zZWVkKDEyMzQpXG5pbmQgPC0gc2FtcGxlKDIsIG5yb3coaXJpcyksIHJlcGxhY2U9VFJVRSwgcHJvYj1jKDAuNjcsIDAuMzMpKSIsInNhbXBsZSI6IiMgQ29tcG9zZSBgaXJpc2AgdHJhaW5pbmcgbGFiZWxzXG5pcmlzLnRyYWluTGFiZWxzIDwtIGlyaXNbaW5kPT0xLDVdXG5cbiMgSW5zcGVjdCByZXN1bHRcbnByaW50KGlyaXMudHJhaW5MYWJlbHMpXG5cbiMgQ29tcG9zZSBgaXJpc2AgdGVzdCBsYWJlbHNcbmlyaXMudGVzdExhYmVscyA8LSBpcmlzW2luZD09MiwgNV1cblxuIyBJbnNwZWN0IHJlc3VsdFxucHJpbnQoaXJpcy50ZXN0TGFiZWxzKSIsInNvbHV0aW9uIjoiIyBDb21wb3NlIGBpcmlzYCB0cmFpbmluZyBsYWJlbHNcbmlyaXMudHJhaW5MYWJlbHMgPC0gaXJpc1tpbmQ9PTEsNV1cblxuIyBJbnNwZWN0IHJlc3VsdFxucHJpbnQoaXJpcy50cmFpbkxhYmVscylcblxuIyBDb21wb3NlIGBpcmlzYCB0ZXN0IGxhYmVsc1xuaXJpcy50ZXN0TGFiZWxzIDwtIGlyaXNbaW5kPT0yLCA1XVxuXG4jIEluc3BlY3QgcmVzdWx0XG5wcmludChpcmlzLnRlc3RMYWJlbHMpIiwic2N0IjoidGVzdF9vYmplY3QoXCJpcmlzLnRyYWluTGFiZWxzXCIpXG50ZXN0X2Z1bmN0aW9uKFwicHJpbnRcIiwgYXJncz1cInhcIiwgaW5kZXg9MSlcbnRlc3Rfb2JqZWN0KFwiaXJpcy50ZXN0TGFiZWxzXCIpXG50ZXN0X2Z1bmN0aW9uKFwicHJpbnRcIiwgYXJncz1cInhcIiwgaW5kZXg9MikifQ==

Sexto paso. El modelo KNN real

Construir tu clasificador

Después de todos estos pasos de preparación, te has asegurado de que todos tus datos conocidos (de entrenamiento) están almacenados. Hasta ese momento no se había realizado ningún modelo ni aprendizaje. Ahora quieres encontrar los k vecinos más próximos de tu conjunto de entrenamiento.

Una forma sencilla de realizar estos dos pasos es utilizar la función knn(), que utiliza la medida de distancia euclidiana para encontrar los k vecinos más próximos a tu nueva instancia desconocida. Aquí, el parámetro k es uno que tú mismo estableces.

Como ya se ha dicho, las nuevas instancias se clasifican teniendo en cuenta el voto mayoritario o ponderado. En caso de clasificación, el punto de datos con la puntuación más alta gana la batalla y la instancia desconocida recibe la etiqueta de ese punto de datos ganador. Si hay la misma cantidad de ganadores, la clasificación se realiza al azar.

Nota: el parámetro k suele ser un número impar para evitar empates en las puntuaciones de las votaciones.

Para construir tu clasificador, tienes que tomar la función knn() y simplemente añadirle algunos argumentos, como en este ejemplo:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoY2xhc3MpXG5zZXQuc2VlZCgxMjM0KVxuaW5kIDwtIHNhbXBsZSgyLCBucm93KGlyaXMpLCByZXBsYWNlPVRSVUUsIHByb2I9YygwLjY3LCAwLjMzKSlcbmlyaXMudHJhaW5pbmcgPC0gaXJpc1tpbmQ9PTEsIDE6NF1cbmlyaXMudGVzdCA8LSBpcmlzW2luZD09MiwgMTo0XVxuaXJpcy50cmFpbkxhYmVscyA8LSBpcmlzW2luZD09MSw1XSIsInNhbXBsZSI6IiMgQnVpbGQgdGhlIG1vZGVsXG5pcmlzX3ByZWQgPC0gLi4uKHRyYWluID0gaXJpcy50cmFpbmluZywgdGVzdCA9IGlyaXMudGVzdCwgY2wgPSBpcmlzLnRyYWluTGFiZWxzLCBrPTMpXG5cbiMgSW5zcGVjdCBgaXJpc19wcmVkYFxuLi4uLi4uLi4uIiwic29sdXRpb24iOiIjIEJ1aWxkIHRoZSBtb2RlbFxuaXJpc19wcmVkIDwtIGtubih0cmFpbiA9IGlyaXMudHJhaW5pbmcsIHRlc3QgPSBpcmlzLnRlc3QsIGNsID0gaXJpcy50cmFpbkxhYmVscywgaz0zKVxuXG4jIEluc3BlY3QgYGlyaXNfcHJlZGBcbmlyaXNfcHJlZCIsInNjdCI6InRlc3RfZnVuY3Rpb24oXCJrbm5cIiwgYXJncz1jKFwidHJhaW5cIiwgXCJ0ZXN0XCIsIFwiY2xcIiwgXCJrXCIpKVxudGVzdF9vdXRwdXRfY29udGFpbnMoXCJpcmlzX3ByZWRcIiwgaW5jb3JyZWN0X21zZz1cIkRpZCB5b3UgaW5zcGVjdCBgaXJpc19wcmVkYD9cIilcbnN1Y2Nlc3NfbXNnKFwiQ29uZ3JhdHMhIFlvdSd2ZSBzdWNjZXNzZnVsbHkgYnVpbHQgeW91ciBmaXJzdCBtYWNo

Almacena en iris_pred la función knn() que toma como argumentos el conjunto de entrenamiento, el conjunto de prueba, las etiquetas de entrenamiento y la cantidad de vecinos que quieres encontrar con este algoritmo. El resultado de esta función es un vector factorial con las clases predichas para cada fila de los datos de prueba.

Ten en cuenta que no debes insertar las etiquetas de prueba: ¡se utilizarán para ver si tu modelo es bueno prediciendo las clases reales de tus instancias!

Verás que al inspeccionar el resultado, iris_pred, obtendrás el vector factorial con las clases predichas para cada fila de los datos de prueba.

Paso 7. Evaluación de tu Modelo

Un siguiente paso esencial en el aprendizaje automático es la evaluación del rendimiento de tu modelo. En otras palabras, quieres analizar el grado de corrección de las predicciones del modelo.

Para una visión más abstracta, puedes limitarte a comparar los resultados de iris_pred con las etiquetas de prueba que habías definido anteriormente:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoY2xhc3MpXG5zZXQuc2VlZCgxMjM0KVxuaW5kIDwtIHNhbXBsZSgyLCBucm93KGlyaXMpLCByZXBsYWNlPVRSVUUsIHByb2I9YygwLjY3LCAwLjMzKSlcbmlyaXMudHJhaW5pbmcgPC0gaXJpc1tpbmQ9PTEsIDE6NF1cbmlyaXMudGVzdCA8LSBpcmlzW2luZD09MiwgMTo0XVxuaXJpcy50cmFpbkxhYmVscyA8LSBpcmlzW2luZD09MSw1XVxuaXJpcy50ZXN0TGFiZWxzIDwtIGlyaXNbaW5kPT0yLCA1XVxuaXJpc19wcmVkIDwtIGtubih0cmFpbiA9IGlyaXMudHJhaW5pbmcsIHRlc3QgPSBpcmlzLnRlc3QsIGNsID0gaXJpcy50cmFpbkxhYmVscywgaz0zKSIsInNhbXBsZSI6IiMgUHV0IGBpcmlzLnRlc3RMYWJlbHNgIGluIGEgZGF0YSBmcmFtZVxuaXJpc1Rlc3RMYWJlbHMgPC0gZGF0YS5mcmFtZSguLi4uLi4uLi4uLi4uLi4uKVxuXG4jIE1lcmdlIGBpcmlzX3ByZWRgIGFuZCBgaXJpcy50ZXN0TGFiZWxzYCBcbm1lcmdlIDwtIGRhdGEuZnJhbWUoLi4uLi4uLi4uLCAuLi4uLi4uLi4uLi4uLi4pXG5cbiMgU3BlY2lmeSBjb2x1bW4gbmFtZXMgZm9yIGBtZXJnZWBcbm5hbWVzKC4uLi4uKSA8LSBjKFwiUHJlZGljdGVkIFNwZWNpZXNcIiwgXCJPYnNlcnZlZCBTcGVjaWVzXCIpXG5cbiMgSW5zcGVjdCBgbWVyZ2VgIFxubWVyZ2UiLCJzb2x1dGlvbiI6IiMgUHV0IGBpcmlzLnRlc3RMYWJlbHNgIGluIGEgZGF0YSBmcmFtZVxuaXJpc1Rlc3RMYWJlbHMgPC0gZGF0YS5mcmFtZShp

Ves que el modelo hace predicciones razonablemente precisas, con la excepción de una clasificación errónea en la fila 29, donde se predijo "Versicolor" mientras que la etiqueta de prueba es "Virginica".

Esto ya es un indicio del rendimiento de tu modelo, pero quizá quieras profundizar aún más en tu análisis. Para ello, puedes importar el paquete gmodels:

install.packages("package name")

Sin embargo, si ya has instalado este paquete, puedes introducir simplemente

library(gmodels)

Luego puedes hacer una tabulación cruzada o una tabla de contingencia. Este tipo de tabla se utiliza a menudo para comprender la relación entre dos variables. En este caso, quieres entender cómo las clases de tus datos de prueba, almacenados en iris.testLabels se relacionan con tu modelo que está almacenado en iris_pred:

CrossTable(x = iris.testLabels, y = iris_pred, prop.chisq=FALSE)

Iris de estabilidad cruzada knn

Ten en cuenta que el último argumento prop.chisq indica si se incluye o no la contribución chi-cuadrado de cada celda. El estadístico chi-cuadrado es la suma de las contribuciones de cada una de las celdas individuales y se utiliza para decidir si la diferencia entre los valores observados y los esperados es significativa.

A partir de esta tabla, puedes deducir el número de predicciones correctas e incorrectas: una instancia del conjunto de pruebas fue etiquetada Versicolor por el modelo, mientras que en realidad era una flor de la especie Virginica. Puedes verlo en la primera fila de la especie "Virginica" en la columna iris.testLabels. En todos los demás casos, se hicieron predicciones correctas. Puedes concluir que el rendimiento del modelo es suficientemente bueno y que no necesitas mejorarlo.

Aprende Python para la Ciencia de Datos con DataCamp

Aprendizaje automático en R con caret

En las secciones anteriores, te has iniciado en el aprendizaje supervisado en R mediante el algoritmo KNN. Como no habrás visto antes, el aprendizaje automático en R puede llegar a ser realmente complejo, ya que hay varios algoritmos con varias sintaxis, diferentes parámetros, etc. Quizá estés de acuerdo conmigo cuando digo que recordar los diferentes nombres de paquetes para cada algoritmo puede resultar bastante difícil o que aplicar la sintaxis para cada algoritmo específico es demasiado.

Ahí es donde el paquete caret puede resultarte útil: es la abreviatura de "Formación en Clasificación y Regresión" y ofrece todo lo que necesitas saber para resolver problemas de aprendizaje automático supervisado: proporciona una interfaz uniforme para un montón de algoritmos de aprendizaje automático. ¡Si estás un poco familiarizado con el aprendizaje automático en Python, puede que veas similitudes con scikit-learn!

A continuación, seguirás los pasos descritos anteriormente, pero esta vez utilizarás caret para clasificar tus datos. Ten en cuenta que ya has hecho mucho trabajo si has seguido los pasos tal y como se han descrito anteriormente: ya tienes tus datos, los has explorado, has preparado tu espacio de trabajo, etc. ¡Ahora es el momento de preprocesar tus datos con caret!

Como ya has hecho antes, puedes estudiar el efecto de la normalización, pero esto lo verás más adelante en el tutorial.

¡Ya sabes lo que viene después! Vamos a dividir los datos en un conjunto de entrenamiento y otro de prueba. En este caso, sin embargo, manejas las cosas de forma un poco diferente: divides los datos basándote en las etiquetas que encuentras en iris$Species. Además, en este caso la proporción se fija en 75-25 para los conjuntos de entrenamiento y de prueba.

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoY2FyZXQpXG5zZXQuc2VlZCgxMjM0KSIsInNhbXBsZSI6IiMgQ3JlYXRlIGluZGV4IHRvIHNwbGl0IGJhc2VkIG9uIGxhYmVscyAgXG5pbmRleCA8LSBjcmVhdGVEYXRhUGFydGl0aW9uKGlyaXMkU3BlY2llcywgcD0wLjc1LCBsaXN0PUZBTFNFKVxuXG4jIFN1YnNldCB0cmFpbmluZyBzZXQgd2l0aCBpbmRleFxuaXJpcy50cmFpbmluZyA8LSBpcmlzWy4uLi4uLi4sXVxuXG4jIFN1YnNldCB0ZXN0IHNldCB3aXRoIGluZGV4XG5pcmlzLnRlc3QgPC0gaXJpc1stLi4uLi4uLi4uLF0iLCJzb2x1dGlvbiI6IiMgQ3JlYXRlIGluZGV4IHRvIHNwbGl0IGJhc2VkIG9uIGxhYmVscyAgXG5pbmRleCA8LSBjcmVhdGVEYXRhUGFydGl0aW9uKGlyaXMkU3BlY2llcywgcD0wLjc1LCBsaXN0PUZBTFNFKVxuXG4jIFN1YnNldCB0cmFpbmluZyBzZXQgd2l0aCBpbmRleFxuaXJpcy50cmFpbmluZyA8LSBpcmlzW2luZGV4LF1cblxuIyBTdWJzZXQgdGVzdCBzZXQgd2l0aCBpbmRleFxuaXJpcy50ZXN0IDwtIGlyaXNbLWluZGV4LF0iLCJzY3QiOiJ0ZXN0X29iamVjdChcImluZGV4XCIpXG50ZXN0X29iamVjdChcImlyaXMudHJhaW5pbmdcIilcbnRlc3Rfb2JqZWN0KFwiaXJpcy50ZXN0XCIpXG5zdWNjZXNzX21zZyhcIkF3ZXNvbWUhIFdlbGwgZG9uZSFcIikifQ==

¡Ya estás listo para ir a entrenar modelos! Pero, como recordarás, caret es un proyecto extremadamente grande que incluye muchos algoritmos. Si tienes dudas sobre qué algoritmos se incluyen en el proyecto, puedes obtener una lista de todos ellos. Saca la lista ejecutando names(getModelInfo()), tal y como demuestra el fragmento de código siguiente. A continuación, elige un algoritmo y entrena un modelo con la función train():

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoY2FyZXQpXG5zZXQuc2VlZCgxMjM0KVxuaW5kZXggPC0gY3JlYXRlRGF0YVBhcnRpdGlvbihpcmlzJFNwZWNpZXMsIHA9MC43NSwgbGlzdD1GQUxTRSlcbmlyaXMudHJhaW5pbmcgPC0gaXJpc1tpbmRleCxdXG5pcmlzLnRlc3QgPC0gaXJpc1staW5kZXgsXSIsInNhbXBsZSI6IiMgT3ZlcnZpZXcgb2YgYWxnb3Mgc3VwcG9ydGVkIGJ5IGNhcmV0XG5uYW1lcyhnZXRNb2RlbEluZm8oKSlcblxuIyBUcmFpbiBhIG1vZGVsXG5tb2RlbF9rbm4gPC0gdHJhaW4oaXJpcy50cmFpbmluZ1ssIDE6NF0sIGlyaXMudHJhaW5pbmdbLCA1XSwgbWV0aG9kPSdrbm4nKSJ9

Ten en cuenta que hacer otros modelos es extremadamente sencillo cuando has llegado hasta aquí; sólo tienes que cambiar el argumento method, como en este ejemplo:

model_cart <- train(iris.training[, 1:4], iris.training[, 5], method='rpart2')

Ahora que has entrenado tu modelo, es hora de predecir las etiquetas del conjunto de prueba que acabas de hacer y evaluar cómo le ha ido al modelo con tus datos:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoY2FyZXQpXG5zZXQuc2VlZCgxMjM0KVxuaW5kZXggPC0gY3JlYXRlRGF0YVBhcnRpdGlvbihpcmlzJFNwZWNpZXMsIHA9MC43NSwgbGlzdD1GQUxTRSlcbmlyaXMudHJhaW5pbmcgPC0gaXJpc1tpbmRleCxdXG5pcmlzLnRlc3QgPC0gaXJpc1staW5kZXgsXVxubW9kZWxfa25uIDwtIHRyYWluKGlyaXMudHJhaW5pbmdbLCAxOjRdLCBpcmlzLnRyYWluaW5nWywgNV0sIG1ldGhvZD0na25uJykiLCJzYW1wbGUiOiIjIFByZWRpY3QgdGhlIGxhYmVscyBvZiB0aGUgdGVzdCBzZXRcbnByZWRpY3Rpb25zPC1wcmVkaWN0KG9iamVjdD1tb2RlbF9rbm4saXJpcy50ZXN0WywxOjRdKVxuXG4jIEV2YWx1YXRlIHRoZSBwcmVkaWN0aW9uc1xudGFibGUocHJlZGljdGlvbnMpXG5cbiMgQ29uZnVzaW9uIG1hdHJpeCBcbmNvbmZ1c2lvbk1hdHJpeChwcmVkaWN0aW9ucyxpcmlzLnRlc3RbLDVdKSIsInNvbHV0aW9uIjoiIyBQcmVkaWN0IHRoZSBsYWJlbHMgb2YgdGhlIHRlc3Qgc2V0XG5wcmVkaWN0aW9uczwtcHJlZGljdC50cmFpbihvYmplY3Q9bW9kZWxfa25uLGlyaXMudGVzdFssMTo0XSwgdHlwZT1cInJhd1wiKVxuXG4jIEV2YWx1YXRlIHRoZSBwcmVkaWN0aW9uc1xudGFibGUocHJlZGljdGlvbnMpXG5cbiMgQ29uZnVzaW9uIG1hdHJpeCBcbmNvbmZ1c2lvbk1hdHJpeChwcmVkaWN0aW9ucyxpcmlzLnRlc3RbLDVdKSIsInNjdCI6InRlc3Rfb2JqZWN0KFwicHJlZGljdGlvbnNcIilc

Además, puedes intentar realizar la misma prueba que antes, para examinar el efecto del preprocesamiento, como el escalado y el centrado, en tu modelo. Ejecuta el siguiente fragmento de código:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoY2FyZXQpXG5zZXQuc2VlZCgxMjM0KVxuaW5kZXggPC0gY3JlYXRlRGF0YVBhcnRpdGlvbihpcmlzJFNwZWNpZXMsIHA9MC43NSwgbGlzdD1GQUxTRSlcbmlyaXMudHJhaW5pbmcgPC0gaXJpc1tpbmRleCxdXG5pcmlzLnRlc3QgPC0gaXJpc1staW5kZXgsXSIsInNhbXBsZSI6IiMgVHJhaW4gdGhlIG1vZGVsIHdpdGggcHJlcHJvY2Vzc2luZ1xubW9kZWxfa25uIDwtIHRyYWluKGlyaXMudHJhaW5pbmdbLCAxOjRdLCBpcmlzLnRyYWluaW5nWywgNV0sIG1ldGhvZD0na25uJywgcHJlUHJvY2Vzcz1jKFwiY2VudGVyXCIsIFwic2NhbGVcIikpXG5cbiMgUHJlZGljdCB2YWx1ZXNcbnByZWRpY3Rpb25zPC1wcmVkaWN0LnRyYWluKG9iamVjdD1tb2RlbF9rbm4saXJpcy50ZXN0WywxOjRdLCB0eXBlPVwicmF3XCIpXG5cbiMgQ29uZnVzaW9uIG1hdHJpeFxuY29uZnVzaW9uTWF0cml4KHByZWRpY3Rpb25zLGlyaXMudGVzdFssNV0pIiwic29sdXRpb24iOiIjIFRyYWluIHRoZSBtb2RlbCB3aXRoIHByZXByb2Nlc3Npbmdcbm1vZGVsX2tubiA8LSB0cmFpbihpcmlzLnRyYWluaW5nWywgMTo0XSwgaXJpcy50cmFpbmluZ1ssIDVdLCBtZXRob2Q9J2tubicsIHByZVByb2Nlc3M9YyhcImNlbnRlclwiLCBcInNjYWxlXCIpKVxuXG4jIFByZWRpY3QgdmFsdWVzXG5wcmVkaWN0aW9uczwtcHJlZGljdC50cmFpbihvYmplY3Q9bW9kZWxfa25uLGlyaXMudGVzdFssMTo0XSwgdHlwZT1cInJh

Pasar al Big Data

¡Enhorabuena! ¡Has superado este tutorial!

Este tutorial trataba principalmente de realizar el algoritmo básico de aprendizaje automático KNN con la ayuda de R. El conjunto de datos Iris que se utilizó era pequeño y generalizable; no sólo has visto cómo puedes realizar todos los pasos por ti mismo, sino que también has visto cómo puedes utilizar fácilmente una interfaz uniforme, como la que ofrece caret, para poner en marcha tu aprendizaje automático.

¡Pero puedes hacer mucho más!

Si has experimentado lo suficiente con los conceptos básicos presentados en este tutorial y con otros algoritmos de aprendizaje automático, puede que te resulte interesante profundizar en R y en el análisis de datos.

Temas

Cursos R

Certificación disponible

Course

Introducción a R

4 hr
2.7M
Domina los fundamentos del análisis de datos en R, incluyendo vectores, listas y marcos de datos, y practica R con conjuntos de datos reales.
See DetailsRight Arrow
Start Course
Ver másRight Arrow