Пакетные правила в R: получение правил только с одним элементом в левой части

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

Если я сделаю это:

rules <- apriori(dtm.mat, parameter = list(sup = 0.4, conf =
0.9,target="rules"), appearance = list(lhs = c("potatoe")))

Я получаю «картошку» на левой стороне, но также и все остальное. Как заставить правила содержать только один элемент? Параметр maxlen не делает того, что я хочу, потому что, насколько я понимаю, я не могу указать maxlen для применения к элементам слева.


person user2405243    schedule 21.05.2013    source источник


Ответы (4)


Предполагая, что вы создали правила («правила» в вашем вопросе), вот как их подмножить. По сути, вам нужно принудительно ввести данные во фрейм данных, а затем подмножить их.

#Here are the original rules generated with some data I created
# categories are "G", "T", "D", and "potatoe"

> inspect(rules);
lhs        rhs      support    confidencelift
1  {}  => {T}       0.3333333  0.3333333 1.0000000
2  {}  => {G}       0.5000000  0.5000000 1.0000000
3  {}  => {potatoe} 0.5000000  0.5000000 1.0000000
4  {}  => {D}       0.5000000  0.5000000 1.0000000
5  {T} => {G}       0.1666667  0.5000000 1.0000000
6  {G} => {T}       0.1666667  0.3333333 1.0000000
7  {T} => {D}       0.1666667  0.5000000 1.0000000
8  {D} => {T}       0.1666667  0.3333333 1.0000000
9  {G} => {potatoe} 0.1666667  0.3333333 0.6666667
10 {potatoe} => {G} 0.1666667  0.3333333 0.6666667
11 {potatoe} => {D} 0.3333333  0.6666667 1.3333333
12 {D} => {potatoe} 0.3333333  0.6666667 1.3333333

#Coerce into data frame
as(rules, "data.frame");

#Restrict LHS to only certain value (here, "potatoe")
rules_subset <- subset(rules, (lhs %in% c("potatoe")));

#Check to see subset rules
inspect(rules_subset);
lhs            rhs support    confidencelift
1 {potatoe} => {G} 0.1666667  0.3333333 0.6666667
2 {potatoe} => {D} 0.3333333  0.6666667 1.3333333

Этот метод также допускает произвольное множество значений LHS, а не только одно. Гораздо проще, чем мой ранее предложенный ответ.

person user2432675    schedule 05.06.2013
comment
Для чего эта строка? как (правила, data.frame); - person cloudscomputes; 28.10.2019

Приятель, тебе просто нужно добавить default="rhs" в список параметров внешнего вида, и все готово.

rules <- apriori(dtm.mat, parameter = list(sup = 0.4, conf =
0.9,target="rules"), appearance = list(lhs = c("potatoe"), default="rhs"))

Параметр lhs=c("potatoe") сообщает алгоритму, что LHS должен содержать только «картофель», а параметр default="rhs" сообщает алгоритму, что RHS должен быть по умолчанию (т. е. там не должны применяться никакие ограничения).

person pazof    schedule 11.11.2013

Функция subset() предоставляет метод для поиска подмножеств транзакций, элементов или правил.

potatoerules <- subset(rules , items %in% "potatoe")
person Patricio Nicola    schedule 04.10.2017

Вот один из способов:

  1. Сгенерируйте список правил, используя inspect().
  2. Скопируйте все правила в текстовый редактор.
  3. Сохранить как файл .txt.
  4. Открыть в Excel как файл с разделителями фиксированной ширины.
  5. Отфильтруйте LHS, чтобы включить только «картофель» [так в оригинале].

Может быть, есть более простой способ, но, по крайней мере, вам не придется вручную искать «картофель» [так в оригинале] слева.

person user2432675    schedule 29.05.2013