Classe desequilibrada: class_weight para algoritmos ML no Spark MLLib

8

No python sklearn, existem vários algoritmos (por exemplo, regressão, floresta aleatória ... etc.) que possuem o parâmetro class_weight para manipular dados desequilibrados.

No entanto, não encontro esse parâmetro para os algoritmos MLLib. Existe um plano de implementar class_weight para algum algoritmo MLLib? Ou existe alguma abordagem no MLLib para dados desequilibrados? Ou, na verdade, temos que lidar com toda a amostragem de up / downsmills no MLLib?

Obrigado!

Edamame
fonte
Sim, os algoritmos no MLLib do Spark estão preparados para lidar com problemas complexos. Além disso, do meu entendimento, também não há uma maneira de executar uma divisão estratificada. Portanto, quaisquer métricas de desempenho adquiridas não serão representadas adequadamente.
Samuel Sherman
Aqui está um exemplo de regressão logística ponderada no MLlib da documentação 2.2.
Emre

Respostas:

1

Os algoritmos no MLLib são sempre usados ​​como linha de base no cenário de produção e, de fato, não conseguem lidar com alguns problemas industriais, como desequilíbrio de rótulo. Portanto, se você quiser usá-los, precisará equilibrar suas instâncias.

Além disso, o mecanismo do BSP no Spark, você pode simplesmente ver como dados paralelos , pode ser a principal razão pela qual o Spark não cobre esse problema. Pode ser difícil para o Spark despachar instâncias para todos os nós no cluster, enquanto as instâncias parciais de cada nó compartilham a mesma distribuição de rótulo que o todo.

Por fim, você só precisa ponderar o valor da perda para cada instância rotulada menor durante o processo de iteração, se quiser implementá-lo.

Espero que isso ajude você, boa sorte -)

Joe
fonte
1

Uma das maneiras pelas quais eu lidei com classes desequilibradas no passado foi criar um classificador com base em amostras de um conjunto de dados para dividir uma amostra de 50/50. Isso significa usar todos os pontos de dados associados à sua classe minoritária e amostrar aleatoriamente o mesmo número de pontos da sua classe majoritária.

Se isso funcionará depende da quantidade de dados que você realmente possui na sua classe minoritária - se você tiver um desequilíbrio extremo de classe (<5% de instâncias da classe minoritária), convém considerar a super amostragem sintética.

Você provavelmente poderia olhar com pydf.rdd.takeSample()faísca ou df.sampleem pandas.

ngopal
fonte
0

A maneira como lidei com os desequilíbrios de classe é através dos seguintes métodos: 1. Mesclando a classe que aparece com menos frequência a outras classes. Obviamente, você deve usar algum tipo de conhecimento de domínio em vez de mesclá-los aleatoriamente 2. Use técnicas de reamostragem, como superamostragem, subamostragem, SMOTE, ADASYN. Não recomendo usar essas técnicas, porque elas não representam os dados reais. Mas, de qualquer forma, você certamente pode dar uma olhada neles

Siddhi Kiran Bajracharya
fonte