将arules在R中生成的规则应用于新事务

将arules在R中生成的规则应用于新事务,r,prediction,arules,R,Prediction,Arules,我的目标是使用R包arules生成的规则来预测每个事务的主题(每个事务有一个主题),其中每个事务是文档中的一组单词。我有一个训练集trans.train(用于创建规则)和测试集trans.test(我想预测的“主题”)。我还希望能够测试这些预测(规则右侧的百分比是正确的主题) 我能够确保每个规则的右侧是一个主题(比如topic=earn),左侧是文档中的任何其他单词。所以我所有的规则都是这样的: {word1,...,wordN} -> {topic=topic1} 我已经对规则进行了分

我的目标是使用R包
arules
生成的规则来预测每个事务的
主题(每个事务有一个主题),其中每个事务是文档中的一组单词。我有一个训练集
trans.train
(用于创建规则)和测试集
trans.test
(我想预测的“主题”)。我还希望能够测试这些预测(规则右侧的百分比是正确的主题)

我能够确保每个规则的右侧是一个主题(比如topic=earn),左侧是文档中的任何其他单词。所以我所有的规则都是这样的:

{word1,...,wordN} -> {topic=topic1}
我已经对规则进行了分类,并希望将它们应用于
trans.test
,以便具有最高置信度的规则预测右侧,但我无法根据文档找出如何做到这一点

对于我如何实现这一点,有什么想法吗?我看过
arulesCBA
包,但它实现了一个更复杂的算法,而我只想使用最高置信度规则作为
主题的预测值

生成事务的代码:

library(arules)
#load data into R
filename = "C:/Users/sterl_000/Desktop/lab2file.csv"
data = read.csv(filename,header=TRUE,sep="\t")
#Get the number of columns in the matrix
col = dim(data)[2]
#Turn into logical matrix
data[,2:col]=(data[,2:col]>0)

#define % of training and test set
train_pct = 0.8
bound <- floor((nrow(data)*train_pct))    
#randomly permute rows
data <- data[sample(nrow(data)), ]   
#get training data    
data.train <- data[1:bound, ]
#get test data             
data.test <- data[(bound+1):nrow(data),]

#Turn into transaction format
trans.train = as(data.train,"transactions")
trans.test = as(data.test,"transactions")
#Create list of unique topics in 'topic=earn' format
#Allows us to specify only the topic label as the right hand side
uni_topics = paste0('topic=',unique(data[,1]))

#Get assocation rules
rules = apriori(trans.train, 
    parameter=list(support = 0.02,target= "rules", confidence = 0.5), 
    appearance = list(rhs = uni_topics,default='lhs'))

#Sort association rules by confidence
rules = sort(rules,by="confidence")

#Predict the right hand side, topic= in trans.train based on the sorted rules
一个示例规则:

> inspect(rules[1])
    lhs       rhs          support    confidence lift    
[1] {qtli} => {topic=earn} 0.03761135 1          2.871171

我怀疑单词的关联规则和简单的置信度度量是否是预测文档主题的理想方法

也就是说,尝试使用
is.subset
函数。如果没有.csv文件,我无法复制您的示例,但以下代码应基于最高置信度为您提供有关
trans.train[3]
的预测主题

# sort rules by conf (you already did that but for the sake of completeness)
rules<-sort(rules, decreasing=TRUE, by="confidence")

# find all rules whose lhs matches the training example
rulesMatch <- is.subset(rules@lhs,trans.train[3])

# subset all applicable rules
applicable <- rules[rulesMatch==TRUE]

# the first rule has the highest confidence since they are sorted
prediction <- applicable[1]
inspect(prediction@rhs)
#按conf对规则排序(您已经这样做了,但为了完整性)

规则在即将发布的版本中,R包arulesCBA支持这种类型的功能,如果您将来需要的话


在当前的开发版本中,arulesCBA有一个名为CBA_ruleset的函数,它接受一组已排序的规则并返回一个CBA Classifier对象。

这很好地工作了,感谢简单的解决方案。关于你的第一点,我正在研究关联规则分类与更优化的分类器(决策树等)相比如何,因为它能够考虑预测变量之间的链接/依赖关系。正如预期的那样(对于此应用程序),精度更差,但运行时间非常快!为了使这段代码正常工作,我将
放入.subset(…,sparse=FALSE)
。否则,我在
规则[rulesMatch==TRUE]
中遇到了一个错误。您能详细介绍一下如何使用
arulesCBA
?,谢谢!
# sort rules by conf (you already did that but for the sake of completeness)
rules<-sort(rules, decreasing=TRUE, by="confidence")

# find all rules whose lhs matches the training example
rulesMatch <- is.subset(rules@lhs,trans.train[3])

# subset all applicable rules
applicable <- rules[rulesMatch==TRUE]

# the first rule has the highest confidence since they are sorted
prediction <- applicable[1]
inspect(prediction@rhs)