Basicamente, quero converter medidas de similaridade em pesos que são usados como preditores. As semelhanças estarão em [0,1], e restringirei os pesos para também estar em [0,1]. Gostaria de uma função paramétrica que faça esse mapeamento que provavelmente otimizarei usando a descida de gradiente. Os requisitos são que 0 mapeie para 0, 1 mapeie para 1 e esteja aumentando estritamente. Um derivado simples também é apreciado. desde já, obrigado
Edit: Obrigado pelas respostas até agora, essas são muito úteis. Para deixar meu objetivo mais claro, a tarefa é previsão. Minhas observações são vetores extremamente esparsos com uma única dimensão para prever. Minhas dimensões de entrada são usadas para calcular a similaridade. Minha previsão é então uma soma ponderada do valor de outras observações para o preditor em que o peso é uma função da similaridade. Estou limitando meus pesos em [0,1] por simplicidade. Espero que seja óbvio agora porque eu exijo que 0 seja mapeado para 0, 1 para mapeado para 1 e que ele seja estritamente aumentado. Como o whuber apontou, usar f (x) = x atende a esses requisitos e realmente funciona muito bem. No entanto, não possui parâmetros para otimizar. Tenho muitas observações para poder tolerar muitos parâmetros. Vou codificar manualmente a descida do gradiente, daí a minha preferência por uma derivada simples.
Por exemplo, muitas das respostas dadas são simétricas em torno de 0,5. Seria útil ter um parâmetro para mudar para esquerda / direita (como na distribuição beta)
fonte
Respostas:
Aqui está um:
onde é > 0β > 0
] 2
fonte
Como já comentado por @whuber, a função atende aos três requisitos mencionados (ou seja, 0 mapeia para 0, 1 mapeia para 1 e a função está aumentando estritamente). No título da sua pergunta, você parece indicar que também está interessado na função em forma de S, como na curva Sigmoide / Logística. Isso está correto? Nesse caso, você certamente deve tentar a seguinte função logística, que atenderá aproximadamente aos quatro critérios especificados: 1f( x ) = x .
O nesta equação controlará a inclinação da sua curva. Alterar k também irá permitir que você controle o quão perto f ( 0 ) e f ( 1 ) estão a 0 e 1, respectivamente. Por exemplo, para k = 20 , F ( 0 ) = 4,539787 E - 05 e f ( 1 ) = 0,9999546 .k k f( 0 ) f( 1 ) k = 20 f( 0 ) = 4.539787 e - 05 f( 1 ) = 0,9999546
A derivada dessa função é facilmente calculada como:
fonte
Deixe-me oferecer a solução mais geral consistente com os requisitos: isso lhe dará mais flexibilidade para escolher e otimizar.
Podemos interpretar "em forma de S" como uma curva monotonicamente crescente (porque a transformação deve ser individual), consistindo em uma parte que é côncava para cima e outra que é côncava para baixo. Podemos nos concentrar em tornar a metade esquerda côncava para baixo, porque o outro tipo (com a metade esquerda côncava para cima) é obtido através da inversão de tais transformações.
Essa segunda derivada pode fazer praticamente qualquer coisa : tudo o que precisamos é que
é integrável,
e
R
Aliás, a solução surge configurando ff( x ) = x f′ ′( x ) = 0 f′ f 1 1 0 0 f′ f( x ) = 1 - x
fonte
O que você está tentando usar isso não está particularmente claro para mim, então não posso dizer se faz sentido fazer, mas cumprir todos os seus critérios parece ser bastante trivial.
Então, por que não pegar uma família específica conveniente de distribuições unimodais * contínuas em [0,1] cujo pdf é "simples"? Isso parece cumprir todas as partes do que você lista lá.
* (cujo modo é delimitado dos pontos finais)
curva em forma de s - garantida pela unimodalidade (com o modo fora dos pontos finais)
paramétrico - fornecendo qualquer família específica que possua parâmetros
0 mapeia para 0, 1 mapeia para 1 aumentando estritamente - é o que as funções de distribuição em [0,1] fazem; você só precisa que a densidade seja> 0 in (0,1)
derivada simples - esse é o pdf; portanto, se o pdf for "simples" de acordo com o critério que melhor lhe convier, estará pronto.
Existem (como Alex R afirmou) um número infinito deles. A versão beta que ele menciona é óbvia, mas o cdf é a função beta incompleta, então você precisa de algo para avaliar isso - é uma função padrão em muitos pacotes (incluindo quase todos os pacotes de estatísticas decentes), por isso duvido que seja difícil. Observe, no entanto, que nem todos os betas são unimodais (com o modo não nas extremidades); portanto, a família também abrange cdfs que não têm o formato "s".
Aqui estão fotos de três famílias razoavelmente simples:
Existem muitas outras opções e novas podem ser facilmente construídas.
-
Em resposta à edição da pergunta:
fonte