2016-11-27 3 views
3

Моя цель состоит в использовании правил, генерируемых пакетом R arules, для прогнозирования topic каждой транзакции (каждая транзакция имеет 1 тему), где каждая транзакция представляет собой набор слов в документ. У меня есть обучающий набор trans.train (используется для создания правил) и набор тестов trans.test (который я хочу предсказать «тема»). Я также хотел бы иметь возможность проверить эти прогнозы (процент правильной стороны правильной темы).Применение правил, созданных из arules в R, к новым транзакциям

Я могу гарантировать, что правая часть каждого правила является темой (например, тема = заработать), а левая сторона - любое другое слово в документе. Так что все мои правила имеют вид:

{word1,...,wordN} -> {topic=topic1} 

Я отсортированный правила и хотите применить их к trans.test так, что правило с наивысшим доверием предсказывает правую сторону, но я не могу понять, как для этого, основываясь на документации.

Есть ли идеи о том, как я могу это реализовать? Я видел пакет arulesCBA, но он реализует более сложный алгоритм, тогда как я хочу использовать только правило с наивысшим доверием в качестве своего предсказателя topic.

код, который генерирует сделки:

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(trans.train[3]) 

    items   transactionID 
[1] {topic=coffee,    
    current,     
    meet,      
    group,      
    statement,     
    quota,      
    organ,      
    brazil,      
    import,      
    around,      
    five,      
    intern,      
    produc,      
    coffe,      
    institut,     
    reduc,      
    intent,      
    consid}    8760 

Пример правила:

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

ответ

1

Я сомневаюсь, что ассоциативные правила для слов и простого доверия меры идеально подходят для прогнозирования тем документа.

Это, как говорится, попробуйте использовать функцию 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([email protected],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([email protected]) 
+1

Это хорошо работает, спасибо за простое решение. К вашему 1-ому пункту я изучаю, как классификация с правилами ассоциации сравнивается с более оптимизированными классификаторами (дерево решений и т. Д.), Учитывая, что он может принимать во внимание ссылки/зависимость между предикторными переменными. Поскольку ожидаемая точность (для этого приложения) была хуже, но время было очень быстрым! – Magic8ball

1

В это предстоящем выпуске, то R пакет arulesCBA поддерживает этот тип функциональности, вы должны когда-нибудь понадобится снова в будущем.

В текущей версии разработки arulesCBA имеет функцию cBA_ruleset, которая принимает отсортированный набор правил и возвращает объект класса CBA.

Смежные вопросы