Menu iconMenu icon
Aprendizaje automático con Python

Capítulo 4: Aprendizaje Supervisado

4.2 Técnicas de Clasificación

Después de explorar el análisis de regresión, ahora nos adentraremos en otra área esencial del aprendizaje supervisado: la clasificación. La clasificación es una técnica importante en el aprendizaje automático y la ciencia de datos donde categorizamos datos en un número dado de clases. Es un enfoque común utilizado en varios campos como finanzas, medicina e ingeniería.

En la clasificación, podemos utilizar varios algoritmos como Árboles de Decisión, Bosques Aleatorios, Naive Bayes y Máquinas de Vectores de Soporte (SVM). Estos algoritmos funcionan identificando patrones en los datos y luego utilizando esos patrones para predecir la clase de nuevos datos.

El objetivo principal de un problema de clasificación es identificar la categoría/clase a la que pertenecerá un nuevo dato. Esto se puede hacer entrenando el modelo con un conjunto de datos con clases conocidas y luego probándolo con un nuevo conjunto de datos. Este proceso implica medir el rendimiento del modelo, como la precisión, la precisión, la exhaustividad y la puntuación F1.

Además, la clasificación tiene varias aplicaciones en el mundo real, como la filtración de correos electrónicos no deseados, el reconocimiento de imágenes, la detección de fraudes y el análisis de sentimientos. Al comprender los fundamentos de la clasificación, podemos aplicarlo a varios escenarios y desarrollar modelos más sólidos y precisos.

Exploremos algunas de las técnicas de clasificación más comúnmente utilizadas.

4.2.1 Regresión Logística

La Regresión Logística es un algoritmo de clasificación ampliamente conocido que se utiliza para predecir un resultado binario, como 1 o 0, Sí o No, o Verdadero o Falso. Se basa en la idea de modelar una variable dependiente binaria utilizando una función logística. Esta función permite que el algoritmo estime la probabilidad de que ocurra un evento, que luego se utiliza para hacer una predicción.

Una de las principales ventajas de la Regresión Logística es que puede manejar tanto variables independientes categóricas como continuas. Esto significa que se puede utilizar para modelar una amplia gama de tipos de datos, incluidos datos demográficos, comportamentales y financieros. Además, se ha demostrado que la Regresión Logística es particularmente eficaz cuando el conjunto de datos es grande y hay muchas variables potenciales que podrían utilizarse para hacer una predicción.

Sin embargo, también existen algunas limitaciones en la Regresión Logística. Por ejemplo, asume que la relación entre las variables independientes y la variable dependiente es lineal, lo que puede no ser siempre el caso. Además, puede ser sensible a valores atípicos y puede tener dificultades cuando existen muchas variables que están altamente correlacionadas entre sí.

A pesar de estas limitaciones, la Regresión Logística sigue siendo un algoritmo popular y ampliamente utilizado debido a su simplicidad y eficacia en muchas aplicaciones del mundo real.

Ejemplo:

Así es como podemos realizar una Regresión Logística utilizando Scikit-learn:

import pandas as pd
from sklearn.linear_model import LogisticRegression

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [0, 0, 0, 1, 1]
})

# Create a LogisticRegression model
model = LogisticRegression()

# Fit the model
model.fit(df[['A']], df['B'])

# Predict new values
predictions = model.predict(df[['A']])

print(predictions)

Salida:

[0.0 0.0 0.0 1.0 1.0]

El código primero importa el módulo sklearn.linear_model como LogisticRegression. Luego, crea un DataFrame llamado df con las columnas A y B y los valores [1, 2, 3, 4, 5], [0, 0, 0, 1, 1], respectivamente. Luego, crea un modelo de Regresión Logística llamado model. El código ajusta el modelo utilizando el método model.fit. El argumento df[['A']] especifica que la variable independiente es la columna A y el argumento df['B'] especifica que la variable dependiente es la columna B. Luego, el código predice nuevos valores utilizando el método model.predict. El argumento df[['A']] especifica que los nuevos valores se basan en la columna A. A continuación, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha aprendido la relación lineal entre las columnas A y B. El modelo ha aprendido que los valores en la columna A están correlacionados con los valores en la columna B. El modelo también ha aprendido que los valores en la columna B son binarios, lo que significa que solo pueden ser 0 o 1. El modelo ha utilizado esta información para predecir los valores en la columna B para los nuevos valores.

4.2.2 Árboles de Decisión

Los Árboles de Decisión son un tipo de algoritmo de Aprendizaje Automático Supervisado que se utiliza para modelar procesos de toma de decisiones. Funcionan dividiendo continuamente los datos en subconjuntos más pequeños de acuerdo con un cierto parámetro, lo que crea una estructura similar a un árbol. El árbol se puede explicar mediante dos entidades, a saber, nodos de decisión y hojas. Los nodos de decisión son los puntos en los que se divide el dato y las hojas son las decisiones o resultados finales del modelo.

Una de las ventajas de utilizar árboles de decisión es que pueden manejar datos tanto categóricos como numéricos, lo que los convierte en una herramienta versátil para una amplia gama de aplicaciones. Además, pueden manejar fácilmente datos faltantes y valores atípicos, lo que los convierte en una opción robusta para conjuntos de datos del mundo real.

Los árboles de decisión también pueden sufrir de sobreajuste, que es cuando el modelo es demasiado complejo y se ajusta demasiado a los datos de entrenamiento, lo que resulta en un mal rendimiento en nuevos datos. Para evitar el sobreajuste, se pueden utilizar técnicas como la poda y establecer un número mínimo de muestras por nodo hoja.

En general, los árboles de decisión son una herramienta poderosa para modelar procesos de toma de decisiones y se pueden aplicar a una variedad de industrias, incluyendo finanzas, atención médica y marketing.

Ejemplo:

Así es como podemos realizar la clasificación con Árboles de Decisión utilizando Scikit-learn:

import pandas as pd
from sklearn.tree import DecisionTreeClassifier

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [0, 0, 0, 1, 1]
})

# Create a DecisionTreeClassifier model
model = DecisionTreeClassifier()

# Fit the model
model.fit(df[['A']], df['B'])

# Predict new values
predictions = model.predict(df[['A']])

print(predictions)

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn.tree como DecisionTreeClassifier. Luego, crea un DataFrame llamado df con las columnas A y B y los valores [1, 2, 3, 4, 5], [0, 0, 0, 1, 1], respectivamente. Luego, crea un modelo de Clasificación de Árbol de Decisión llamado model. El código ajusta el modelo utilizando el método model.fit. El argumento df[['A']] especifica que la variable independiente es la columna A y el argumento df['B'] especifica que la variable dependiente es la columna B. Luego, el código predice nuevos valores utilizando el método model.predict. El argumento df[['A']] especifica que los nuevos valores se basan en la columna A. A continuación, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha aprendido el árbol de decisión que mejor predice la columna B a partir de la columna A. El modelo ha aprendido que los valores en la columna A están correlacionados con los valores en la columna B. El modelo también ha aprendido que los valores en la columna B son binarios, lo que significa que solo pueden ser 0 o 1. El modelo ha utilizado esta información para predecir los valores en la columna B para los nuevos valores.

4.2.3 Máquinas de Soporte Vectorial (SVM)

Las Máquinas de Soporte Vectorial (SVM) son un método de clasificación extremadamente poderoso que ofrece varias ventajas sobre otros algoritmos de aprendizaje automático. Uno de sus principios principales es crear un hiperplano que maximice el margen entre las clases en el espacio de características, lo que permite la clasificación de conjuntos de datos complejos con alta precisión. Además de esto, las SVM pueden manejar fronteras no lineales mediante el uso de una técnica llamada truco del kernel, que mapea los datos a un espacio de mayor dimensión donde pueden separarse más fácilmente.

