Literatura sobre el algoritmo para la división óptima en el cultivo de árboles de clasificación.

8

En ESL , Sección 9.7, hay un párrafo que establece que el tiempo de cálculo de una división en el crecimiento de un árbol de clasificación (o regresión) generalmente se escala como donde es el número de predictores y es el número de muestraspNlogNpN

Un enfoque ingenuo da como resultado una escala , y no he podido encontrar ninguna referencia a la literatura que explique los detalles de la parte de división del algoritmo y cómo se logra una escala típica .pN2 pNlogN

En el enfoque ingenuo, se busca la división óptima para una variable dada, después de un ordenamiento inicial de los valores observados, entre los puntos medios entre los valores observados, y se puede calcular la pérdida para cada división en un tiempo que se escala como .N1N

Podría (y probablemente) estudiar el código fuente de algunas de las implementaciones que conozco, pero una referencia bibliográfica sería buena en particular con respecto a la complejidad del tiempo.

NRH
fuente

Respuestas:

2

Daré una respuesta diferente, ya que es demasiado para un comentario y trata un enfoque más general.

Entonces, en ESL, describen de hecho el tiempo de cálculo para una bifurcación (más precisamente me parece una división y conquista).

Denotamos con el número de observaciones y con el número de nodos hijos, cuando cultivamos un árbol. Supongo que no perdemos en general si consideramos que está arreglado. Además, podemos denotar con el tiempo de procesamiento para calcular puntos divididos en un nodo dado.NKKf(N)

Por lo tanto, podemos escribir recursivamente la fórmula para el tiempo de ejecución como: consideramos aquí que los nodos secundarios dividen el conjunto de datos de entrada de tamaño en subconjuntos de de igual tamaño . Sabemos que este es el mejor caso.

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

Sin embargo, podemos ver que esta es una aplicación bien conocida del Master Theorem. Esto está bien documentado en el libro CLRS . Tengo la tercera edición y los detalles están en la sección 4.5 y la prueba está en la siguiente sección. No recuerdo bien los detalles, pero recuerdo que no es demasiado complicado si uno expande la recursividad y agrupa algunos términos.

Sin embargo, lo importante para este caso es que cuando - tiempo lineal, el tiempo resultante del algoritmo es . Este tiempo se calcula para una sola variable de entrada, por lo tanto, nuestro tiempo total para las variables seríaf(N)=O(N)T(N)=O(NlogN)PO(PNlogN)

Este tiempo es alcanzable para el crecimiento de los árboles, si todas las entradas se ordenan inicialmente en , y encontrar el valor de división toma tiempo lineal en estas entradas ordenadas. Aquí podemos aplicar el algoritmo de variación en línea, como mencioné en mi respuesta anterior para . Paraes aún más fácil encontrar la mediana. Confieso que nunca probé alguna otra función de pérdida para árboles.O(PNlogN)L2=1N(yy^)2L1=1N|yy^|

Sin embargo, tenga en cuenta que el teorema maestro se aplica para el mejor caso si las divisiones son del mismo tamaño. El peor de los casos es cuando la división es muy desequilibrada. Allí, se puede aplicar un caso diferente de Master Theorem y el tiempo se convertirá en .O(PN2)

Como conclusión, supongo que los autores de ESL usan el término típicamente de una manera que se usa para describir el algoritmo de ordenación rápida. Normalmente, la ordenación rápida proporciona el tiempo de ejecución de , teniendo el peor de los casos , para algunas configuraciones de datos específicas.O(NlogN)O(N2)

Espero que ayude.

rapaio
fuente
2

Vea mi respuesta de otra pregunta aquí . Si bien no tengo referencias en papel, puedes encontrar trivialmente que para entradas numéricas de longitud tienes que:pN

  • iterar sobre todas las entradas -pO(p)
  • ordenar ascendente cada entrada -O(Nlog(N))
  • calcular 2 variaciones en ejecución, una comenzando desde la izquierda y otra comenzando desde la derecha en tiempo lineal -O(N)

El tiempo dominante para cada atributo es el tiempo de clasificación, por lo tanto tenemos .O(pNlog(N))

rapaio
fuente
+1, esta es una buena respuesta, en la que no pensé, pero presupone una pérdida cuadrática. No creo que esto pueda generalizarse a (todas) otras funciones de pérdida comunes utilizadas para los árboles de clasificación. Supongo que el típico , pero según el peor caso de ESL , el comportamiento proviene de un algoritmo de ramificación y enlace, pero no he encontrado ninguna confirmación de esto. pNlog(N)pN2
NRH