Моя цель состоит в использовании правил, генерируемых пакетом 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-ому пункту я изучаю, как классификация с правилами ассоциации сравнивается с более оптимизированными классификаторами (дерево решений и т. Д.), Учитывая, что он может принимать во внимание ссылки/зависимость между предикторными переменными. Поскольку ожидаемая точность (для этого приложения) была хуже, но время было очень быстрым! – Magic8ball