Las SVM son particularmente útiles en escenarios donde los datos son complejos y ruidosos, ya que son capaces de tratar eficazmente con valores atípicos y clases superpuestas. También son capaces de manejar conjuntos de datos grandes, lo que es esencial en aplicaciones como el reconocimiento de imágenes y el procesamiento del lenguaje natural.

Además, las SVM son altamente personalizables, lo que permite la selección de diferentes funciones de kernel y parámetros para optimizar su rendimiento para una tarea dada. Esta flexibilidad las convierte en una opción popular en una amplia gama de industrias, incluyendo finanzas, atención médica y redes sociales.

En general, la potencia y versatilidad de las SVM las convierten en una herramienta valiosa para cualquier practicante de aprendizaje automático que busque clasificar con precisión conjuntos de datos complejos.

Ejemplo:

import pandas as pd
from sklearn import svm

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [0, 0, 0, 1, 1]
})

# Create a SVM Classifier
clf = svm.SVC(kernel='linear') # Linear Kernel

# Train the model using the training sets
clf.fit(df[['A']], df['B'])

# Predict the response for the dataset
y_pred = clf.predict(df[['A']])

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn como svm. Luego, crea un clasificador de Máquina de Vectores de Soporte (SVM) llamado clf con el parámetro kernel configurado en 'linear'. Esto significa que se utilizará un núcleo lineal para el algoritmo SVM. Luego, el código ajusta el modelo utilizando la función fit() con los datos de entrenamiento df[['A']] y df['B']. Posteriormente, el código predice la respuesta para el conjunto de datos de prueba utilizando la función predict() con los datos de prueba df[['A']]. Finalmente, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha aprendido el límite de decisión lineal que mejor separa las dos clases en los datos de entrenamiento. Luego, el modelo ha utilizado esta información para predecir las clases de los nuevos valores.

4.2.4 Vecinos Más Cercanos (KNN)

K-Nearest Neighbors es un algoritmo utilizado en el aprendizaje automático. Es un algoritmo simple pero poderoso que se utiliza para clasificación y regresión. El algoritmo almacena todos los casos disponibles y clasifica los nuevos casos en función de una medida de similitud, como funciones de distancia.

El algoritmo se basa en la idea de que los puntos de datos que están cerca entre sí en el espacio de características probablemente pertenecen a la misma clase. Esto significa que si un nuevo punto de datos está cerca de un grupo de puntos de datos que pertenecen a una cierta clase, el algoritmo clasificará el nuevo punto de datos como perteneciente a esa clase.

El algoritmo se puede utilizar en una amplia gama de aplicaciones, incluyendo reconocimiento de imágenes, procesamiento de lenguaje natural y sistemas de recomendación.

Ejemplo:

import pandas as pd
from sklearn.neighbors import KNeighborsClassifier

# Assuming df is a DataFrame defined earlier

# Create a KNN Classifier
model = KNeighborsClassifier(n_neighbors=3)

# Train the model using the training sets
model.fit(df[['A']], df['B'])

# Predict the response for test dataset
y_pred = model.predict(df[['A']])

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn.neighbors como KNeighborsClassifier. Luego, crea un clasificador K-Nearest Neighbors (KNN) llamado model con el parámetro n_neighbors configurado en 3. Esto significa que el modelo considerará los 3 vecinos más cercanos al predecir la clase de un nuevo punto de datos. Luego, el código ajusta el modelo utilizando la función fit() con los datos de entrenamiento df[['A']] y df['B']. Posteriormente, el código predice la respuesta para el conjunto de datos de prueba utilizando la función predict() con los datos de prueba df[['A']]. Finalmente, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha encontrado los 3 vecinos más cercanos de cada nuevo punto de datos en los datos de entrenamiento y ha utilizado la clase mayoritaria de esos vecinos para predecir la clase del nuevo punto de datos.

4.2.5 Random Forest

Random Forest es un método popular de aprendizaje conjunto en el aprendizaje automático. Implica la creación de múltiples árboles de decisión basados en submuestras de un conjunto de datos y combinar sus resultados para mejorar la precisión de las predicciones.

Específicamente, en cada división del árbol de decisión, el algoritmo selecciona aleatoriamente un subconjunto de características a considerar, lo que ayuda a reducir la correlación entre los árboles y evitar el sobreajuste. Una vez que se construyen todos los árboles, el algoritmo combina sus predicciones mediante el promedio o el voto, dependiendo del tipo de problema.

Este enfoque tiene varias ventajas, incluida la capacidad de manejar conjuntos de datos de alta dimensión y capturar relaciones no lineales complejas entre características. Además, generalmente es robusto frente a datos ruidosos o faltantes y puede proporcionar estimaciones de la importancia de las características, lo que puede ser útil para la selección de características e interpretación de resultados.

Ejemplo:

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

# Assuming df is a DataFrame defined earlier

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(df[['A']], df['B'], test_size=0.2, random_state=42)

# Create a Random Forest Classifier
clf = RandomForestClassifier(n_estimators=100)

# Train the model using the training sets
clf.fit(X_train, y_train)

# Predict the response for the test dataset
y_pred = clf.predict(X_test)

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn.ensemble como RandomForestClassifier. Luego, crea un clasificador Random Forest llamado clf con el parámetro n_estimators configurado en 100. Esto significa que el modelo creará 100 árboles de decisión y utilizará el voto mayoritario de los árboles para predecir la clase de un nuevo punto de datos. Luego, el código ajusta el modelo utilizando la función fit() con los datos de entrenamiento df[['A']] y df['B']. Posteriormente, el código predice la respuesta para el conjunto de datos de prueba utilizando la función predict() con los datos de prueba df[['A']]. Finalmente, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha creado 100 árboles de decisión y ha utilizado el voto mayoritario de los árboles para predecir la clase de cada nuevo punto de datos. El modelo ha utilizado esta información para predecir las clases de los nuevos valores.

4.2.6 Gradient Boosting

Gradient Boosting es uno de los métodos de conjunto más populares utilizados en el aprendizaje automático. Crea un conjunto de modelos de predicción débiles, generalmente árboles de decisión, para producir un modelo de predicción.

A diferencia de otros métodos de conjunto, Gradient Boosting construye el modelo de manera gradual, lo que significa que entrena cada nuevo modelo para predecir los errores residuales del modelo anterior. Al hacerlo, puede generalizar los resultados optimizando una función de pérdida diferenciable arbitraria. Este método se ha utilizado en una amplia gama de aplicaciones, como reconocimiento de imágenes, reconocimiento de voz y procesamiento de lenguaje natural, entre otras.

También se ha demostrado que funciona bien en situaciones donde los datos son ruidosos o incompletos. En general, Gradient Boosting es una herramienta poderosa que puede ayudar a mejorar la precisión de los modelos de predicción en muchos contextos diferentes.

Ejemplo:

from sklearn.ensemble import GradientBoostingClassifier

# Create a Gradient Boosting Classifier
clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)

# Train the model using the training sets
clf.fit(df[['A']], df['B'])

# Predict the response for test dataset
y_pred = clf.predict(df[['A']])

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn.ensemble como GradientBoostingClassifier. Luego, crea un clasificador de Gradient Boosting llamado clf con los siguientes parámetros:

  • n_estimators: El número de árboles en el conjunto.
  • learning_rate: La tasa de aprendizaje para cada árbol.
  • max_depth: La profundidad máxima de cada árbol.
  • random_state: El estado aleatorio para el modelo.

El código luego ajusta el modelo utilizando la función fit() con los datos de entrenamiento df[['A']] y df['B']. Luego, el código predice la respuesta para el conjunto de datos de prueba utilizando la función predict() con los datos de prueba df[['A']]. Finalmente, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha construido un conjunto de árboles de decisión y ha utilizado las predicciones de cada árbol para predecir la clase de un nuevo punto de datos. El modelo ha utilizado esta información para predecir las clases de los nuevos valores.

4.2 Técnicas de Clasificación

Después de explorar el análisis de regresión, ahora nos adentraremos en otra área esencial del aprendizaje supervisado: la clasificación. La clasificación es una técnica importante en el aprendizaje automático y la ciencia de datos donde categorizamos datos en un número dado de clases. Es un enfoque común utilizado en varios campos como finanzas, medicina e ingeniería.

En la clasificación, podemos utilizar varios algoritmos como Árboles de Decisión, Bosques Aleatorios, Naive Bayes y Máquinas de Vectores de Soporte (SVM). Estos algoritmos funcionan identificando patrones en los datos y luego utilizando esos patrones para predecir la clase de nuevos datos.

El objetivo principal de un problema de clasificación es identificar la categoría/clase a la que pertenecerá un nuevo dato. Esto se puede hacer entrenando el modelo con un conjunto de datos con clases conocidas y luego probándolo con un nuevo conjunto de datos. Este proceso implica medir el rendimiento del modelo, como la precisión, la precisión, la exhaustividad y la puntuación F1.

Además, la clasificación tiene varias aplicaciones en el mundo real, como la filtración de correos electrónicos no deseados, el reconocimiento de imágenes, la detección de fraudes y el análisis de sentimientos. Al comprender los fundamentos de la clasificación, podemos aplicarlo a varios escenarios y desarrollar modelos más sólidos y precisos.

Exploremos algunas de las técnicas de clasificación más comúnmente utilizadas.

4.2.1 Regresión Logística

La Regresión Logística es un algoritmo de clasificación ampliamente conocido que se utiliza para predecir un resultado binario, como 1 o 0, Sí o No, o Verdadero o Falso. Se basa en la idea de modelar una variable dependiente binaria utilizando una función logística. Esta función permite que el algoritmo estime la probabilidad de que ocurra un evento, que luego se utiliza para hacer una predicción.

Una de las principales ventajas de la Regresión Logística es que puede manejar tanto variables independientes categóricas como continuas. Esto significa que se puede utilizar para modelar una amplia gama de tipos de datos, incluidos datos demográficos, comportamentales y financieros. Además, se ha demostrado que la Regresión Logística es particularmente eficaz cuando el conjunto de datos es grande y hay muchas variables potenciales que podrían utilizarse para hacer una predicción.

Sin embargo, también existen algunas limitaciones en la Regresión Logística. Por ejemplo, asume que la relación entre las variables independientes y la variable dependiente es lineal, lo que puede no ser siempre el caso. Además, puede ser sensible a valores atípicos y puede tener dificultades cuando existen muchas variables que están altamente correlacionadas entre sí.

A pesar de estas limitaciones, la Regresión Logística sigue siendo un algoritmo popular y ampliamente utilizado debido a su simplicidad y eficacia en muchas aplicaciones del mundo real.

Ejemplo:

Así es como podemos realizar una Regresión Logística utilizando Scikit-learn:

import pandas as pd
from sklearn.linear_model import LogisticRegression

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [0, 0, 0, 1, 1]
})

# Create a LogisticRegression model
model = LogisticRegression()

# Fit the model
model.fit(df[['A']], df['B'])

# Predict new values
predictions = model.predict(df[['A']])

print(predictions)

Salida:

[0.0 0.0 0.0 1.0 1.0]

El código primero importa el módulo sklearn.linear_model como LogisticRegression. Luego, crea un DataFrame llamado df con las columnas A y B y los valores [1, 2, 3, 4, 5], [0, 0, 0, 1, 1], respectivamente. Luego, crea un modelo de Regresión Logística llamado model. El código ajusta el modelo utilizando el método model.fit. El argumento df[['A']] especifica que la variable independiente es la columna A y el argumento df['B'] especifica que la variable dependiente es la columna B. Luego, el código predice nuevos valores utilizando el método model.predict. El argumento df[['A']] especifica que los nuevos valores se basan en la columna A. A continuación, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha aprendido la relación lineal entre las columnas A y B. El modelo ha aprendido que los valores en la columna A están correlacionados con los valores en la columna B. El modelo también ha aprendido que los valores en la columna B son binarios, lo que significa que solo pueden ser 0 o 1. El modelo ha utilizado esta información para predecir los valores en la columna B para los nuevos valores.

4.2.2 Árboles de Decisión

Los Árboles de Decisión son un tipo de algoritmo de Aprendizaje Automático Supervisado que se utiliza para modelar procesos de toma de decisiones. Funcionan dividiendo continuamente los datos en subconjuntos más pequeños de acuerdo con un cierto parámetro, lo que crea una estructura similar a un árbol. El árbol se puede explicar mediante dos entidades, a saber, nodos de decisión y hojas. Los nodos de decisión son los puntos en los que se divide el dato y las hojas son las decisiones o resultados finales del modelo.

Una de las ventajas de utilizar árboles de decisión es que pueden manejar datos tanto categóricos como numéricos, lo que los convierte en una herramienta versátil para una amplia gama de aplicaciones. Además, pueden manejar fácilmente datos faltantes y valores atípicos, lo que los convierte en una opción robusta para conjuntos de datos del mundo real.

Los árboles de decisión también pueden sufrir de sobreajuste, que es cuando el modelo es demasiado complejo y se ajusta demasiado a los datos de entrenamiento, lo que resulta en un mal rendimiento en nuevos datos. Para evitar el sobreajuste, se pueden utilizar técnicas como la poda y establecer un número mínimo de muestras por nodo hoja.

En general, los árboles de decisión son una herramienta poderosa para modelar procesos de toma de decisiones y se pueden aplicar a una variedad de industrias, incluyendo finanzas, atención médica y marketing.

Ejemplo:

Así es como podemos realizar la clasificación con Árboles de Decisión utilizando Scikit-learn:

import pandas as pd
from sklearn.tree import DecisionTreeClassifier

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [0, 0, 0, 1, 1]
})

# Create a DecisionTreeClassifier model
model = DecisionTreeClassifier()

# Fit the model
model.fit(df[['A']], df['B'])

# Predict new values
predictions = model.predict(df[['A']])

print(predictions)

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn.tree como DecisionTreeClassifier. Luego, crea un DataFrame llamado df con las columnas A y B y los valores [1, 2, 3, 4, 5], [0, 0, 0, 1, 1], respectivamente. Luego, crea un modelo de Clasificación de Árbol de Decisión llamado model. El código ajusta el modelo utilizando el método model.fit. El argumento df[['A']] especifica que la variable independiente es la columna A y el argumento df['B'] especifica que la variable dependiente es la columna B. Luego, el código predice nuevos valores utilizando el método model.predict. El argumento df[['A']] especifica que los nuevos valores se basan en la columna A. A continuación, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha aprendido el árbol de decisión que mejor predice la columna B a partir de la columna A. El modelo ha aprendido que los valores en la columna A están correlacionados con los valores en la columna B. El modelo también ha aprendido que los valores en la columna B son binarios, lo que significa que solo pueden ser 0 o 1. El modelo ha utilizado esta información para predecir los valores en la columna B para los nuevos valores.

4.2.3 Máquinas de Soporte Vectorial (SVM)

Las Máquinas de Soporte Vectorial (SVM) son un método de clasificación extremadamente poderoso que ofrece varias ventajas sobre otros algoritmos de aprendizaje automático. Uno de sus principios principales es crear un hiperplano que maximice el margen entre las clases en el espacio de características, lo que permite la clasificación de conjuntos de datos complejos con alta precisión. Además de esto, las SVM pueden manejar fronteras no lineales mediante el uso de una técnica llamada truco del kernel, que mapea los datos a un espacio de mayor dimensión donde pueden separarse más fácilmente.

