Parece que la concepción de que el número de " me gusta como están relacionados con una combinación ponderada de las etiquetas.
Uno de los más simples, tales modelos se asocia un número (el "peso") $\beta_i$ tag $i$. Cuando la etiqueta de $i$ aparece en la lista de etiquetas para una observación en el conjunto de datos, que contribuye con su peso $\beta_i$ a una suma, $\lambda$. Por razones técnicas, así como la experiencia con cómo los datos, como se comportan, es el convencional supongamos que el número esperado de "me gusta" es igual a la exponencial de a $\lambda$. Si la votación de las observaciones es independiente, el número de "me gusta" tendrá una distribución de Poisson. Su objetivo es estimar el peso de los datos. Esto se hace con un modelo lineal generalizado (aka "GLM"). Es por lo general se ajustan mediante la elección de las estimaciones de la $\hat\beta_i$ que maximizan la probabilidad de que el modelo. El "más valioso" etiquetas serán aquellos con el mayor de los pesos, que probablemente se encuentra entre aquellos con el mayor de los pesos estimados.
Como un ejemplo, mientras escribía el párrafo anterior me encaja como un modelo para una síntesis de conjunto de datos de más de 90.000 registros con 676 distintas etiquetas. He creado este conjunto de datos mediante la especificación de la $\beta$ y la generación de los números de "me gusta" de acuerdo con el modelo. En promedio, hubo cinco etiquetas y 15 likes por la observación. El cálculo se tomó tres minutos. Los resultados indican que casi todos los coeficientes $\hat\beta_i$ son significativamente distinto de cero. La correlación entre el real $\beta_i$ y sus estimaciones es excelente, ya que el diagrama de dispersión, atestigua.
La programación es casi trivial. Aquí están las R
comandos para ajustar el modelo y mostrar sus resultados:
model <- glm(Y ~ ., data=X, family=poisson)
summary(model)
Para aprender más, la investigación "GLM" y de Poisson de modelos lineales generalizados en este sitio y/o experimento con la plena R
código de abajo. Es probable que usted va a querer investigar "interacciones" entre las etiquetas antes de que esté plenamente satisfecho con el modelo.
#
# Create tags data.
# `X` has one column per tag to indicate its presence (1) or absence (0).
# It has one more column `Y` giving the count of likes.
#
n.obs <- 1e5 # Maximum number of observations (some will be omitted)
tags <- apply(as.matrix(expand.grid(letters, letters)), 1, paste0, collapse="")
n.tags <- length(tags)
tag.frequencies <- runif(n.tags, 0, min(1, 5/n.tags))
X <- data.frame(t(matrix(rbinom(n.obs * n.tags, 1, tag.frequencies), n.tags)))
names(X) <- tags
X <- X[rowSums(X) > 0, ]
#plot(tag.frequencies, colMeans(X)) # Check correctness
#
# Create responses.
# `beta` is the vector of tag weights. They are allowed to be negative!
#
beta <- rbeta(n.tags, 1, 3) * 2.5 - 0.5
beta.0 <- 2
X$Y <- as.matrix(X) %*% beta + beta.0
X$Y <- rpois(nrow(X), exp(X$Y))
hist(log10(X$Y)) # Show the distribution of likes
#
# Fit a model.
#
model <- glm(Y ~ ., data=X, family=poisson)
summary(model)
#
# Compare its estimates to the true values of `beta`.
#
plot(c(beta.0, beta), coef(model), xlab="Beta", ylab="Estimated Beta")
#
# List the most valuable tags and their weights.
# NB: the list may include the intercept. Its value merely reflects the
# typical number of likes.
#
i <- order(coef(model))
(coef(model))[tail(i)]