Pergunta

Ok, isso aqui é um problema análogo ao meu problema (Eu vou elaborar sobre o problema real abaixo, mas acho que esta analogia será mais fácil de entender).

Eu tenho uma estranha moeda de duas faces que só vem à tona cabeças (aleatoriamente) 1 em cada 1.001 lançamentos (o restante sendo caudas). Em outras palavras, para cada 1.000 caudas eu vejo, haverá 1 heads.

Eu tenho uma doença peculiar onde eu só percebe 1 em cada 1.000 caudas eu vejo, mas eu aviso a cada cabeças, e assim parece-me que a taxa de perceber um cara ou coroa é de 0,5. Claro, eu estou ciente desta doença e seus efeitos para que eu possa compensar isso.

Alguém agora me dá uma nova moeda, e notei que a taxa de cabeças percebendo agora é de 0,6. Dado que a minha doença não mudou (eu ainda só percebe 1 em cada 1.000 caudas), como faço para calcular a taxa real de cabeças de caudas que esta nova moeda produz?


Ok, então qual é o problema real? Bem, eu tenho um monte de dados que consistem em entrada e saídas que são 1s e 0s. Eu quero ensinar um algoritmo de aprendizado de máquina supervisionado para prever o resultado esperado (um float entre 0 e 1) dada uma entrada. O problema é que os 1s são muito raros, e isso estraga a matemática interna porque se torna muito suscetível a erros de arredondamento -. Mesmo com alta precisão matemática ponto flutuante

Então, eu normalizar os dados, omitindo aleatoriamente a maioria das amostras de treinamento 0 de modo que parece que há uma proporção mais ou menos igual de 1s e 0s. Claro, isso significa que agora a saída do algoritmo de aprendizagem máquina é não mais prevendo uma probabilidade, ie. em vez de prever 0,001 como deveria, seria agora prevêem 0,5.

Eu preciso de uma maneira de converter a saída do algoritmo volta a aprendizagem de máquina a uma probabilidade dentro do conjunto de treinamento originais.

Nota do Autor (2015/10/07): Eu descobri mais tarde que esta técnica é comumente conhecido como "downsampling"

Foi útil?

Solução

Você está calculando o seguinte

calculatedRatio = heads / (heads + tails / 1000)

E você precisa

realRatio = heads / (heads + tails)

Resolver duas equações para caudas produz as seguintes equações.

tails = 1000 / calculatedRatio - 1000
tails = 1 / realRatio - 1

combinação de ambos os rendimentos o seguinte.

1000 / calculateRatio - 1000 = 1 / realRatio - 1

E, finalmente resolvendo para realRatio.

realRatio = 1 / (1000 / calculatedRatio - 999)

Parece ser correta. calculatedRatio 0,5 rendimentos realRatio 1/1001, 0,6 rendimentos 3/2003.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top