Por que usar o dimensionamento de Platt?

17

Para calibrar um nível de confiança para uma probabilidade de aprendizado supervisionado (digamos, mapear a confiança de um SVM ou de uma árvore de decisão usando dados superamostrados), um método é usar o Escala de Platt (por exemplo, Obtendo Probabilidades Calibradas do Impulso ).

Basicamente, utiliza-se regressão logística para mapear para [ 0 ; 1 ] . A variável dependente é o rótulo verdadeiro e o preditor é a confiança do modelo não calibrado. O que não entendo é o uso de uma variável de destino diferente de 1 ou 0. O método exige a criação de um novo "rótulo":[-;][0 0;1]

Para evitar o ajuste excessivo no conjunto de trens sigmóides, é usado um modelo fora da amostra. Se houver exemplos positivos e N - negativos no conjunto de trens, para cada exemplo de treinamento, a Calibração de Platt usa os valores alvo y + e y - (em vez de 1 e 0, respectivamente), onde y + = N + + 1N+N-y+y-

y+=N++1N++2;y-=1N-+2

O que não entendo é como esse novo alvo é útil. A regressão logística não vai simplesmente tratar a variável dependente como um rótulo binário (independentemente de qual rótulo é fornecido)?

ATUALIZAR:

1/0 0PROC GENMOD

data(ToothGrowth) 
attach(ToothGrowth) 

  # 1/0 coding 
dep          <- ifelse(supp == "VC", 1, 0) 
OneZeroModel <- glm(dep~len, family=binomial) 
OneZeroModel 
predict(OneZeroModel) 

  # Platt coding 
dep2           <- ifelse(supp == "VC", 31/32, 1/32) 
plattCodeModel <- glm(dep2~len, family=binomial) 
plattCodeModel 
predict(plattCodeModel) 

compare        <- cbind(predict(OneZeroModel), predict(plattCodeModel)) 

plot(predict(OneZeroModel), predict(plattCodeModel))
B_Miner
fonte

Respostas:

13

Sugiro verificar a página da wikipedia de regressão logística . Ele afirma que, no caso de uma regressão logística de variável dependente binária, mapeia os preditores para a probabilidade de ocorrência da variável dependente. Sem nenhuma transformação, a probabilidade usada para treinar o modelo é 1 (se y for positivo no conjunto de treinamento) ou 0 (se y for negativo).

pEu=1(1+exp(UMAfEu+B))fEuy+y-

Steffen
fonte
Obrigado pela resposta! Eu estava usando o SAS pela primeira vez e não consegui obter uma variável de resposta diferente. Eu ajusto o seguinte em R como exemplo e vejo que é emitido um aviso sobre não ser uma variável de resposta inteira, mas o resultado se encaixou em um modelo diferente.
B_Miner
data (ToothGrowth) attach (ToothGrowth) # 1/0 codificação dep <-ifelse (supp == "VC", 1,0) OneZeroModel <-glm (dep ~ len, família = binomial) OneZeroModel prever (OneZeroModel) #Platt codificação dep2 <-ifelse (supp == "VC", 31/32, 1/32) plattCodeModel <-glm (dep2 ~ len, família = binomial) plattCodeModel preveja (plattCodeModel) compare <-cbind (preveja (OneZeroModel), preveja ( plattCodeModel)) plot (preveja (OneZeroModel), preveja (plattCodeModel))
B_Miner
@ user2040: 1. Sim ... existe uma pergunta ou isso é apenas uma observação :)? 2. Por que você não adiciona o código à pergunta? Nenhuma formatação é horrível.
steffen
2

Outro método para evitar o ajuste excessivo que eu achei útil é ajustar o modelo de regressão logística univariada à saída de validação cruzada de saída do SVM, que pode ser aproximada eficientemente usando o limite Span .

No entanto, se você quiser um classificador que produz estimativas da probabilidade de pertencer a uma classe, seria melhor usar a regressão logística do kernel, que visa fazer isso diretamente. A saída do SVM é projetada para classificação discreta e não contém necessariamente as informações necessárias para uma estimativa precisa das probabilidades, longe do contorno p = 0,5.

Classificadores de processo Gaussianos são outra boa opção se você deseja um classificador probabilístico baseado em kernel.

Dikran Marsupial
fonte