pré-processamento de dados pitão: distribuição desigual de solução de amostra (sobre-amostragem e de sub-amostragem)

Xiao Bian hoje para compartilhar dados de python de pré-processamento para todos: a distribuição desigual da solução da amostra (oversampling e undersampling), tem um valor de referência boa, nós queremos ajudar. Siga a pequena série juntos Venha ver,
qual é a distribuição desigual de amostras:

distribuição desigual de médias amostrais a amostra é muito diferente, por exemplo, um total de 1000 amostras de dados conjunto de dados, que ocupa a classificação de 10 amostras, e que em qualquer caso, você não pode alcançar valores próprios cobertura completa, este tempo é uma distribuição da amostra sério desigual.

Por resolver a distribuição desigual da amostra:

Divisão desigual conjunto de dados de amostra também é muito comum: por exemplo, uma escova simples mal-intencionado, ordens de gado, fraude de cartão de crédito, roubo de energia elétrica, falha de equipamento, perda de clientes e de outras grandes empresas.

desequilíbrio amostra resultará em uma pequena quantidade de classificação recurso amostra continha muito pouco, é difícil extrair a lei, mesmo com o modelo de classificação, também propenso a excessiva dependência de um número limitado de amostras overfitting problemas causados ​​quando o modelo para a nova quando os dados, a precisão e robustez do modelo será pobre.

distribuição desigual da solução de amostra:

Sobreamostragem é conseguido através do aumento do número de amostras classificadas na categoria de menos amostras equilibradas, a maneira mais directa é simplesmente copiar os dados de amostra pequenos, a desvantagem é que, se um pequeno recurso, que irá conduzir a problemas de excesso de montagem. Melhorada por meio da adição de ruído aleatório por amostragem em minoria, os dados de interferência ou gera novas amostras sintetizado por certas regras.

Undersampling para conseguir uma classificação amostra equilibrada, reduzindo o número de amostras na classe majoritária, a maneira mais direta é livrar-se de algumas das maioria das classes de amostra aleatória para reduzir o tamanho da classe majoritária, a desvantagem é que a maioria vai perder algum importante classe de informações.

Definindo a ponderação dada pesos diferentes para um número diferente categoria de amostras (normalmente definido para ser inversamente proporcional ao tamanho da amostra)

Cada vez usando o método integrado de gerar uma pequena amostra do conjunto de treinamento de todas as categorias, selecionadas aleatoriamente a partir de uma grande amostra de classificação de dados para se fundir com a configuração de tamanho da amostra conjunto de treinamento menor, este será um monte de conjunto de treinamento repetido e formação modelo. Finalmente, na aplicação, uma combinação de métodos (por exemplo, de votação votação ponderada, etc.) gerando resultados de predição classe. Este método é floresta aleatório similar. A desvantagem é que, relativamente a comer recursos de computação, e demorado.

código python:

# 生成不平衡分类数据集
from collections import Counter
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=3000, n_features=2, n_informative=2,
              n_redundant=0, n_repeated=0, n_classes=3,
              n_clusters_per_class=1,
              weights=[0.1, 0.05, 0.85],
              class_sep=0.8, random_state=2018)
Counter(y)
# Counter({2: 2532, 1: 163, 0: 305})
 
# 使用RandomOverSampler从少数类的样本中进行随机采样来增加新的样本使各个分类均衡
from imblearn.over_sampling import RandomOverSampler
  
ros = RandomOverSampler(random_state=0)
X_resampled, y_resampled = ros.fit_sample(X, y)
sorted(Counter(y_resampled).items())
# [(0, 2532), (1, 2532), (2, 2532)]
 
# SMOTE: 对于少数类样本a, 随机选择一个最近邻的样本b, 然后从a与b的连线上随机选取一个点c作为新的少数类样本
from imblearn.over_sampling import SMOTE
  
X_resampled_smote, y_resampled_smote = SMOTE().fit_sample(X, y)
  
sorted(Counter(y_resampled_smote).items())
# [(0, 2532), (1, 2532), (2, 2532)]
 
# ADASYN: 关注的是在那些基于K最近邻分类器被错误分类的原始样本附近生成新的少数类样本
from imblearn.over_sampling import ADASYN
 
