7 votos

¿Cómo uno se adapta más fácilmente?

Esta es una pregunta extraña, lo sé.

Yo sólo soy un noob y tratando de aprender acerca de diferentes clasificador opciones y cómo funcionan. Así que me voy a hacer la pregunta:

Dado un conjunto de datos de n1-dimensiones y n2-observaciones donde cada observación se pueden clasificar en n3-cubos, que el algoritmo de manera más eficiente (idealmente con un solo entrenamiento iteración) produce un modelo de clasificación de límite) que sería perfectamente clasificar cada observación del conjunto de datos (completamente overfit)?

En otras palabras, ¿cómo hace uno más fácilmente overfit?

(Por favor, no me criticaban en 'no sobreajuste'. Esto es sólo teórico para fines educativos.)

Tengo la sospecha de que la respuesta es algo como esto: "Bueno, si el número de dimensiones es mayor que el número de observaciones, el uso de X algoritmo para dibujar la frontera(s), de lo contrario usar Y algoritmo".

También tengo la sospecha de que la respuesta va a decir: "Usted puede dibujar un suave límite, pero que computacionalmente más costoso que el dibujo de líneas rectas entre todos los diferentes clasifican las observaciones."

Pero eso es como lo que mi intuición me guíe. Puede usted ayudar?

He dibujado a mano ejemplo de lo que yo creo que estoy hablando en 2D con clasificación binaria.

Básicamente, dividir la diferencia, ¿verdad? ¿Qué algoritmo de manera eficiente para n-dimensiones?

Basically just split the difference, right? What algorithm does this efficiently?

8voto

mclaughlinj Puntos 1099

Mientras todas las observaciones son únicos, entonces K-vecinos más cercanos con K set a 1 y con cualquier válido distancia métrica dará un clasificador que encaja perfectamente con el conjunto de entrenamiento (desde el vecino más cercano de cada punto en el conjunto de entrenamiento es trivialmente, sí). Y es, probablemente, el más eficiente, ya no la formación a todo lo que se necesita.

Es que la manera más eficiente para codificar el Límite? Probablemente en lo cierto? Ya no sabemos si los datos son completamente al azar o no, el uso de la datos como el modelo codificado con el algoritmo KNN es probablemente el mejor que generalmente se puede hacer. A la derecha?

Es el más eficiente en el tiempo, pero no necesariamente la más espacio eficiente.

5voto

icelava Puntos 548

Usted no puede.

Al menos no en general, a la medida que quieras, si quieres un perfecto ajuste con datos arbitrarios y arbitraria de la dimensionalidad.

Como un ejemplo, supongamos que tenemos $n_1=0$ predictor dimensiones (es decir, ninguno en absoluto) y $n_2=2$ observaciones clasificadas en $n_3=2$ cubos. Las dos observaciones se clasifican en dos diferentes cubos, es decir, "chocolate" y "vainilla".

Puesto que usted no tiene ninguna predictores, usted no será capaz de clasificar a la perfección, período.


Si usted tiene al menos un predictor que toma diferentes valores en cada observación, entonces usted puede, de hecho, overfit arbitrariamente mal, simplemente utilizando arbitrariamente alta polinomio de pedidos para un numéricos de predicción (si el predictor es categórico con diferentes valores en cada observación, usted ni siquiera necesita para transformar). La herramienta o modelo es bastante secundario. Sí, es fácil para overfit.

Aquí es un ejemplo. El 10 observaciones son completamente independientes de la numérico único predictor. Encajamos cada vez más complejo regresiones logísticas o de los poderes de la predictor y clasificar el uso de un umbral de 0.5 (que no es una buena práctica). Correctamente equipadas puntos están marcados en verde, incorrectamente ajustado en color rojo.

overfitting

R código:

nn <- 10
set.seed(2)

predictor <- runif(nn)
outcome <- runif(nn)>0.5

plot(predictor,outcome,pch=19,yaxt="n",ylim=c(-0.1,1.6))
axis(2,c(0,1),c("FALSE","TRUE"))

orders <- c(1,2,3,5,7,9)
xx <- seq(min(predictor),max(predictor),0.01)

par(mfrow=c(3,2))
for ( kk in seq_along(orders) ) {
    plot(predictor,outcome,pch=19,yaxt="n",ylim=c(-0.2,1.2),main=paste("Order:",orders[kk]))
    axis(2,c(0,1),c("FALSE","TRUE"))

    model <- glm(outcome~poly(predictor,orders[kk]),family="binomial")
    fits_obs <- predict(model,type="response")
    fits <- predict(model,newdata=data.frame(predictor=xx),type="response")

    lines(xx,fits)
    correct <- (fits_obs>0.5 & outcome) | ( fits_obs<0.5 & !outcome)
    points(predictor[correct],outcome[correct],cex=1.4,col="green",pch="o")
    points(predictor[!correct],outcome[!correct],cex=1.4,col="red",pch="o")
}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X