Métodos de filtrado para clasificación linealmente separable

Autor: | Última modificación: 16 de abril de 2024 | Tiempo de Lectura: 3 minutos
Temas en este post: ,

Algunos de nuestros reconocimientos:

Premios KeepCoding

¿Conoces qué son los métodos de filtrado para clasificación linealmente separable? ¿Sabías que existen métodos de filtrado para clasificación de dos tipos? Pues sí, existen los métodos de filtrado para clasificación con problemas lineal y no linealmente separables. En este artículo te contaremos en qué consisten los métodos de filtrado para clasificación linealmente separable y cómo funcionan, todo esto por medio de un ejemplo.

Recordemos que la clasificación en machine learning es una tarea que requiere el uso de algoritmos de aprendizaje automático que aprenden a asignar una etiqueta de clase a ejemplos del dominio del problema. Por ejemplo, clasificar las llamadas, mensajes o correos como spam o no spam.

Vamos a analizar métodos de filtrado muy similares a los métodos de regresión, aplicados ahora para distintos problemas de clasificación:

Problema de filtrado para clasificación linealmente separable

En este problema la variable x1 define un problema linealmente separable y constituye la variable informativa. La variable x2 representa una variable redundante, mientras que x3 y x4 son variables ruidosas (no aportan información).

#filtrado para clasificación linealmente separable
#toy example: linearly separable problem
np.random.seed (0)

# -- parameters
N = 1000
mu = 2 
sigma1 = 1
sigma2 = 5

# -- variables auxiliares
unos = np.ones (int (N / 2))
rand2 = np.random.randn (int (N / 2), 1)

# -- features
y = np.concatenate ([-1 * unos, unos])
x1 = np.concatenate ([-mu + sigma1 * rand2, mu + sigma1 * rand2])
x2 = sigma2 * np.random.randn (N, 1) - 3 * x1

x3 = 2 * np.random.randn (N, 1)
x4 = np.random.rand (N, 1)

x = np.hstack ((x1, x2, x3, x4))

#filtrado para clasificación linealmente separable
# --- do some plotting
plt.figure (figsize = (12, 14))
for i in range (4):
plt.subplot (3, 2, i + 1)
plt.hist (X [y < 0, i], bins = 20, normed = True, alpha = 0.5, label = '-1', color = 'b')
plt.hist (X [y > 0, i], bins = 20, normed = True, alpha = 0.5, label = '+1', color = 'r')
plt.legend (loc = 'uper right')
plt.xlabel ('$x_ {} $'.format (i + 1), fontsize = 18)
#pyplot.show ()

#plt.figure (figsize = 18, 5)
plt.subplot (3, 2, 5)
plt.scatter (x1, x2, c = y.reshape (-1, 1), cmap = cm_bright)
plt.xlabel ("$x_1$", fontsize = 16)
plt.xlabel ("$x_2$", fontsize = 16)
plt.show ()
filtrado para clasificación linealmente separable

Vemos que x1 es linealmente separable, a diferencia de x2, que no lo es. Como ya habíamos dicho, x3 y x4 son mero ruido.

Si pintamos x1 y x2, se podría ver una separación muy clara (última imagen, puntos rojos y azules). Esto quiere decir que la clasificación podría ser casi perfecta.

Ahora apliquemos los métodos de filtrado para clasificación linealmente separable:

#filtrado para clasificación linealmente separable
from sklearn.feature_selection importf_classif, mutual_info_classif

featureNames = ['x1', 'x2', 'x3', 'x4']

#do calculations
f_test, _ = f_classif (X, y)
f_test / = np.nax (f_test)

mi = mutual_info_classif (X, y)
mi / = np.max (mi)

#filtrado para clasificación linealmente separable
#do some plotting
plt.figure (figsize = (10, 5))

plt.subplot (1, 2, 1)
plt.bar (range (X.shape [1]), f_test, align = "center")
plt.xticks (range [X.shape [1], featureNames)
plt.xlabel ('features')
plt.ylabel ('Ranking')
plt.title ('Mutual information score')

plt.show ()
Métodos de filtrado para clasificación linealmente separable

Observamos que F – test le da mucha importancia a x1; mutual_info le da también mucha importancia a x1. Al mismo tiempo, vemos que mutual_info le da más importancia a x2 que F – test.

Esta es una combinación lineal y ambos test de filtrado para clasificación linealmente separable concuerdan en que x1 es la variable de importancia, la variable más relevante, mientras que x2, a pesar de ser una variable de gran relevancia, no lo es tanto como x1.

Asimismo, vemos que F – test descarta x3 y x4, mientras que el mutual_info le da relevancia a x3, incluso cuando ya sabemos y habíamos dicho que es ruido.

¿Qué sigue?

Con este post te has acercado un poco más al amplio mundo del Big Data, un sector de alta demanda que brinda oportunidades laborales únicas. Si quieres formar parte de este ámbito, échale un vistazo al Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva en la que adquirirás todos los conocimientos necesarios para incursionar en el mercado laboral. ¡Sigue forjando tu camino hacia el éxito y solicita información ahora!

Posts Relacionados

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado