简体   繁体   English

先验中的R修剪规则

[英]R pruning rules in a priori

I am doing data mining with rules asociation using a priori (library arules) in r. 我正在使用r中的先验(库规则)通过规则关联进行数据挖掘。

I want to convert a factor in dummy variables, eg, color = {red, blue, green} I'll do three new variables that for each instance will be like (red= Yes, blue=No, green=No). 我想在虚拟变量中转换一个因子,例如color = {red,blue,green}我将为每个实例创建三个新变量(red =是,blue = No,green = No)。

When I do a priori I have the problem of redundant rules like red=Yes => green=No or {red=Yes, green=No} => {one arbitrary irrelevant thing}. 当我做一个先验时,我会遇到冗余规则的问题,例如red = Yes => green = No或{red = Yes,green = No} => {一个任意无关的事物}。

How can I prune the rules to not obtain these redundancies? 我如何修剪规则以获得这些冗余? The dataset is pima indians diabetes (a quite famous and typical dataset). 该数据集是美洲印第安人糖尿病(一个相当著名和典型的数据集)。

library(arules)

pima<-read.csv("pima.dat",header=F,comment.char = "@")
names(pima)<-names(pima) <-c("Preg", "Plas", "Pres", "Skin", "Insu", "Mass", "Pedi", "Age", "Class")



pima$Plas<-ifelse(pima$Plas==0&pima$Class=="tested_negative",floor(mean(pima$Plas[pima$Plas!=0&pima$Class=="tested_negative"])),floor(pima$Plas))
pima$Plas<-ifelse(pima$Plas==0&pima$Class=="tested_positive",floor(mean(pima$Plas[pima$Plas!=0&pima$Class=="tested_positive"])),floor(pima$Plas))

pima$Pres<-ifelse(pima$Pres==0&pima$Class=="tested_negative",floor(mean(pima$Pres[pima$Pres!=0&pima$Class=="tested_negative"])),floor(pima$Pres))
pima$Pres<-ifelse(pima$Pres==0&pima$Class=="tested_positive",floor(mean(pima$Pres[pima$Pres!=0&pima$Class=="tested_positive"])),floor(pima$Pres))

pima$Skin<-ifelse(pima$Skin==0&pima$Class=="tested_negative",floor(mean(pima$Skin[pima$Skin!=0&pima$Class=="tested_negative"])),floor(pima$Skin))
pima$Skin<-ifelse(pima$Skin==0&pima$Class=="tested_positive",floor(mean(pima$Skin[pima$Skin!=0&pima$Class=="tested_positive"])),floor(pima$Skin))

pima$Insu<-ifelse(pima$Insu==0&pima$Class=="tested_negative",floor(mean(pima$Insu[pima$Insu!=0&pima$Class=="tested_negative"])),floor(pima$Insu))
pima$Insu<-ifelse(pima$Insu==0&pima$Class=="tested_positive",floor(mean(pima$Insu[pima$Insu!=0&pima$Class=="tested_positive"])),floor(pima$Insu))

pima$Mass<-ifelse(pima$Mass==0&pima$Class=="tested_negative",floor(mean(pima$Mass[pima$Mass!=0&pima$Class=="tested_negative"])),floor(pima$Mass))
pima$Mass<-ifelse(pima$Mass==0&pima$Class=="tested_positive",floor(mean(pima$Mass[pima$Mass!=0&pima$Class=="tested_positive"])),floor(pima$Mass))

#Discretización de las variables
pima[[ "Age"]] = ordered( cut ( pima[[ "Age"]], c(21,30,45,65,100) ) ,
                              labels = c ("Joven", "Mediana edad", "Mayor", "Viejo"))
pima[[ "Preg"]] = ordered( cut ( pima[[ "Preg"]], c(0,0.9,4,8,20),right=FALSE, include.lowest = TRUE ) ,
                          labels = c ("Ningún embarazo", "Pocos embarazos", "Bastantes embarazos", "Muchos embarazos"))
