Процедура алгоритма OneR в R

Я использовал алгоритм OneR пакета FSelecter, чтобы найти атрибут с наименьшей частотой появления ошибок. Мой класс Атрибут - это да и нет. Мои характеристики атрибутов тоже да и нет.

Результат алгоритма OneR:

Ranking-No. 1

Atribut-Name: OR1: 

Matrix: ------ 0(Attribut-Characteristic)  -- 1 (Attribut Characteristics

0(Class):-------------------25243-------------------0

1(Class: -------------------1459-------------------18

Error-Rate: 1459 (0 + 1459)

Ranking-No. 2

Atribut-Name: OR2: 

Matrix: ------ 0(Attribut-Characteristic)  -- 1 (Attribut Characteristics

0(Class):-------------------25243-------------------0

1(Class: -------------------1460-------------------17

Error-Rate: 1460 (0 + 1460)

Однако, если я использую функцию корреляции в одном и том же фрейме данных, лучшие атрибуты имеют более низкий уровень ошибок, чем атрибуты, которые я получаю с помощью функции oneR.

Atribut-Name: CO4: 

Matrix: ------ 0(Attribut-Characteristic)  -- 1 (Attribut Characteristics

0(Class):-------------------25204-------------------39

1(Class: -------------------1348-------------------129

Error-Rate: 1387 (39 + 1348)

Кто-нибудь может сказать мне, почему алгоритм OneR не показывает Аттрибут CO4 как лучший Атрибут (основанный на частоте ошибок)?

Какие критерии использует алгоритм OneR?

--- Дополнение, чтобы лучше понять мой вопрос ---

Полные данные слишком велики, чтобы показать это. Я построил новый пул данных, который имеет тот же эффект

ЗАДЕРЖАНО - OR1 - CO4..

1 --------- 1 -------- 1--

0 --------- 0 -------- 0--

0 --------- 0 -------- 1--

1 --------- 0 -------- 1--

0 --------- 0 -------- 0--

1 --------- 0 -------- 1--

0 --------- 0 -------- 0--

1 --------- 0 -------- 1--

Код для отображения частоты ошибок для одного атрибута:

печать (таблица (datapool_stackru$DELAYED, datapool_stackru$OR1))

Код функции OneR:

библиотека (FSelector)

oneR_stackru <- oneR (DELAYED ~., datapool_stackru)

subset_stackru <- cutoff.k (oneR_stackru, 2)

печать (subset_stackru)

Код для корреляции:

cor (as.numeric (datapool_stackru $DELAYED), as.numeric(datapool_stackru $ OR1))

В этом случае результаты:

Коэффициент ошибок: Матрица OR1: ------ 0(Атрибут-признак) - 1 (Атрибут-признак

0 (класс): --------------------- 4 ----------------------- --0

1 (Класс: ---------------------3-------------------------1

Мануэль рассчитал коэффициент ошибок: 3(0 + 3)

Коэффициент ошибок: матрица CO4: ------ 0(Атрибут-характеристика) - 1 (Атрибут-характеристика

0 (класс): ----------------------- 3 --------------------- --1

1 (Класс: -----------------------0-----------------------4

Коэффициент ошибок: 1(1 + 0)

Соотношение: Attribut OR1: 0,377 Attribut CO4: 0,77

OneR: "OR1", "CO4"

Почему функция OneR предоставляет атрибут OR1 как лучший атрибут для классификации?

3 ответа

Хорошо, у меня есть решение. Алгоритм вычисляет сумму частоты ошибок характеристик в атрибуте (по отношению к максимальному значению характеристики)

В этом примере:

Атрибут OR1: 3/7 + 0/1 = 3/7

Аттрибут CO4: 0/3 + 1/5 = 0,2

Вы не указали типы своих данных, но я предполагаю, что у вас есть числовые значения. FSelector дискретизирует эти значения перед их использованием в oneR и кажется, что там происходят плохие вещи (что может быть ошибкой в ​​RWeka Discretize функция). Тем не менее, вам, вероятно, все равно нужны факторные переменные, а не числовые данные, поскольку у вас есть только 0-1 значения. Тогда у меня все отлично работает

> df = data.frame(delayed=factor(c(1,0,0,1,0,1,0,1)), or1 = factor(c(1,0,0,0,0,0,0,0)), co4 = factor(c(1,0,1,1,0,1,0,1)))
> library(FSelector)
> oneR(delayed~., df)
    attr_importance
or1       0.2000000
co4       0.4285714

Как вы можете видеть, co4 теперь имеет гораздо большее значение, чем or1, как и должно быть.

Нет, CO4 должен быть выбран, выбор другого атрибута неправильный - посмотрите, что дает пакет OneR (доступный в CRAN):

> library(OneR)
> DELAYED <- c(1, 0, 0, 1, 0, 1, 0, 1)
> OR1 <- c(1, rep(0, 7))
> CO4 <- c(1, 0, 1, 1, 0, 1, 0, 1)
> 
> data <- data.frame(DELAYED, OR1, CO4)
> 
> model <- OneR(formula = DELAYED ~., data = data, verbose = T)

    Attribute Accuracy
1 * CO4       87.5%   
2   OR1       62.5%   
---
Chosen attribute due to accuracy
and ties method (if applicable): '*'

> summary(model)

Rules:
If CO4 = 0 then DELAYED = 0
If CO4 = 1 then DELAYED = 1

Accuracy:
7 of 8 instances classified correctly (87.5%)

Contingency table:
       CO4
DELAYED   0   1 Sum
    0   * 3   1   4
    1     0 * 4   4
    Sum   3   5   8
---
Maximum in each column: '*'

Pearson's Chi-squared test:
X-squared = 2.1333, df = 1, p-value = 0.1441

> 
> model_2 <- OneR(formula = DELAYED ~ OR1, data = data)
> summary(model_2)

Rules:
If OR1 = 0 then DELAYED = 0
If OR1 = 1 then DELAYED = 1

Accuracy:
5 of 8 instances classified correctly (62.5%)

Contingency table:
       OR1
DELAYED   0   1 Sum
    0   * 4   0   4
    1     3 * 1   4
    Sum   7   1   8
---
Maximum in each column: '*'

Pearson's Chi-squared test:
X-squared = 0, df = 1, p-value = 1

Вы можете найти больше информации о пакете OneR здесь: https://github.com/vonjd/OneR

(полное раскрытие: я являюсь автором этого пакета)

Другие вопросы по тегам