Literatura sobre o algoritmo para uma divisão ideal no cultivo de árvores de classificação

8

Na ESL , Seção 9.7, há um parágrafo declarando que o tempo de computação de uma divisão no crescimento de uma árvore de classificação (ou regressão) geralmente escala como que é o número de preditores e é o número de amostras.pNlogNpN

Uma abordagem ingênua resulta em uma escala , e não consegui encontrar nenhuma referência à literatura que explique os detalhes da parte dividida do algoritmo e como se consegue uma escala pN típica .pN2 pNlogN

Na abordagem ingênua, a divisão ideal para uma dada variável, após uma ordem inicial dos valores observados, é procurada entre os pontos médios entre os valores observados, e o cálculo da perda para cada divisão pode ser feito em um tempo que escala como .N1N

Eu poderia (e provavelmente estudarei) o código-fonte para algumas das implementações que conheço, mas uma referência à literatura seria boa em particular em relação à complexidade do tempo.

NRH
fonte

Respostas:

2

Vou dar uma resposta diferente, já que é demais para um comentário e trata uma abordagem mais geral.

Portanto, na ESL, eles descrevem de fato o tempo de computação para um branch-and-bound (mais precisamente, isso me parece uma divisão e conquista).

Denotamos com o número de observações e com o número de nós filhos, quando cultivamos uma árvore. Suponho que não perdemos em geral se considerarmos que é fixo. Além disso, podemos denotar com o tempo de processamento para calcular pontos de divisão em um determinado nó.NKKf(N)

Assim, podemos escrever recursivamente a fórmula para o tempo de execução como: que consideramos aqui que os nós filhos dividem o conjunto de dados de entrada do tamanho nos subconjuntos de igual tamanho . Sabemos que esse é o melhor caso.

T(N)=f(N)+KT(N/K)
NKN/K

No entanto, podemos ver que esta é uma aplicação bem conhecida do Teorema Mestre. Isso está bem documentado no livro do CLRS . Eu tenho a 3ª edição e os detalhes estão na seção 4.5 e a prova está na próxima seção. Não me lembro bem dos detalhes, mas lembro que não é muito complicado se se expande a recursão e agrupa alguns termos.

No entanto, o que é importante para este caso é que, quando - tempo linear, o tempo resultante do algoritmo é . Esse tempo é calculado para uma única variável de entrada, portanto, nosso tempo total para variáveis seriaf(N)=O(N)T(N)=O(NlogN)PO(PNlogN)

Esse tempo é possível para o crescimento da árvore, se todas as entradas forem classificadas inicialmente em , e encontrar o valor de divisão leva tempo linear nessas entradas classificadas. Aqui podemos aplicar o algoritmo de variância on-line, como mencionei na resposta anterior para . Paraé ainda mais fácil encontrar mediana. Confesso que nunca experimentei outra função de perda de árvores.O(PNlogN)L2=1N(yy^)2L1=1N|yy^|

Observe, porém, que o teorema mestre se aplica ao melhor caso, se as divisões forem iguais em tamanho. O pior caso é quando a divisão é muito desequilibrada. Lá, pode-se aplicar um caso diferente de Teorema Mestre e o tempo se tornará .O(PN2)

Como conclusão, presumo que os autores de ESL usem o termo normalmente de uma maneira usada para descrever o algoritmo de classificação rápida. Normalmente, a classificação rápida fornece tempo de execução de , com o pior caso , para algumas configurações de dados específicas.O(NlogN)O(N2)

Espero que ajude.

rapaio
fonte
2

Veja minha resposta de outra pergunta aqui . Embora eu não possua referências em papel, você pode facilmente achar que, para entradas numéricas de comprimento é necessário:pN

  • itera sobre todas as entradas -pO(p)
  • classificação ascendente de cada entrada -O(Nlog(N))
  • calcular 2 variâncias em execução, uma começando da esquerda e outra começando da direita em tempo linear -O(N)

O tempo dominante para cada atributo é o tempo de classificação, portanto, temos .O(pNlog(N))

rapaio
fonte
+1, esta é uma boa resposta, na qual não pensei, mas pressupõe uma perda quadrática. Eu não acho que isso possa ser generalizado para (todas) outras funções de perda comuns usadas para árvores de classificação. Suponho que o típico , mas de acordo com o pior caso de ESL , o comportamento provenha de um algoritmo de ramificação e limite, mas não encontrei nenhuma confirmação disso. pNlog(N)pN2
NRH