Klasyfikacja według algorytmu 1R polega na wyborze jednej cechy (reguły), która najlepiej dzieli zbiór danych na klasy. Algorytm 1R sprawdza wszystkie możliwe wartości każdej cechy i oblicza liczbę błędów klasyfikacji dla każdej z nich. Następnie wybiera tę cechę i tę wartość, która minimalizuje liczbę błędów. Algorytm 1R jest prosty i szybki, ale nie zawsze daje dokładne wyniki.
library(OneR)
library(dplyr)
load("C:/Users/mbuko/OneDrive/Dokumenty/credit.RData")Cześć zmiennych jakościowych występujących w zborze danych
credit kodowana jest w postaci liczb. W związku z tym
traktowane są przez R jako zmienne ilościowe. Do zmiennych tych należą -
rata_%dochodu, zamieszkanie, l_kredytow, l_osob. W ramach
przygotowania danych zmienne te zamieniono na zmienne czynnikowe z
wykorzystaniem funkcji as.factor. W dalszej kolejności
zbiór danych podzielono na zbiór uczący i zbiór testowy w proporcji 75%
- 25%.
credit$`rata_%doch`<-as.factor(credit$`rata_%doch`)
credit$zamieszkanie<-as.factor(credit$zamieszkanie)
credit$l_kredytow<-as.factor(credit$l_kredytow)
credit$l_osob<-as.factor(credit$l_osob)
set.seed(121) # for reproducibility
random <- sample(1:nrow(credit), 0.75 * nrow(credit))Podstawą klasyfikacji z wykorzystaniem klasyfikatora One R są zmienne jakościowe - zmienne ilościowe muszą zosatać dyskretyzowane.
data_train<-bin(credit[random, ], 3)
table(data_train$jakosc)##
## dobry zly
## 534 216
table(data_train$konto_czekowe, data_train$jakosc)##
## dobry zly
## < 0 107 106
## >200 39 9
## 0-200 127 73
## brak 261 28
Klasyfikacja na podstawie klasyfikatora OneR polega na przypasaniu atrybutu decyzyjnego na podstawie 1 cechy (predyktora), dla którego jakość klasyfikacji jest najlepsza. Poniżej przedstawiono dokładność klasyfikacji przeprowadzonej na podstawie wszystkich predyktorów.
model_train <- OneR(data_train, verbose = TRUE)##
## Attribute Accuracy
## 1 * historia 73.47%
## 2 kwota 72%
## 3 czas 71.47%
## 4 konto_czekowe 71.2%
## 4 cel 71.2%
## 4 oszczednosci 71.2%
## 4 staz_pracy 71.2%
## 4 rata_%doch 71.2%
## 4 plec 71.2%
## 4 poreczyciel 71.2%
## 4 zamieszkanie 71.2%
## 4 zabezpieczenie 71.2%
## 4 wiek 71.2%
## 4 inne_zobow 71.2%
## 4 rodzaj_miesz 71.2%
## 4 l_kredytow 71.2%
## 4 kwalifikacje 71.2%
## 4 l_osob 71.2%
## 4 telefon 71.2%
## 4 obcokrajowiec 71.2%
## ---
## Chosen attribute due to accuracy
## and ties method (if applicable): '*'
summary(model_train)##
## Call:
## OneR.data.frame(x = data_train, verbose = TRUE)
##
## Rules:
## If historia = brak then jakosc = zly
## If historia = istniejace_spł then jakosc = dobry
## If historia = krytyczne then jakosc = dobry
## If historia = opoznienia then jakosc = dobry
## If historia = wszystkie_spł then jakosc = zly
##
## Accuracy:
## 551 of 750 instances classified correctly (73.47%)
##
## Contingency table:
## historia
## jakosc brak istniejace_spł krytyczne opoznienia wszystkie_spł Sum
## dobry 12 * 266 * 197 * 49 10 534
## zly * 21 122 32 23 * 18 216
## Sum 33 388 229 72 28 750
## ---
## Maximum in each column: '*'
##
## Pearson's Chi-squared test:
## X-squared = 62.942, df = 4, p-value = 6.978e-13
Przeprowadzone obliczenia wskazują na to, że najlepszym predyktorem jest historia, która zapewnia dokładność klasyfikacji w zbiorze uczącym na poziomie 73.47%. Poniżej przestawiono wykres przedstawiajacy rozkład jakości kredytu w zalezności od historia.
plot(model_train)Wyodrębnienie zbioru testowego możliwe jest na podstawie poniższego kodu:
data_test <- credit[-random, ]Ocena jakości klasyfikacji może zostać przeprowadzona na podstawie macierzy macierzy błędnych klasyfikacji, która dla zmiennej Y z dwoma wariantami ma postać:
| Faktyczny + | Faktyczny - | |
|---|---|---|
| Predykcja + | TP | FP |
| Predykcja - | FN | TN |
Na podstawie macierzy możliwe jest obliczenie następujacych parametrów:
prediction <- predict(model_train, data_test)
eval_model(prediction, data_test)##
## Confusion matrix (absolute):
## Actual
## Prediction dobry zly Sum
## dobry 152 70 222
## zly 14 14 28
## Sum 166 84 250
##
## Confusion matrix (relative):
## Actual
## Prediction dobry zly Sum
## dobry 0.61 0.28 0.89
## zly 0.06 0.06 0.11
## Sum 0.66 0.34 1.00
##
## Accuracy:
## 0.664 (166/250)
##
## Error rate:
## 0.336 (84/250)
##
## Error rate reduction (vs. base rate):
## 0 (p-value = 0.5296)
Obliczony procent błędnych klasyfikacji może być porównany z procentem złych klas przy przyjęciu założenia, że wszystkie nowe obiekty posiadają klasę częściej występującą w zbiorze testowym:
table(data_test$jakosc)##
## dobry zly
## 166 84
sum(data_test$jakosc == "zly")/nrow(data_test)## [1] 0.336