Las SVM son particularmente útiles en escenarios donde los datos son complejos y ruidosos, ya que son capaces de tratar eficazmente con valores atípicos y clases superpuestas. También son capaces de manejar conjuntos de datos grandes, lo que es esencial en aplicaciones como el reconocimiento de imágenes y el procesamiento del lenguaje natural.

Además, las SVM son altamente personalizables, lo que permite la selección de diferentes funciones de kernel y parámetros para optimizar su rendimiento para una tarea dada. Esta flexibilidad las convierte en una opción popular en una amplia gama de industrias, incluyendo finanzas, atención médica y redes sociales.

En general, la potencia y versatilidad de las SVM las convierten en una herramienta valiosa para cualquier practicante de aprendizaje automático que busque clasificar con precisión conjuntos de datos complejos.

Ejemplo:

import pandas as pd
from sklearn import svm

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [0, 0, 0, 1, 1]
})

# Create a SVM Classifier
clf = svm.SVC(kernel='linear') # Linear Kernel

# Train the model using the training sets
clf.fit(df[['A']], df['B'])

# Predict the response for the dataset
y_pred = clf.predict(df[['A']])

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn como svm. Luego, crea un clasificador de Máquina de Vectores de Soporte (SVM) llamado clf con el parámetro kernel configurado en 'linear'. Esto significa que se utilizará un núcleo lineal para el algoritmo SVM. Luego, el código ajusta el modelo utilizando la función fit() con los datos de entrenamiento df[['A']] y df['B']. Posteriormente, el código predice la respuesta para el conjunto de datos de prueba utilizando la función predict() con los datos de prueba df[['A']]. Finalmente, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha aprendido el límite de decisión lineal que mejor separa las dos clases en los datos de entrenamiento. Luego, el modelo ha utilizado esta información para predecir las clases de los nuevos valores.

4.2.4 Vecinos Más Cercanos (KNN)

K-Nearest Neighbors es un algoritmo utilizado en el aprendizaje automático. Es un algoritmo simple pero poderoso que se utiliza para clasificación y regresión. El algoritmo almacena todos los casos disponibles y clasifica los nuevos casos en función de una medida de similitud, como funciones de distancia.

El algoritmo se basa en la idea de que los puntos de datos que están cerca entre sí en el espacio de características probablemente pertenecen a la misma clase. Esto significa que si un nuevo punto de datos está cerca de un grupo de puntos de datos que pertenecen a una cierta clase, el algoritmo clasificará el nuevo punto de datos como perteneciente a esa clase.

El algoritmo se puede utilizar en una amplia gama de aplicaciones, incluyendo reconocimiento de imágenes, procesamiento de lenguaje natural y sistemas de recomendación.

Ejemplo:

import pandas as pd
from sklearn.neighbors import KNeighborsClassifier

# Assuming df is a DataFrame defined earlier

# Create a KNN Classifier
model = KNeighborsClassifier(n_neighbors=3)

# Train the model using the training sets
model.fit(df[['A']], df['B'])

# Predict the response for test dataset
y_pred = model.predict(df[['A']])

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn.neighbors como KNeighborsClassifier. Luego, crea un clasificador K-Nearest Neighbors (KNN) llamado model con el parámetro n_neighbors configurado en 3. Esto significa que el modelo considerará los 3 vecinos más cercanos al predecir la clase de un nuevo punto de datos. Luego, el código ajusta el modelo utilizando la función fit() con los datos de entrenamiento df[['A']] y df['B']. Posteriormente, el código predice la respuesta para el conjunto de datos de prueba utilizando la función predict() con los datos de prueba df[['A']]. Finalmente, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha encontrado los 3 vecinos más cercanos de cada nuevo punto de datos en los datos de entrenamiento y ha utilizado la clase mayoritaria de esos vecinos para predecir la clase del nuevo punto de datos.

4.2.5 Random Forest

Random Forest es un método popular de aprendizaje conjunto en el aprendizaje automático. Implica la creación de múltiples árboles de decisión basados en submuestras de un conjunto de datos y combinar sus resultados para mejorar la precisión de las predicciones.

Específicamente, en cada división del árbol de decisión, el algoritmo selecciona aleatoriamente un subconjunto de características a considerar, lo que ayuda a reducir la correlación entre los árboles y evitar el sobreajuste. Una vez que se construyen todos los árboles, el algoritmo combina sus predicciones mediante el promedio o el voto, dependiendo del tipo de problema.

Este enfoque tiene varias ventajas, incluida la capacidad de manejar conjuntos de datos de alta dimensión y capturar relaciones no lineales complejas entre características. Además, generalmente es robusto frente a datos ruidosos o faltantes y puede proporcionar estimaciones de la importancia de las características, lo que puede ser útil para la selección de características e interpretación de resultados.

Ejemplo:

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

# Assuming df is a DataFrame defined earlier

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(df[['A']], df['B'], test_size=0.2, random_state=42)

# Create a Random Forest Classifier
clf = RandomForestClassifier(n_estimators=100)

# Train the model using the training sets
clf.fit(X_train, y_train)

# Predict the response for the test dataset
y_pred = clf.predict(X_test)

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn.ensemble como RandomForestClassifier. Luego, crea un clasificador Random Forest llamado clf con el parámetro n_estimators configurado en 100. Esto significa que el modelo creará 100 árboles de decisión y utilizará el voto mayoritario de los árboles para predecir la clase de un nuevo punto de datos. Luego, el código ajusta el modelo utilizando la función fit() con los datos de entrenamiento df[['A']] y df['B']. Posteriormente, el código predice la respuesta para el conjunto de datos de prueba utilizando la función predict() con los datos de prueba df[['A']]. Finalmente, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha creado 100 árboles de decisión y ha utilizado el voto mayoritario de los árboles para predecir la clase de cada nuevo punto de datos. El modelo ha utilizado esta información para predecir las clases de los nuevos valores.

4.2.6 Gradient Boosting

Gradient Boosting es uno de los métodos de conjunto más populares utilizados en el aprendizaje automático. Crea un conjunto de modelos de predicción débiles, generalmente árboles de decisión, para producir un modelo de predicción.

A diferencia de otros métodos de conjunto, Gradient Boosting construye el modelo de manera gradual, lo que significa que entrena cada nuevo modelo para predecir los errores residuales del modelo anterior. Al hacerlo, puede generalizar los resultados optimizando una función de pérdida diferenciable arbitraria. Este método se ha utilizado en una amplia gama de aplicaciones, como reconocimiento de imágenes, reconocimiento de voz y procesamiento de lenguaje natural, entre otras.

También se ha demostrado que funciona bien en situaciones donde los datos son ruidosos o incompletos. En general, Gradient Boosting es una herramienta poderosa que puede ayudar a mejorar la precisión de los modelos de predicción en muchos contextos diferentes.

Ejemplo:

from sklearn.ensemble import GradientBoostingClassifier

# Create a Gradient Boosting Classifier
clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)

# Train the model using the training sets
clf.fit(df[['A']], df['B'])

# Predict the response for test dataset
y_pred = clf.predict(df[['A']])

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn.ensemble como GradientBoostingClassifier. Luego, crea un clasificador de Gradient Boosting llamado clf con los siguientes parámetros:

  • n_estimators: El número de árboles en el conjunto.
  • learning_rate: La tasa de aprendizaje para cada árbol.
  • max_depth: La profundidad máxima de cada árbol.
  • random_state: El estado aleatorio para el modelo.

El código luego ajusta el modelo utilizando la función fit() con los datos de entrenamiento df[['A']] y df['B']. Luego, el código predice la respuesta para el conjunto de datos de prueba utilizando la función predict() con los datos de prueba df[['A']]. Finalmente, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha construido un conjunto de árboles de decisión y ha utilizado las predicciones de cada árbol para predecir la clase de un nuevo punto de datos. El modelo ha utilizado esta información para predecir las clases de los nuevos valores.

4.2 Técnicas de Clasificación

