LogicForest
Autor: Gabriel Janik
Co to LogicForest
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:
LBOOST - tworzy zbiór modeli drzew regresyjnych przy użyciu boostingu
LOGFOREST - tworzy zbiór modeli drzew regresyjnych za pomocą baggingu
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
Użycie:
LBoost(resp, Xs, nBS, kfold , nperm ,PI.imp, pred.imp )
Najważniejsze Parametry:
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
Użycie:
logforest( resp, Xs, nBSXVars, nBS, h,norm , numout)
Najważniejsze Parametry
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
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
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
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
LF.testdata - gotowy zbiór danych testowych do wykorzystania podczas przewidywania za pomocą modeli LBOOST i LOGFOREST
Użycie:
data(LF.data)
predict
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.
presistence.plot
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
Boostvimp.plot
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
Przykłady użycia poszczególnych funkcji:
LBOOST
data(LBoost.fit)
print(LBoost.fit)result:
Powyższe funkcje kolejno: tworzą podstawowy model LBOOST oraz drukują jego zawartość.
BoostVimp.plot
data(LBoost.fit)
BoostVimp.plot(fit=LBoost.fit, num=10,pred=TRUE, norm=TRUE, titles=TRUE)
result:
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
Tworzenie modelu LBoost
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:
zmiana parametrów:
parametr PI.imp = “AddRemove”
Parametr PI.imp= „Both”
Powyższy podpunkt prezentuje tworzenie własnego modelu LBOOST przy różnych parametrach.
Tworzenie modelu LogicForest
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:
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.
Persistence.plot
data(logforest.fit)
persistence.plot(fit=logforest.fit, pred=50, PI="X5", title="wystąpienia X5 in logic forest")
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")
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")
Tym razemużyliśmy własnoręcznie robionego modelu logic forest z 20 drzewami i 2500 iteracjami
predictions
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:
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])
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:
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])
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