Trabalhar com dados - trabalhe com algoritmos de processamento de dados.
E eu tinha que trabalhar com os mais diversos diariamente, então decidi fazer uma lista das publicações mais populares da série.
Este artigo se concentra nas técnicas de amostragem mais comuns para trabalhar com dados.
Amostragem aleatória simples
Suponha que você queira fazer uma seleção em que cada elemento tenha a mesma probabilidade de ser selecionado.
Abaixo, selecionamos 100 desses elementos no conjunto de dados.
sample_df = df.sample(100)
Amostragem estratificada
Suponha que precisamos estimar o número médio de votos para cada candidato na eleição. A votação ocorre em três cidades:
1 milhão de trabalhadores vivem na cidade A
2 milhões de artistas vivem na cidade B
3 milhões de idosos vivem na cidade C
Se tentarmos colher amostras igualmente prováveis de 60 pessoas entre toda a população, é provável que elas sejam desequilibradas em relação a diferentes cidades e, portanto, tendenciosas, o que levará a um erro grave nas previsões.
Se fizermos especificamente uma amostra de 10, 20 e 30 pessoas das cidades A , B e C, respectivamente, o erro será mínimo.
No Python, isso pode ser feito assim:
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)
Amostragem de reservatório
Eu gosto desta formulação do problema:
Suponha que você tenha um fluxo de elementos de um tamanho desconhecido grande que possa iterar apenas uma vez.
Crie um algoritmo que selecione aleatoriamente um elemento do fluxo como se qualquer elemento pudesse ser selecionado com igual probabilidade.
Como fazer isso?
Suponha que precisamos selecionar 5 objetos de um fluxo infinito, para que cada elemento no fluxo possa ser selecionado com a mesma probabilidade.
import random def generator(max): number = 1 while number < max: number += 1 yield number
É matematicamente possível provar que cada elemento pode ser escolhido com igual probabilidade.
Como
Quando se trata de matemática, é melhor tentar iniciar a solução com um pequeno caso especial.
Então, vamos olhar para um fluxo composto por 3 elementos, onde precisamos selecionar apenas 2.
Vemos o primeiro elemento, salve-o na lista, pois ainda há espaço no tanque. Vemos o segundo elemento, salve-o na lista, pois ainda há espaço no tanque.
Vemos o terceiro elemento. Torna-se mais interessante aqui. Vamos salvar o terceiro elemento com uma probabilidade de 2/3.
Vamos agora ver a probabilidade final do primeiro elemento ser salvo:
A probabilidade de deslocamento do primeiro elemento do reservatório é igual à probabilidade do terceiro elemento a ser selecionado, multiplicado pela probabilidade de ser o primeiro elemento dos dois que serão selecionados para deslocamento. Isto é:
2/3 * 1/2 = 1/3
Ou seja, a probabilidade final do primeiro elemento a ser salvo:
1 - 1/3 = 2/3
Absolutamente a mesma lógica pode ser aplicada ao segundo elemento, estendendo-o no futuro para um número maior de elementos com o aumento do reservatório.
Ou seja, cada elemento será salvo com uma probabilidade de 2/3 ou, no caso geral, k / n .
Subamostragem aleatória e sobreamostragem
FonteMuitas vezes na vida existem conjuntos de dados desequilibrados.
O método amplamente usado nesse caso é chamado de reamostragem (às vezes eles dizem "reamostragem" na tradução para o russo - aprox. Transl.) . Sua essência consiste em remover elementos de um conjunto muito grande (subamostragem) e / ou adicionar mais elementos a um conjunto insuficientemente grande (sobreamostragem).
Vamos começar criando alguns 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
Agora podemos realizar subamostragem aleatória e sobreamostragem assim:
num_0 = len(X[X['target']==0]) num_1 = len(X[X['target']==1]) print(num_0,num_1)
Andersampling e oversampling usando aprendizado desequilibrado
desbalanced-learn (imblearn) é uma biblioteca python para lidar com os problemas de conjuntos de dados não balanceados.
Ele contém vários métodos diferentes para reamostragem.
a. Andersampling usando Tomek Links:
Um dos métodos fornecidos é chamado Tomek Links. "Links" neste caso são pares de elementos de diferentes classes que estão próximas.
Usando o algoritmo, eventualmente removeremos o elemento par do conjunto maior, o que permitirá que o classificador funcione melhor.
Fonte
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. Sobre-amostragem com SMOTE:
No SMOTE (método de superamostragem por minoria de síntese), criamos elementos muito próximos aos existentes em um conjunto menor.
Fonte from imblearn.over_sampling import SMOTE smote = SMOTE(ratio='minority') X_sm, y_sm = smote.fit_sample(X, y)
Porém, no desaprender, existem outros métodos de subamostragem (Centroids de cluster, NearMiss etc.) e superamostragem (ADASYN e bSMOTE), que também podem ser úteis.
Conclusão
Algoritmos são o sangue da ciência de dados.
A amostragem é uma das áreas mais importantes no trabalho com dados, e apenas uma visão geral superficial é fornecida acima.
Uma estratégia de amostragem bem escolhida pode levar todo o projeto adiante. Selecionados mal levam a resultados errôneos. Portanto, a escolha deve ser feita com sabedoria.