Después de explorar el análisis de regresión, ahora nos adentraremos en otra área esencial del aprendizaje supervisado: la clasificación. La clasificación es una técnica importante en el aprendizaje automático y la ciencia de datos donde categorizamos datos en un número dado de clases. Es un enfoque común utilizado en varios campos como finanzas, medicina e ingeniería.

En la clasificación, podemos utilizar varios algoritmos como Árboles de Decisión, Bosques Aleatorios, Naive Bayes y Máquinas de Vectores de Soporte (SVM). Estos algoritmos funcionan identificando patrones en los datos y luego utilizando esos patrones para predecir la clase de nuevos datos.

El objetivo principal de un problema de clasificación es identificar la categoría/clase a la que pertenecerá un nuevo dato. Esto se puede hacer entrenando el modelo con un conjunto de datos con clases conocidas y luego probándolo con un nuevo conjunto de datos. Este proceso implica medir el rendimiento del modelo, como la precisión, la precisión, la exhaustividad y la puntuación F1.

Además, la clasificación tiene varias aplicaciones en el mundo real, como la filtración de correos electrónicos no deseados, el reconocimiento de imágenes, la detección de fraudes y el análisis de sentimientos. Al comprender los fundamentos de la clasificación, podemos aplicarlo a varios escenarios y desarrollar modelos más sólidos y precisos.

Exploremos algunas de las técnicas de clasificación más comúnmente utilizadas.

4.2.1 Regresión Logística

La Regresión Logística es un algoritmo de clasificación ampliamente conocido que se utiliza para predecir un resultado binario, como 1 o 0, Sí o No, o Verdadero o Falso. Se basa en la idea de modelar una variable dependiente binaria utilizando una función logística. Esta función permite que el algoritmo estime la probabilidad de que ocurra un evento, que luego se utiliza para hacer una predicción.

Una de las principales ventajas de la Regresión Logística es que puede manejar tanto variables independientes categóricas como continuas. Esto significa que se puede utilizar para modelar una amplia gama de tipos de datos, incluidos datos demográficos, comportamentales y financieros. Además, se ha demostrado que la Regresión Logística es particularmente eficaz cuando el conjunto de datos es grande y hay muchas variables potenciales que podrían utilizarse para hacer una predicción.

Sin embargo, también existen algunas limitaciones en la Regresión Logística. Por ejemplo, asume que la relación entre las variables independientes y la variable dependiente es lineal, lo que puede no ser siempre el caso. Además, puede ser sensible a valores atípicos y puede tener dificultades cuando existen muchas variables que están altamente correlacionadas entre sí.

A pesar de estas limitaciones, la Regresión Logística sigue siendo un algoritmo popular y ampliamente utilizado debido a su simplicidad y eficacia en muchas aplicaciones del mundo real.

Ejemplo:

Así es como podemos realizar una Regresión Logística utilizando Scikit-learn:

import pandas as pd
from sklearn.linear_model import LogisticRegression

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [0, 0, 0, 1, 1]
})

# Create a LogisticRegression model
model = LogisticRegression()

# Fit the model
model.fit(df[['A']], df['B'])

# Predict new values
predictions = model.predict(df[['A']])

print(predictions)

Salida:

[0.0 0.0 0.0 1.0 1.0]

El código primero importa el módulo sklearn.linear_model como LogisticRegression. Luego, crea un DataFrame llamado df con las columnas A y B y los valores [1, 2, 3, 4, 5], [0, 0, 0, 1, 1], respectivamente. Luego, crea un modelo de Regresión Logística llamado model. El código ajusta el modelo utilizando el método model.fit. El argumento df[['A']] especifica que la variable independiente es la columna A y el argumento df['B'] especifica que la variable dependiente es la columna B. Luego, el código predice nuevos valores utilizando el método model.predict. El argumento df[['A']] especifica que los nuevos valores se basan en la columna A. A continuación, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha aprendido la relación lineal entre las columnas A y B. El modelo ha aprendido que los valores en la columna A están correlacionados con los valores en la columna B. El modelo también ha aprendido que los valores en la columna B son binarios, lo que significa que solo pueden ser 0 o 1. El modelo ha utilizado esta información para predecir los valores en la columna B para los nuevos valores.

4.2.2 Árboles de Decisión

Los Árboles de Decisión son un tipo de algoritmo de Aprendizaje Automático Supervisado que se utiliza para modelar procesos de toma de decisiones. Funcionan dividiendo continuamente los datos en subconjuntos más pequeños de acuerdo con un cierto parámetro, lo que crea una estructura similar a un árbol. El árbol se puede explicar mediante dos entidades, a saber, nodos de decisión y hojas. Los nodos de decisión son los puntos en los que se divide el dato y las hojas son las decisiones o resultados finales del modelo.

Una de las ventajas de utilizar árboles de decisión es que pueden manejar datos tanto categóricos como numéricos, lo que los convierte en una herramienta versátil para una amplia gama de aplicaciones. Además, pueden manejar fácilmente datos faltantes y valores atípicos, lo que los convierte en una opción robusta para conjuntos de datos del mundo real.

Los árboles de decisión también pueden sufrir de sobreajuste, que es cuando el modelo es demasiado complejo y se ajusta demasiado a los datos de entrenamiento, lo que resulta en un mal rendimiento en nuevos datos. Para evitar el sobreajuste, se pueden utilizar técnicas como la poda y establecer un número mínimo de muestras por nodo hoja.

En general, los árboles de decisión son una herramienta poderosa para modelar procesos de toma de decisiones y se pueden aplicar a una variedad de industrias, incluyendo finanzas, atención médica y marketing.

Ejemplo:

Así es como podemos realizar la clasificación con Árboles de Decisión utilizando Scikit-learn:

import pandas as pd
from sklearn.tree import DecisionTreeClassifier

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [0, 0, 0, 1, 1]
})

# Create a DecisionTreeClassifier model
model = DecisionTreeClassifier()

# Fit the model
model.fit(df[['A']], df['B'])

# Predict new values
predictions = model.predict(df[['A']])

print(predictions)

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn.tree como DecisionTreeClassifier. Luego, crea un DataFrame llamado df con las columnas A y B y los valores [1, 2, 3, 4, 5], [0, 0, 0, 1, 1], respectivamente. Luego, crea un modelo de Clasificación de Árbol de Decisión llamado model. El código ajusta el modelo utilizando el método model.fit. El argumento df[['A']] especifica que la variable independiente es la columna A y el argumento df['B'] especifica que la variable dependiente es la columna B. Luego, el código predice nuevos valores utilizando el método model.predict. El argumento df[['A']] especifica que los nuevos valores se basan en la columna A. A continuación, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha aprendido el árbol de decisión que mejor predice la columna B a partir de la columna A. El modelo ha aprendido que los valores en la columna A están correlacionados con los valores en la columna B. El modelo también ha aprendido que los valores en la columna B son binarios, lo que significa que solo pueden ser 0 o 1. El modelo ha utilizado esta información para predecir los valores en la columna B para los nuevos valores.

4.2.3 Máquinas de Soporte Vectorial (SVM)

Las Máquinas de Soporte Vectorial (SVM) son un método de clasificación extremadamente poderoso que ofrece varias ventajas sobre otros algoritmos de aprendizaje automático. Uno de sus principios principales es crear un hiperplano que maximice el margen entre las clases en el espacio de características, lo que permite la clasificación de conjuntos de datos complejos con alta precisión. Además de esto, las SVM pueden manejar fronteras no lineales mediante el uso de una técnica llamada truco del kernel, que mapea los datos a un espacio de mayor dimensión donde pueden separarse más fácilmente.

Las SVM son particularmente útiles en escenarios donde los datos son complejos y ruidosos, ya que son capaces de tratar eficazmente con valores atípicos y clases superpuestas. También son capaces de manejar conjuntos de datos grandes, lo que es esencial en aplicaciones como el reconocimiento de imágenes y el procesamiento del lenguaje natural.

