11 votos

Encontrar reglas adecuadas para nuevos datos mediante unenfoque

Estoy usando R (y la arules paquete) para transacciones de minería de reglas de asociación. Lo que yo quiero hacer es crear las reglas y, a continuación, aplicar a los nuevos datos.

Por ejemplo, decir que tengo muchas reglas, uno de los cuales es la canónica {Beer=YES} -> {Diapers=YES}.

Entonces tengo nuevos datos transaccionales, donde uno de los registros que ha adquirido la cerveza, pero no los pañales. ¿Cómo puedo identificar una regla donde el lado izquierdo se cumple, pero no es aún el RHS?

R ejemplo:

install.packages("arules")
library(arules)

data("Groceries")
**#generate Rules omitting second record**

rules <- apriori(Groceries[-2],parameter = list(supp = 0.05, conf = 0.2,target = "rules"))

Las reglas que se generan son:

> inspect(rules)
  lhs                   rhs                   support confidence     lift
1 {}                 => {whole milk}       0.25554200  0.2555420 1.000000
2 {yogurt}           => {whole milk}       0.05603010  0.4018964 1.572722
3 {whole milk}       => {yogurt}           0.05603010  0.2192598 1.572722
4 {rolls/buns}       => {whole milk}       0.05664023  0.3079049 1.204909
5 {whole milk}       => {rolls/buns}       0.05664023  0.2216474 1.204909
6 {other vegetables} => {whole milk}       0.07484238  0.3867578 1.513480
7 {whole milk}       => {other vegetables} 0.07484238  0.2928770 1.513480

La segunda transacción de muestra de este cliente, ya que ellos tienen el yogur, pero no la leche entera tal vez se debe enviar un cupón para la leche. Cómo puede cualquier norma aplicable en las "reglas" que se encuentra para las nuevas transacciones?

> LIST(Groceries[2])
[[1]]
[1] "tropical fruit" "yogurt"         "coffee" 

19voto

Xenph Yan Puntos 20883

La clave es la función de is.subset en el mismo paquete

Aquí está el código...

basket <- Groceries[2]
# find all rules, where the lhs is a subset of the current basket
rulesMatchLHS <- is.subset(rules@lhs,basket)
# and the rhs is NOT a subset of the current basket (so that some items are left as potential recommendation)
suitableRules <-  rulesMatchLHS & !(is.subset(rules@rhs,basket))

# here they are
inspect(rules[suitableRules])

# now extract the matching rhs ...
recommendations <- strsplit(LIST(rules[suitableRules]@rhs)[[1]],split=" ")
recommendations <- lapply(recommendations,function(x){paste(x,collapse=" ")})
recommendations <- as.character(recommendations)

# ... and remove all items which are already in the basket
recommendations <- recommendations[!sapply(recommendations,function(x){basket %in% x})]

print(recommendations)

y la salida generada...

> inspect(rules[suitableRules])
  lhs         rhs            support confidence     lift
1 {}       => {whole milk} 0.2555420  0.2555420 1.000000
2 {yogurt} => {whole milk} 0.0560301  0.4018964 1.572722

> print(recommendations)
[1] "whole milk"

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