X_resampled_adasyn, y_resampled_adasyn = ADASYN().fit_sample(X, y)
  
sorted(Counter(y_resampled_adasyn).items())
# [(0, 2522), (1, 2520), (2, 2532)]
 
# RandomUnderSampler函数是一种快速并十分简单的方式来平衡各个类别的数据: 随机选取数据的子集.
from imblearn.under_sampling import RandomUnderSampler
rus = RandomUnderSampler(random_state=0)
X_resampled, y_resampled = rus.fit_sample(X, y)
  
sorted(Counter(y_resampled).items())
# [(0, 163), (1, 163), (2, 163)]
 
# 在之前的SMOTE方法中, 当由边界的样本与其他样本进行过采样差值时, 很容易生成一些噪音数据. 因此, 在过采样之后需要对样本进行清洗. 
# 这样TomekLink 与 EditedNearestNeighbours方法就能实现上述的要求.
from imblearn.combine import SMOTEENN
smote_enn = SMOTEENN(random_state=0)
X_resampled, y_resampled = smote_enn.fit_sample(X, y)
  
sorted(Counter(y_resampled).items())
# [(0, 2111), (1, 2099), (2, 1893)]
 
from imblearn.combine import SMOTETomek
smote_tomek = SMOTETomek(random_state=0)
X_resampled, y_resampled = smote_tomek.fit_sample(X, y)
  
sorted(Counter(y_resampled).items())
# [(0, 2412), (1, 2414), (2, 2396)]
 
# 使用SVM的权重调节处理不均衡样本 权重为balanced 意味着权重为各分类数据量的反比
from sklearn.svm import SVC 
svm_model = SVC(class_weight='balanced')
svm_model.fit(X, y)
 
# # EasyEnsemble 通过对原始的数据集进行随机下采样实现对数据集进行集成.
# EasyEnsemble 有两个很重要的参数: (i) n_subsets 控制的是子集的个数 and (ii) replacement 决定是有放回还是无放回的随机采样.
from imblearn.ensemble import EasyEnsemble
ee = EasyEnsemble(random_state=0, n_subsets=10)
X_resampled, y_resampled = ee.fit_sample(X, y)
sorted(Counter(y_resampled[0]).items())
# [(0, 163), (1, 163), (2, 163)]
 
# BalanceCascade(级联平衡)的方法通过使用分类器(estimator参数)来确保那些被错分类的样本在下一次进行子集选取的时候也能被采样到. 同样, n_max_subset 参数控制子集的个数, 以及可以通过设置bootstrap=True来使用bootstraping(自助法).
from imblearn.ensemble import BalanceCascade
from sklearn.linear_model import LogisticRegression
bc = BalanceCascade(random_state=0,
          estimator=LogisticRegression(random_state=0),
          n_max_subset=4)
X_resampled, y_resampled = bc.fit_sample(X, y)
  
sorted(Counter(y_resampled[0]).items())
# [(0, 163), (1, 163), (2, 163)]
 
# BalancedBaggingClassifier 允许在训练每个基学习器之前对每个子集进行重抽样. 简而言之, 该方法结合了EasyEnsemble采样器与分类器(如BaggingClassifier)的结果.
from sklearn.tree import DecisionTreeClassifier
from imblearn.ensemble import BalancedBaggingClassifier
bbc = BalancedBaggingClassifier(base_estimator=DecisionTreeClassifier(),
                ratio='auto',
                replacement=False,
                random_state=0)
bbc.fit(X, y) 

O conteúdo mais do que como muitos, e, finalmente, para recomendar uma boa reputação no número de instituições públicas [programadores], há um monte de veteranos aprender

Habilidades, experiência, habilidades de entrevista, experiência de trabalho e outros share aprendizagem, quanto mais cuidadosamente preparado a base-zero informações introdutórias, informações sobre projetos reais,

O método tem programador cronometrado Python explicar a tecnologia todos os dias, para compartilhar um pouco da aprendizagem e a necessidade de prestar atenção aos pequenos detalhesAqui Insert Picture Descrição

Publicado 49 artigos originais · ganhou elogios 8 · vê 40000 +

Acho que você gosta

Origin blog.csdn.net/chengxun02/article/details/105082229
Recomendado
Clasificación