pima[[ "Pres"]] = ordered( cut ( pima[[ "Pres"]], c(0,70,92,102,110,Inf),right=FALSE, include.lowest = TRUE ) ,
                           labels = c ("hipotensión", "tensión normal", "hipertensión leve", "hipertensión media-grave", "hipertensión grave"))
pima[[ "Insu"]] = ordered( cut ( pima[[ "Insu"]], c(0,16,166,Inf),right=FALSE, include.lowest = TRUE ) ,
                           labels = c ("Insulina baja", "Insulina normal", "Insulina alta"))
pima[[ "Mass"]] = ordered( cut ( pima[[ "Mass"]], c(0,18.5,25,30,Inf),right=FALSE, include.lowest = TRUE ) ,
                           labels = c ("Bajo peso", "Peso normal", "Sobrepeso","Obesidad"))
pima[[ "Plas"]] = ordered( cut ( pima[[ "Plas"]], c(0,140,192,Inf),right=FALSE, include.lowest = TRUE ) ,
                           labels = c ("Glucosa normal", "Glucosa alta", "Glucosa muy alta"))
pima[[ "Pedi"]] = ordered( cut ( pima[[ "Pedi"]], c(0,0.37,0.6,Inf),right=FALSE, include.lowest = TRUE ) ,
                           labels = c ("Función pedigree baja", "Función pedigree normal", "Función pedigree alta"))
pima[[ "Skin"]] = ordered( cut ( pima[[ "Skin"]], c(0,15,40,Inf),right=FALSE, include.lowest = TRUE ) ,
                           labels = c ("Bajo espesor de piel", "Espesor de piel normal", "Espesor de piel alto"))
pima$Class = factor(ifelse(pima$Class=="tested_positive","Diabético","No diabético"))


library(psych)
new <- dummy.code(pima_df$Preg)
pima_df <- data.frame(new,pima_df)


pima_df<-pima_df[,-5]


pima_df[,1] <- factor(ifelse(pima_df[,1]==0, 'No', 'Sí'))
pima_df[,2] <- factor(ifelse(pima_df[,2]==0, 'No', 'Sí'))
pima_df[,3] <- factor(ifelse(pima_df[,3]==0, 'No', 'Sí'))
pima_df[,4] <- factor(ifelse(pima_df[,4]==0, 'No', 'Sí'))




pima2 <- as(pima_df, "transactions")



rules_negadas <- apriori(pima2, parameter = list(support = 0.1, confidence = 0.8, minlen = 2))
summary(rules_negadas)
inspect(head(rules_negadas))
quality(head(rules_negadas))
#Ordenar las reglas por el campo que más nos interese por ejemplo confianza
rulesSorted_negadas = sort(rules_negadas, by = "confidence")
inspect(head(rulesSorted_negadas,20))

Do not create dummy variables. 不要创建虚拟变量。 Leave color as a factor and the conversion into transactions will create the appropriate items ( color=red , color=blue and color=green ). 保留颜色作为因素,转换为交易将创建适当的项目( color=redcolor=bluecolor=green )。

If you already have dummy variables, but you don't want the negative values to become items then convert them into logical. 如果您已经有虚拟变量,但是您不希望负值成为项,则将其转换为逻辑。 Example : pima_df[,1] <- pima_df[,1] == 'Si' 示例: pima_df[,1] <- pima_df[,1] == 'Si'

Have a look at the examples in ?transactions and at https://rawgit.com/mhahsler/Introduction_to_Data_Mining_R_Examples/master/chap6.html#create-transactions to learn more about this. 请查看?transactionshttps://rawgit.com/mhahsler/Introduction_to_Data_Mining_R_Examples/master/chap6.html#create-transactions中的示例,以了解更多信息。

If you want green=yes and red=no , just not in the same rule, then you are in trouble because that is not something you can easily enforce in association rule mining. 如果您想要green=yesred=no ,而又不是同一条规则,那么您就会遇到麻烦,因为在关联规则挖掘中这不是您可以轻松实施的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM