Trabajar con datos: trabaje con algoritmos de procesamiento de datos.
Y tenía que trabajar con los más diversos a diario, así que decidí hacer una lista de los más populares en una serie de publicaciones.
Este artículo se centra en las técnicas de muestreo más comunes para trabajar con datos.
Muestreo aleatorio simple
Suponga que si desea hacer una selección donde cada elemento tiene la misma probabilidad de ser seleccionado.
A continuación, seleccionamos 100 de estos elementos del conjunto de datos.
sample_df = df.sample(100)
Muestreo estratificado
Supongamos que necesitamos estimar el número promedio de votos para cada candidato en la elección. La votación se lleva a cabo en tres ciudades:
1 millón de trabajadores viven en la ciudad A
2 millones de artistas viven en la ciudad B
3 millones de personas mayores viven en la ciudad C
Si tratamos de tomar muestras igualmente probables de 60 personas entre toda la población, entonces seguramente estarán desequilibradas en relación con diferentes ciudades y, por lo tanto, sesgadas, lo que conducirá a un grave error en las predicciones.
Si específicamente hacemos una muestra de 10, 20 y 30 personas de las ciudades A , B y C, respectivamente, entonces el error será mínimo.
En Python, esto se puede hacer así:
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, test_size=0.25)
Muestreo de yacimientos
Me gusta esta formulación del problema:
Supongamos que tiene una secuencia de elementos de un gran tamaño desconocido que puede iterar solo una vez.
Cree un algoritmo que seleccione aleatoriamente un elemento de la secuencia como si cualquier elemento pudiera seleccionarse con la misma probabilidad.
Como hacerlo
Supongamos que necesitamos seleccionar 5 objetos de una secuencia infinita, de modo que cada elemento en la secuencia pueda seleccionarse con la misma probabilidad.
import random def generator(max): number = 1 while number < max: number += 1 yield number
Es matemáticamente posible demostrar que cada elemento podría ser elegido igualmente probable.
Como?
Cuando se trata de matemáticas, es mejor intentar comenzar la solución con un pequeño caso especial.
Así que echemos un vistazo a una secuencia que consta de 3 elementos, donde necesitamos seleccionar solo 2.
Vemos el primer elemento, guárdelo en la lista, ya que todavía hay espacio en el tanque. Vemos el segundo elemento, guárdelo en la lista, ya que todavía hay espacio en el tanque.
Vemos el tercer elemento. Se vuelve más interesante aquí. Salvaremos el tercer elemento con una probabilidad de 2/3.
Veamos ahora la probabilidad final de que se guarde el primer elemento:
La probabilidad de desplazamiento del primer elemento desde el depósito es igual a la probabilidad de que se seleccione el tercer elemento, multiplicado por la probabilidad de que el primer elemento de los dos sea seleccionado para desplazamiento. Eso es:
2/3 * 1/2 = 1/3
Es decir, la probabilidad final del primer elemento que se guardará:
1 - 1/3 = 2/3
Absolutamente la misma lógica se puede aplicar al segundo elemento, extendiéndolo en el futuro a un mayor número de elementos con un depósito creciente.
Es decir, cada elemento se guardará con una probabilidad de 2/3 o, en el caso general, k / n .
Submuestreo aleatorio y sobremuestreo
FuenteCon demasiada frecuencia en la vida hay conjuntos de datos desequilibrados.
El método que se usa ampliamente en este caso se llama remuestreo (a veces dicen "remuestreo" en la traducción al ruso - aprox. Transl.) . Su esencia radica en eliminar elementos de un conjunto demasiado grande (submuestreo) y / o agregar más elementos a un conjunto insuficientemente grande (sobremuestreo).
Comencemos creando algunos conjuntos desequilibrados.
from sklearn.datasets import make_classification X, y = make_classification( n_classes=2, class_sep=1.5, weights=[0.9, 0.1], n_informative=3, n_redundant=1, flip_y=0, n_features=20, n_clusters_per_class=1, n_samples=100, random_state=10 ) X = pd.DataFrame(X) X['target'] = y
Ahora podemos realizar submuestreo aleatorio y sobremuestreo de esta manera:
num_0 = len(X[X['target']==0]) num_1 = len(X[X['target']==1]) print(num_0,num_1)
Andersampling y sobremuestreo usando desequilibrio de aprendizaje
imbalanced-learn (imblearn) es una biblioteca de python para tratar los problemas de los conjuntos de datos no balanceados.
Contiene varios métodos diferentes para volver a muestrear.
a. Andersampling usando enlaces Tomek:
Uno de los métodos proporcionados se llama Enlaces Tomek. Los "enlaces" en este caso son pares de elementos de diferentes clases que están cerca.
Usando el algoritmo, eventualmente eliminaremos el elemento par del conjunto más grande, lo que permitirá que el clasificador funcione mejor.
Fuente
from imblearn.under_sampling import TomekLinks tl = TomekLinks(return_indices=True, ratio='majority') X_tl, y_tl, id_tl = tl.fit_sample(X, y)
b. Sobremuestreo con SMOTE:
En SMOTE (Método de sobremuestreo de minorías de síntesis), creamos elementos muy cercanos a los existentes en un conjunto más pequeño.
Fuente from imblearn.over_sampling import SMOTE smote = SMOTE(ratio='minority') X_sm, y_sm = smote.fit_sample(X, y)
Pero en imblearn hay otros métodos de submuestreo (Clústeres Centroides, NearMiss, etc.) y sobremuestreo (ADASYN y bSMOTE), que también pueden ser útiles.
Conclusión
Los algoritmos son la sangre de la ciencia de datos.
El muestreo es una de las áreas más importantes en el trabajo con datos, y solo se ofrece una descripción superficial más arriba.
Una estrategia de muestreo bien elegida puede impulsar todo el proyecto. Seleccionados mal conducen a resultados erróneos. Por lo tanto, la elección debe hacerse sabiamente.