Además, las SVM son altamente personalizables, lo que permite la selección de diferentes funciones de kernel y parámetros para optimizar su rendimiento para una tarea dada. Esta flexibilidad las convierte en una opción popular en una amplia gama de industrias, incluyendo finanzas, atención médica y redes sociales.

En general, la potencia y versatilidad de las SVM las convierten en una herramienta valiosa para cualquier practicante de aprendizaje automático que busque clasificar con precisión conjuntos de datos complejos.

Ejemplo:

import pandas as pd
from sklearn import svm

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [0, 0, 0, 1, 1]
})

# Create a SVM Classifier
clf = svm.SVC(kernel='linear') # Linear Kernel

# Train the model using the training sets
clf.fit(df[['A']], df['B'])

# Predict the response for the dataset
y_pred = clf.predict(df[['A']])

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn como svm. Luego, crea un clasificador de Máquina de Vectores de Soporte (SVM) llamado clf con el parámetro kernel configurado en 'linear'. Esto significa que se utilizará un núcleo lineal para el algoritmo SVM. Luego, el código ajusta el modelo utilizando la función fit() con los datos de entrenamiento df[['A']] y df['B']. Posteriormente, el código predice la respuesta para el conjunto de datos de prueba utilizando la función predict() con los datos de prueba df[['A']]. Finalmente, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha aprendido el límite de decisión lineal que mejor separa las dos clases en los datos de entrenamiento. Luego, el modelo ha utilizado esta información para predecir las clases de los nuevos valores.

4.2.4 Vecinos Más Cercanos (KNN)

K-Nearest Neighbors es un algoritmo utilizado en el aprendizaje automático. Es un algoritmo simple pero poderoso que se utiliza para clasificación y regresión. El algoritmo almacena todos los casos disponibles y clasifica los nuevos casos en función de una medida de similitud, como funciones de distancia.

El algoritmo se basa en la idea de que los puntos de datos que están cerca entre sí en el espacio de características probablemente pertenecen a la misma clase. Esto significa que si un nuevo punto de datos está cerca de un grupo de puntos de datos que pertenecen a una cierta clase, el algoritmo clasificará el nuevo punto de datos como perteneciente a esa clase.

El algoritmo se puede utilizar en una amplia gama de aplicaciones, incluyendo reconocimiento de imágenes, procesamiento de lenguaje natural y sistemas de recomendación.

Ejemplo:

import pandas as pd
from sklearn.neighbors import KNeighborsClassifier

# Assuming df is a DataFrame defined earlier

# Create a KNN Classifier
model = KNeighborsClassifier(n_neighbors=3)

# Train the model using the training sets
model.fit(df[['A']], df['B'])

# Predict the response for test dataset
y_pred = model.predict(df[['A']])

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn.neighbors como KNeighborsClassifier. Luego, crea un clasificador K-Nearest Neighbors (KNN) llamado model con el parámetro n_neighbors configurado en 3. Esto significa que el modelo considerará los 3 vecinos más cercanos al predecir la clase de un nuevo punto de datos. Luego, el código ajusta el modelo utilizando la función fit() con los datos de entrenamiento df[['A']] y df['B']. Posteriormente, el código predice la respuesta para el conjunto de datos de prueba utilizando la función predict() con los datos de prueba df[['A']]. Finalmente, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha encontrado los 3 vecinos más cercanos de cada nuevo punto de datos en los datos de entrenamiento y ha utilizado la clase mayoritaria de esos vecinos para predecir la clase del nuevo punto de datos.

4.2.5 Random Forest

Random Forest es un método popular de aprendizaje conjunto en el aprendizaje automático. Implica la creación de múltiples árboles de decisión basados en submuestras de un conjunto de datos y combinar sus resultados para mejorar la precisión de las predicciones.

Específicamente, en cada división del árbol de decisión, el algoritmo selecciona aleatoriamente un subconjunto de características a considerar, lo que ayuda a reducir la correlación entre los árboles y evitar el sobreajuste. Una vez que se construyen todos los árboles, el algoritmo combina sus predicciones mediante el promedio o el voto, dependiendo del tipo de problema.

Este enfoque tiene varias ventajas, incluida la capacidad de manejar conjuntos de datos de alta dimensión y capturar relaciones no lineales complejas entre características. Además, generalmente es robusto frente a datos ruidosos o faltantes y puede proporcionar estimaciones de la importancia de las características, lo que puede ser útil para la selección de características e interpretación de resultados.

Ejemplo:

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

# Assuming df is a DataFrame defined earlier

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(df[['A']], df['B'], test_size=0.2, random_state=42)

# Create a Random Forest Classifier
clf = RandomForestClassifier(n_estimators=100)

# Train the model using the training sets
clf.fit(X_train, y_train)

# Predict the response for the test dataset
y_pred = clf.predict(X_test)

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn.ensemble como RandomForestClassifier. Luego, crea un clasificador Random Forest llamado clf con el parámetro n_estimators configurado en 100. Esto significa que el modelo creará 100 árboles de decisión y utilizará el voto mayoritario de los árboles para predecir la clase de un nuevo punto de datos. Luego, el código ajusta el modelo utilizando la función fit() con los datos de entrenamiento df[['A']] y df['B']. Posteriormente, el código predice la respuesta para el conjunto de datos de prueba utilizando la función predict() con los datos de prueba df[['A']]. Finalmente, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha creado 100 árboles de decisión y ha utilizado el voto mayoritario de los árboles para predecir la clase de cada nuevo punto de datos. El modelo ha utilizado esta información para predecir las clases de los nuevos valores.

4.2.6 Gradient Boosting

Gradient Boosting es uno de los métodos de conjunto más populares utilizados en el aprendizaje automático. Crea un conjunto de modelos de predicción débiles, generalmente árboles de decisión, para producir un modelo de predicción.

A diferencia de otros métodos de conjunto, Gradient Boosting construye el modelo de manera gradual, lo que significa que entrena cada nuevo modelo para predecir los errores residuales del modelo anterior. Al hacerlo, puede generalizar los resultados optimizando una función de pérdida diferenciable arbitraria. Este método se ha utilizado en una amplia gama de aplicaciones, como reconocimiento de imágenes, reconocimiento de voz y procesamiento de lenguaje natural, entre otras.

También se ha demostrado que funciona bien en situaciones donde los datos son ruidosos o incompletos. En general, Gradient Boosting es una herramienta poderosa que puede ayudar a mejorar la precisión de los modelos de predicción en muchos contextos diferentes.

Ejemplo:

from sklearn.ensemble import GradientBoostingClassifier

# Create a Gradient Boosting Classifier
clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)

# Train the model using the training sets
clf.fit(df[['A']], df['B'])

# Predict the response for test dataset
y_pred = clf.predict(df[['A']])

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn.ensemble como GradientBoostingClassifier. Luego, crea un clasificador de Gradient Boosting llamado clf con los siguientes parámetros:

  • n_estimators: El número de árboles en el conjunto.
  • learning_rate: La tasa de aprendizaje para cada árbol.
  • max_depth: La profundidad máxima de cada árbol.
  • random_state: El estado aleatorio para el modelo.

El código luego ajusta el modelo utilizando la función fit() con los datos de entrenamiento df[['A']] y df['B']. Luego, el código predice la respuesta para el conjunto de datos de prueba utilizando la función predict() con los datos de prueba df[['A']]. Finalmente, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha construido un conjunto de árboles de decisión y ha utilizado las predicciones de cada árbol para predecir la clase de un nuevo punto de datos. El modelo ha utilizado esta información para predecir las clases de los nuevos valores.

4.2 Técnicas de Clasificación

