Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

194
Visualizações
¿Cómo lograr una división de pliegues K estratificada para un número arbitrario de variables categóricas?

Tengo un marco de datos de la forma, df :

 cat_var_1 cat_var_2 num_var_1 0 Orange Monkey 34 1 Banana Cat 56 2 Orange Dog 22 3 Banana Monkey 6 ..

Suponga que los valores posibles de cat_var_1 en el conjunto de datos tienen las proporciones- ['Orange': 0.6, 'Banana': 0.4] y los valores posibles de cat_var_2 tienen las proporciones ['Monkey': 0.2, 'Cat': 0.7, 'Dog ': 0,1].

¿Cómo divido los datos en conjuntos de entrenamiento, prueba y validación (división 60:20:20) de modo que se conserven las proporciones de las variables categóricas? En la práctica, estas variables pueden ser de cualquier número, no solo dos. Además, claramente, es posible que nunca se logren las proporciones exactas en la práctica, pero nos gustaría que fueran lo más cercanas posible.

He investigado el método StratifiedKFold de sklearn descrito aquí: ¿cómo dividir un conjunto de datos en un conjunto de entrenamiento y validación manteniendo la proporción entre clases? pero esto se restringe a evaluar sobre la base de una sola variable categórica.

Adicionalmente, le agradecería si pudiera proporcionar la complejidad de la solución que logra.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Puede pasar df.cat_var_1+ "_" + df.cat_var_2 al argumento y de StratifiedShuffleSplit.split() :

Pero aquí hay un método que usa DataFrame.groupby :

 import pandas as pd import numpy as np nrows = 10000 p1 = {'Orange': 0.6, 'Banana': 0.4} p2 = {'Monkey': 0.2, 'Cat': 0.7, 'Dog': 0.1} c1 = [key for key, val in p1.items() for i in range(int(nrows * val))] c2 = [key for key, val in p2.items() for i in range(int(nrows * val))] random.shuffle(c1) random.shuffle(c2) df = pd.DataFrame({"c1":c1, "c2":c2, "val":np.random.randint(0, 100, nrows)}) index = [] for key, idx in df.groupby(["c1", "c2"]).groups.items(): arr = idx.values.copy() np.random.shuffle(arr) p1 = int(0.6 * len(arr)) p2 = int(0.8 * len(arr)) index.append(np.split(arr, [p1, p2])) idx_train, idx_test, idx_validate = list(map(np.concatenate, zip(*index)))
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda