LogicForest, pk niestac 2st IIsem, INI


LogicForest

Autor: Gabriel Janik

LogicForest Jest To złożony z wielu drzew Klasyfikator służący przewidywania kombinacji binarnych. LogicForest bazuje na modelach Logic Regression. Modele te są efektywne lecz produkują dużo Noise Data czyli danych śmieciowych, a LogicForest pozbywa się tych danych poprzez nadawanie poszczególnym klasyfikatorom wagi w zależności od poprawności wyników jakie dawały bądź stosując regułę większości.

uruchamianie

Rozpoczynamy pracę ściągając pakiet ze strony:
http://cran.r-project.org/web/packages/LogicForest/index.html

Następnie Uruchamiamy środowisko R i w klikamy menu packages->install packages from zip następnie szukamy uprzednio ściągniętego pliku i wybieramy go. Program zrobi za nas resztę.

Abu wykorzystać nasz nowy pakiet należy go załadować w następujący sposób (wszystkie pakiety ładujemy tak samo)

Library(`LogincForest');

Nasz pakiet jest gotowy do użycia.

Modele LogicForest

W pakiecie LogicForest Dostajemy do wyboru 2 modele:

Boosting - połączenie prostych i często nieefektywnych klasyfikatorów w grupę, i nadawanie poszczególnym klasyfikatorom wagi w celu uzyskania jak najlepszego wyniku.

Bagging - połączenie prostych klasyfikatorów w grupę, lecz w przeciwieństwie to boostingu nie przydziela im się wag. Rezultat otrzymuje się przez głosowanie ,tzn. wynik jaki dało najwięcej klasyfikatorów uznaje się za właściwy (Majority vote).

LBOOST

LBoost(resp, Xs, nBS, kfold , nperm ,PI.imp, pred.imp )

resp - binarny wektor przechowujący dane wejściowe
Xs - macież 0 i 1
nBS - ilość drzew logicznych w modelu
kfold - ile razy dane mają być dzielone przy tworzeniu zbioru drzew
nperm - ilość permutacji
PI.imp - skala używana do mierzenia wagi poszczególnych klasyfikatorów. Możliwe wartości „Permutation” ,„AddRemove” i „Both”
pred.imp = czy zapisać wage drzew

logforest( resp, Xs, nBSXVars, nBS, h,norm , numout)

resp - binarny wektor przechowujący dane wejściowe
Xs - macież 0 i 1
nBSXVars - ilość klasyfikatorów potrzebna do zbudowania jednego modelu regresyjnego
nBS - ilość drzew logicznych w modelu
h - numer pomiędzy 0 a 1 - minimalna ilość drzew, które muszą odpowiedzieć 1 by cały model zwrócił 1
numout - ilość iteracji

LBOOST.fit jest to przykładowy zawarty w pakiecie model LBOOST. Składa się on ze 100 drzew i 2 iteracji.

Użycie modelu jest bardzo szybkie i nieskomplikowane dlatego zaleca się to osobom początkującym i wygląda następująco:

data(LBOOST.fit)

LOGFOREST.fit Podobnie jak w przypadku LBOOST.fit jest przykładowym zawartym w pakiecie modelem składającym się ze 100 drzew.

Użycie modelu wygląda analogicznie jak w przypadku LBOOST.fit

data(LOGFOREST.fit)

LF. Data - gotowy zbiór danych kontrolnych możliwy do użycia podczas tworzenia modelu LBOOST bądź LOGFOREST.

Użycie:

data(LF.data)

LF.testdata - gotowy zbiór danych testowych do wykorzystania podczas przewidywania za pomocą modeli LBOOST i LOGFOREST

Użycie:

data(LF.data)

Funkcja predict służy do przewidywania ciągu binarnego na podstawie wybranego modelu.Składnia Funkcji predict wygląda następująco:

predict(obiect, newdata,testdata)

obiect - model na podstawie którego chcemy przewidywać

newdata - dane na podstawie jakich przewidujemy

testdata - jak sama nazwa wskazuje dane testowe :-)

Ciąg znaków będący listą przewidzianych wartości zwracany jest jako obiekt klasy LBOOST.predictions lub LF.predictions w zależności jakim modelem posługiwaliśmy się podczas przewidywania.

Przykłady:

LBOOST:

data(LF.data, LF.testdata, Lboost.fit)
#LF.data - dane źródłowe
#LF.testdata - dane testowe
#LBOOST.fit - przykładowy model LBOOST
predict(object=LBoost.fit, newdata=LF.testdata[,1:50])

LOGFOREST:

data(LF.data, LF.testdata, LOGFOREST.fit)
#LF.data - dane źródłowe
#LF.testdata - dane testowe
#LOGFOREST.fit - przykładowy model LOGFOREST
predict(object=LOGFOREST .fit, newdata=LF.testdata[,1:50])

Funkcja wypisuje na ekran to co prześlemy jej jako parametr. W przypadku podania modeli LBOOST lub LOGFOREST funkcja wyświetla właściwości danego modelu, najważniejsze klasyfikatory .
W przypadku gdy jako parametr podamy obiekt klasy LF.predictions funkcja wyświetli nam wartości przewidziane we wcześniejszym wywołaniu funkcji predict.

Funkcja rysuje wykres zawierający częstotliwość występowania poszczególnych drzew w iteracjach w modelu Logforest lub LBoost;

Użycie:

persistence.plot(fit, preds, PI, title)

parametry:

fit - obiekt klasy LBoost bądź Logforest
preds - ilość drzew w modelu
PI - szukane drzewo(zmienna)
Title - tytuł wykresu

Funkcja Rysuje wykres przedstawiający wagę poszczególnych klasyfikatorów oraz iteracji. W zależności od podanych parametrów może ona wygenerować od 1 do 3 wykresów.

Użycie:

BoostVimp.plot(fit, num, pred, norm=TRUE, titles=TRUE)

Parametry:

Fit- obiekt klasy LBoost

Num- ilość klasyfikatorów uwzględnionych w wykresie

Pred- zmienna logiczna mówiąca czy konstruować osobne w ykresy dla każdego klasyfikatora

Norm- zmienna logiczna mówiąca czy normalizować wynik

Titles- kolejna zmienna logiczna mówiąca nam czy nadawać tytuły poszczególnych wykresom

data(LBoost.fit)
print(LBoost.fit)
result:

0x01 graphic

Powyższe funkcje kolejno: tworzą podstawowy model LBOOST oraz drukują jego zawartość.


data(LBoost.fit)
BoostVimp.plot(fit=LBoost.fit, num=10,pred=TRUE, norm=TRUE, titles=TRUE)

result:

0x01 graphic

0x01 graphic

data(LBoost.fit)
BoostVimp.plot(fit=LBoost.fit, num=10,pred=
FALSE, norm=TRUE, titles=TRUE)

Po następującej modyfikacji uzyskano tylko wykres 1


data(LBoost.fit)
BoostVimp.plot(fit=LBoost.fit, num=10,pred=TRUE, norm=
FALSE, titles=TRUE)

Po następującej modyfikacji uzyskano tylko wykres 2

data(LF.data)

newanneal<-logreg.anneal.control(start=1, end=-2, iter=2500)

LBfit.1<-LBoost(resp=LF.data$Ybin, Xs=LF.data[,1:50], nBS=20, kfold=4,anneal.params=newanneal, nperm=2,PI.imp="ddRemove")

print(LBfit.1)# print modelu

result:

0x01 graphic

zmiana parametrów:

parametr PI.imp = “AddRemove”

0x01 graphic

Parametr PI.imp= „Both”

0x01 graphic

Powyższy podpunkt prezentuje tworzenie własnego modelu LBOOST przy różnych parametrach.

data(LF.data)

newanneal<-logreg.anneal.control(start=1, end=-2, iter=2500)

LF.fit1<-logforest(resp=LF.data$Ybin, Xs=LF.data[,1:50], nBS=20,

anneal.params=newanneal)

print(LF.fit1)

result:

0x01 graphic

Powyżej stworzyliśmy model LogForest przy użyciu przykładowych danych LF.data składający się z 20 drzew oraz 2500 iteracji.powyższy screen pokazuje nam 5 najważniejszych drzew i iteracji.

data(logforest.fit)

persistence.plot(fit=logforest.fit, pred=50, PI="X5", title="wystąpienia X5 in logic forest")

0x01 graphic

Wykres Przedstawia wystąpienia drzewa X5 w iteracjach domyślnie stworzonego modelu LOGFOREST

data(LBoost.fit)

persistence.plot(fit=LBoost.fit, pred=50, PI="X5", title="wystąpienia X5 in LBoost")

0x01 graphic

Wykres analogiczny do poprzednika , jednak tym razem użyty został przykładowy model LBOOST

data(LF.data)

newanneal<-logreg.anneal.control(start=1, end=-2, iter=2500)

LF.fit1<-logforest(resp=LF.data$Ybin, Xs=LF.data[,1:50], nBS=20,

anneal.params=newanneal)

persistence.plot(fit=LF.fit1, pred=50, PI="X5", title="wystąpienia X5 in logic forest")

0x01 graphic

Tym razemużyliśmy własnoręcznie robionego modelu logic forest z 20 drzewami i 2500 iteracjami

data(LF.data, LF.testdata, LBoost.fit)

predict(object=LBoost.fit, newdata=LF.testdata[,1:50])

Używając losowych danych, losowych danych testowych oraz domyślnego modelu LBOOST przewidujemy następujący ciąg:

0x01 graphic

Postępujemy tak samo postępujemy używając podstawowego modelu LOGFOREST:

data(LF.data, LF.testdata, logforest.fit)

predict(object= logforest.fit, newdata=LF.testdata[,1:50])

0x01 graphic

Powyższe funkcje predict na podstawie danych źródłowych (L.data)oraz modelu do klasyfikacji (logicforest.fit lub LBoost.fit) przewidują kolejne wartości jakie przyjąłby zbiór źródłowy I umieszczają je w zmiennej LF.testdata.

data(LF.data, LF.testdata)

newanneal<-logreg.anneal.control(start=1, end=-2, iter=2500)
LBfit.1<-LBoost(resp=LF.data$Ybin, Xs=LF.data[,1:50], nBS=20, kfold=4,anneal.params=newanneal, nperm=2, PI.imp="Permutation")

predict(object= LBfit.1, newdata=LF.testdata[,1:50])

Powyższy kod używa własnoręcznie tworzonego modelu LBoost składającego się z 20 klasyfikatorów oraz 2500 iteracji do przewidzenia kolejnych wartości zbioru źródłowego LF.data.

Wynik wygląda następująco:

0x01 graphic

Teraz zrobimy to samo ale z użyciem własnego modelu Logforest:

data(LF.data, LF.testdata)

newanneal<-logreg.anneal.control(start=1, end=-2, iter=2500)

LF.fit1<-logforest(resp=LF.data$Ybin, Xs=LF.data[,1:50], nBS=20,anneal.params=newanneal)

predict(object= LBfit.1, newdata=LF.testdata[,1:50])

0x01 graphic

Jak widać wyniki chociaż bazowały na tych zamych danych źródłowych różnią sie troszeczkę. Mając dostęp do całego zbioru danych z którego pochodzi zbiór źródłowy nożna porównać który model jest lepszy.

Z literatury jednak wiadomo iż LBoost jest lepszy od Logforest gdyż bazuje na boostingu, który jest efektywniejszą metodą klasyfikacji niż bagging.

Spis treści

LogicForest

4 | Strona



Wyszukiwarka