Después de explorar el análisis de regresión, ahora nos adentraremos en otra área esencial del aprendizaje supervisado: la clasificación. La clasificación es una técnica importante en el aprendizaje automático y la ciencia de datos donde categorizamos datos en un número dado de clases. Es un enfoque común utilizado en varios campos como finanzas, medicina e ingeniería.

En la clasificación, podemos utilizar varios algoritmos como Árboles de Decisión, Bosques Aleatorios, Naive Bayes y Máquinas de Vectores de Soporte (SVM). Estos algoritmos funcionan identificando patrones en los datos y luego utilizando esos patrones para predecir la clase de nuevos datos.

El objetivo principal de un problema de clasificación es identificar la categoría/clase a la que pertenecerá un nuevo dato. Esto se puede hacer entrenando el modelo con un conjunto de datos con clases conocidas y luego probándolo con un nuevo conjunto de datos. Este proceso implica medir el rendimiento del modelo, como la precisión, la precisión, la exhaustividad y la puntuación F1.

Además, la clasificación tiene varias aplicaciones en el mundo real, como la filtración de correos electrónicos no deseados, el reconocimiento de imágenes, la detección de fraudes y el análisis de sentimientos. Al comprender los fundamentos de la clasificación, podemos aplicarlo a varios escenarios y desarrollar modelos más sólidos y precisos.

Exploremos algunas de las técnicas de clasificación más comúnmente utilizadas.

4.2.1 Regresión Logística

La Regresión Logística es un algoritmo de clasificación ampliamente conocido que se utiliza para predecir un resultado binario, como 1 o 0, Sí o No, o Verdadero o Falso. Se basa en la idea de modelar una variable dependiente binaria utilizando una función logística. Esta función permite que el algoritmo estime la probabilidad de que ocurra un evento, que luego se utiliza para hacer una predicción.

Una de las principales ventajas de la Regresión Logística es que puede manejar tanto variables independientes categóricas como continuas. Esto significa que se puede utilizar para modelar una amplia gama de tipos de datos, incluidos datos demográficos, comportamentales y financieros. Además, se ha demostrado que la Regresión Logística es particularmente eficaz cuando el conjunto de datos es grande y hay muchas variables potenciales que podrían utilizarse para hacer una predicción.

Sin embargo, también existen algunas limitaciones en la Regresión Logística. Por ejemplo, asume que la relación entre las variables independientes y la variable dependiente es lineal, lo que puede no ser siempre el caso. Además, puede ser sensible a valores atípicos y puede tener dificultades cuando existen muchas variables que están altamente correlacionadas entre sí.

A pesar de estas limitaciones, la Regresión Logística sigue siendo un algoritmo popular y ampliamente utilizado debido a su simplicidad y eficacia en muchas aplicaciones del mundo real.

Ejemplo:

Así es como podemos realizar una Regresión Logística utilizando Scikit-learn:

import pandas as pd
from sklearn.linear_model import LogisticRegression

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [0, 0, 0, 1, 1]
})

# Create a LogisticRegression model
model = LogisticRegression()

# Fit the model
model.fit(df[['A']], df['B'])

# Predict new values
predictions = model.predict(df[['A']])

print(predictions)

Salida:

[0.0 0.0 0.0 1.0 1.0]

El código primero importa el módulo sklearn.linear_model como LogisticRegression. Luego, crea un DataFrame llamado df con las columnas A y B y los valores [1, 2, 3, 4, 5], [0, 0, 0, 1, 1], respectivamente. Luego, crea un modelo de Regresión Logística llamado model. El código ajusta el modelo utilizando el método model.fit. El argumento df[['A']] especifica que la variable independiente es la columna A y el argumento df['B'] especifica que la variable dependiente es la columna B. Luego, el código predice nuevos valores utilizando el método model.predict. El argumento df[['A']] especifica que los nuevos valores se basan en la columna A. A continuación, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha aprendido la relación lineal entre las columnas A y B. El modelo ha aprendido que los valores en la columna A están correlacionados con los valores en la columna B. El modelo también ha aprendido que los valores en la columna B son binarios, lo que significa que solo pueden ser 0 o 1. El modelo ha utilizado esta información para predecir los valores en la columna B para los nuevos valores.

4.2.2 Árboles de Decisión

Los Árboles de Decisión son un tipo de algoritmo de Aprendizaje Automático Supervisado que se utiliza para modelar procesos de toma de decisiones. Funcionan dividiendo continuamente los datos en subconjuntos más pequeños de acuerdo con un cierto parámetro, lo que crea una estructura similar a un árbol. El árbol se puede explicar mediante dos entidades, a saber, nodos de decisión y hojas. Los nodos de decisión son los puntos en los que se divide el dato y las hojas son las decisiones o resultados finales del modelo.

Una de las ventajas de utilizar árboles de decisión es que pueden manejar datos tanto categóricos como numéricos, lo que los convierte en una herramienta versátil para una amplia gama de aplicaciones. Además, pueden manejar fácilmente datos faltantes y valores atípicos, lo que los convierte en una opción robusta para conjuntos de datos del mundo real.

Los árboles de decisión también pueden sufrir de sobreajuste, que es cuando el modelo es demasiado complejo y se ajusta demasiado a los datos de entrenamiento, lo que resulta en un mal rendimiento en nuevos datos. Para evitar el sobreajuste, se pueden utilizar técnicas como la poda y establecer un número mínimo de muestras por nodo hoja.

En general, los árboles de decisión son una herramienta poderosa para modelar procesos de toma de decisiones y se pueden aplicar a una variedad de industrias, incluyendo finanzas, atención médica y marketing.

Ejemplo:

Así es como podemos realizar la clasificación con Árboles de Decisión utilizando Scikit-learn:

import pandas as pd
from sklearn.tree import DecisionTreeClassifier

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [0, 0, 0, 1, 1]
})

# Create a DecisionTreeClassifier model
model = DecisionTreeClassifier()

# Fit the model
model.fit(df[['A']], df['B'])

# Predict new values
predictions = model.predict(df[['A']])

print(predictions)

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn.tree como DecisionTreeClassifier. Luego, crea un DataFrame llamado df con las columnas A y B y los valores [1, 2, 3, 4, 5], [0, 0, 0, 1, 1], respectivamente. Luego, crea un modelo de Clasificación de Árbol de Decisión llamado model. El código ajusta el modelo utilizando el método model.fit. El argumento df[['A']] especifica que la variable independiente es la columna A y el argumento df['B'] especifica que la variable dependiente es la columna B. Luego, el código predice nuevos valores utilizando el método model.predict. El argumento df[['A']] especifica que los nuevos valores se basan en la columna A. A continuación, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha aprendido el árbol de decisión que mejor predice la columna B a partir de la columna A. El modelo ha aprendido que los valores en la columna A están correlacionados con los valores en la columna B. El modelo también ha aprendido que los valores en la columna B son binarios, lo que significa que solo pueden ser 0 o 1. El modelo ha utilizado esta información para predecir los valores en la columna B para los nuevos valores.

4.2.3 Máquinas de Soporte Vectorial (SVM)

Las Máquinas de Soporte Vectorial (SVM) son un método de clasificación extremadamente poderoso que ofrece varias ventajas sobre otros algoritmos de aprendizaje automático. Uno de sus principios principales es crear un hiperplano que maximice el margen entre las clases en el espacio de características, lo que permite la clasificación de conjuntos de datos complejos con alta precisión. Además de esto, las SVM pueden manejar fronteras no lineales mediante el uso de una técnica llamada truco del kernel, que mapea los datos a un espacio de mayor dimensión donde pueden separarse más fácilmente.

Las SVM son particularmente útiles en escenarios donde los datos son complejos y ruidosos, ya que son capaces de tratar eficazmente con valores atípicos y clases superpuestas. También son capaces de manejar conjuntos de datos grandes, lo que es esencial en aplicaciones como el reconocimiento de imágenes y el procesamiento del lenguaje natural.

Además, las SVM son altamente personalizables, lo que permite la selección de diferentes funciones de kernel y parámetros para optimizar su rendimiento para una tarea dada. Esta flexibilidad las convierte en una opción popular en una amplia gama de industrias, incluyendo finanzas, atención médica y redes sociales.

En general, la potencia y versatilidad de las SVM las convierten en una herramienta valiosa para cualquier practicante de aprendizaje automático que busque clasificar con precisión conjuntos de datos complejos.

Ejemplo:

import pandas as pd
from sklearn import svm

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [0, 0, 0, 1, 1]
})

# Create a SVM Classifier
clf = svm.SVC(kernel='linear') # Linear Kernel

# Train the model using the training sets
clf.fit(df[['A']], df['B'])

# Predict the response for the dataset
y_pred = clf.predict(df[['A']])

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn como svm. Luego, crea un clasificador de Máquina de Vectores de Soporte (SVM) llamado clf con el parámetro kernel configurado en 'linear'. Esto significa que se utilizará un núcleo lineal para el algoritmo SVM. Luego, el código ajusta el modelo utilizando la función fit() con los datos de entrenamiento df[['A']] y df['B']. Posteriormente, el código predice la respuesta para el conjunto de datos de prueba utilizando la función predict() con los datos de prueba df[['A']]. Finalmente, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha aprendido el límite de decisión lineal que mejor separa las dos clases en los datos de entrenamiento. Luego, el modelo ha utilizado esta información para predecir las clases de los nuevos valores.

4.2.4 Vecinos Más Cercanos (KNN)

K-Nearest Neighbors es un algoritmo utilizado en el aprendizaje automático. Es un algoritmo simple pero poderoso que se utiliza para clasificación y regresión. El algoritmo almacena todos los casos disponibles y clasifica los nuevos casos en función de una medida de similitud, como funciones de distancia.

El algoritmo se basa en la idea de que los puntos de datos que están cerca entre sí en el espacio de características probablemente pertenecen a la misma clase. Esto significa que si un nuevo punto de datos está cerca de un grupo de puntos de datos que pertenecen a una cierta clase, el algoritmo clasificará el nuevo punto de datos como perteneciente a esa clase.

El algoritmo se puede utilizar en una amplia gama de aplicaciones, incluyendo reconocimiento de imágenes, procesamiento de lenguaje natural y sistemas de recomendación.

Ejemplo:

import pandas as pd
from sklearn.neighbors import KNeighborsClassifier

# Assuming df is a DataFrame defined earlier

# Create a KNN Classifier
model = KNeighborsClassifier(n_neighbors=3)

# Train the model using the training sets
model.fit(df[['A']], df['B'])

# Predict the response for test dataset
y_pred = model.predict(df[['A']])

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn.neighbors como KNeighborsClassifier. Luego, crea un clasificador K-Nearest Neighbors (KNN) llamado model con el parámetro n_neighbors configurado en 3. Esto significa que el modelo considerará los 3 vecinos más cercanos al predecir la clase de un nuevo punto de datos. Luego, el código ajusta el modelo utilizando la función fit() con los datos de entrenamiento df[['A']] y df['B']. Posteriormente, el código predice la respuesta para el conjunto de datos de prueba utilizando la función predict() con los datos de prueba df[['A']]. Finalmente, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha encontrado los 3 vecinos más cercanos de cada nuevo punto de datos en los datos de entrenamiento y ha utilizado la clase mayoritaria de esos vecinos para predecir la clase del nuevo punto de datos.

4.2.5 Random Forest

Random Forest es un método popular de aprendizaje conjunto en el aprendizaje automático. Implica la creación de múltiples árboles de decisión basados en submuestras de un conjunto de datos y combinar sus resultados para mejorar la precisión de las predicciones.

Específicamente, en cada división del árbol de decisión, el algoritmo selecciona aleatoriamente un subconjunto de características a considerar, lo que ayuda a reducir la correlación entre los árboles y evitar el sobreajuste. Una vez que se construyen todos los árboles, el algoritmo combina sus predicciones mediante el promedio o el voto, dependiendo del tipo de problema.

Este enfoque tiene varias ventajas, incluida la capacidad de manejar conjuntos de datos de alta dimensión y capturar relaciones no lineales complejas entre características. Además, generalmente es robusto frente a datos ruidosos o faltantes y puede proporcionar estimaciones de la importancia de las características, lo que puede ser útil para la selección de características e interpretación de resultados.

Ejemplo:

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

# Assuming df is a DataFrame defined earlier

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(df[['A']], df['B'], test_size=0.2, random_state=42)

# Create a Random Forest Classifier
clf = RandomForestClassifier(n_estimators=100)

# Train the model using the training sets
clf.fit(X_train, y_train)

# Predict the response for the test dataset
y_pred = clf.predict(X_test)

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn.ensemble como RandomForestClassifier. Luego, crea un clasificador Random Forest llamado clf con el parámetro n_estimators configurado en 100. Esto significa que el modelo creará 100 árboles de decisión y utilizará el voto mayoritario de los árboles para predecir la clase de un nuevo punto de datos. Luego, el código ajusta el modelo utilizando la función fit() con los datos de entrenamiento df[['A']] y df['B']. Posteriormente, el código predice la respuesta para el conjunto de datos de prueba utilizando la función predict() con los datos de prueba df[['A']]. Finalmente, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha creado 100 árboles de decisión y ha utilizado el voto mayoritario de los árboles para predecir la clase de cada nuevo punto de datos. El modelo ha utilizado esta información para predecir las clases de los nuevos valores.

4.2.6 Gradient Boosting

Gradient Boosting es uno de los métodos de conjunto más populares utilizados en el aprendizaje automático. Crea un conjunto de modelos de predicción débiles, generalmente árboles de decisión, para producir un modelo de predicción.

A diferencia de otros métodos de conjunto, Gradient Boosting construye el modelo de manera gradual, lo que significa que entrena cada nuevo modelo para predecir los errores residuales del modelo anterior. Al hacerlo, puede generalizar los resultados optimizando una función de pérdida diferenciable arbitraria. Este método se ha utilizado en una amplia gama de aplicaciones, como reconocimiento de imágenes, reconocimiento de voz y procesamiento de lenguaje natural, entre otras.

También se ha demostrado que funciona bien en situaciones donde los datos son ruidosos o incompletos. En general, Gradient Boosting es una herramienta poderosa que puede ayudar a mejorar la precisión de los modelos de predicción en muchos contextos diferentes.

Ejemplo:

from sklearn.ensemble import GradientBoostingClassifier

# Create a Gradient Boosting Classifier
clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)

# Train the model using the training sets
clf.fit(df[['A']], df['B'])

# Predict the response for test dataset
y_pred = clf.predict(df[['A']])

Salida:

[0 0 0 1 1]

El código primero importa el módulo sklearn.ensemble como GradientBoostingClassifier. Luego, crea un clasificador de Gradient Boosting llamado clf con los siguientes parámetros:

  • n_estimators: El número de árboles en el conjunto.
  • learning_rate: La tasa de aprendizaje para cada árbol.
  • max_depth: La profundidad máxima de cada árbol.
  • random_state: El estado aleatorio para el modelo.

El código luego ajusta el modelo utilizando la función fit() con los datos de entrenamiento df[['A']] y df['B']. Luego, el código predice la respuesta para el conjunto de datos de prueba utilizando la función predict() con los datos de prueba df[['A']]. Finalmente, el código imprime las predicciones.

La salida muestra que el modelo ha predicho los valores 0, 0, 0, 1 y 1 para los nuevos valores. Esto se debe a que el modelo ha construido un conjunto de árboles de decisión y ha utilizado las predicciones de cada árbol para predecir la clase de un nuevo punto de datos. El modelo ha utilizado esta información para predecir las clases de los nuevos valores.