PiPSSI/L/z3
From WikiZMSI
[edytuj]
Do domu
Zaimplementować jako "klasyfikator" do WEKI algorytm regresji wielomianowej z regularyzacją L2.
Wytyczne:
- Wskazówki programistyczne (jaką klasę odziedziczyć, jak osadzić klasę w WEKA Explorer, itp.) znajdują się w pliku .pdf z wykładów.
- Wprowadzić dwa parametry: m (stopień wielomianu), lambda (współczynnik regularyzacji).
- Przydatne może być napisanie kilku metod dotyczących kombinatoryki do wygenerowania baz wielomianowych. Np. metoda generująca kombinacje w ogólności "n po k", poprzez którą można będzie potem wygenerować kombinacje z powtórzeniami "n + m po n". Taka metoda może zwracać np. listę list: public static List<List<Integer>> getNChooseK(int n, int k). Wynikowe kombinacje będzie można dalej przełożyć na termy wielomianu z odpowiednimi wykładnikami potęg przy poszczególnych x'ach.
- W metodzie uczącej "klasyfikator" (tak naprawdę maszynę do regresji) - buildClassifier(Instances) - posłużyć się biblioteką macierzową dla Javy jscience. Sama biblioteka jest zawarta w pliku .jar pod adresem: http://www.jscience.org/jscience-5.0-SNAPSHOT.jar. Plik należy ściągnąć i podpiąć w projekcie Eclipse jako library. Dokumentację API tejże biblioteki można przeglądać pod adresem http://www.jscience.org/api/index.html. Poniżej przykład budujący obiekt typu macierz na podstawie dwuwymiarowej macierzy doubli (tu akurat macierz z lambdami na przekątnej):
double[][] L = new double[q][q]; for (int i = 0; i < q; i++) for (int j = 0; j < q; j++) L[i][j] = ((i == j) && (i > 0)) ? lambda : 0.0; Matrix<Float64> LMatrix = Matrix.valueOf(L);
- Dalej, macierze można dodawać (plus), mnożyć (times), odwracać (inverse), transponować (transposte), itp.
- W szczególności zaimplementować metodę toString(), która wyświetli postać modelu (współczynniki wraz z odpowiadającymi im termami) w WEKA po wykonaniu nauki. Fragment przykładu:
-0.7000065612680118 * 1.0 0.08752401367999907 * MYCT 0.004796574479147275 * MMIN 9.84729648587035E-4 * MMAX 1.000435536395976 * CACH 3.635769766491819 * CHMIN 0.9524935940499333 * CHMAX -5.620145010951788E-5 * MYCT^2 -1.1142107001917319E-5 * MYCT * MMIN -4.1993477180343026E-7 * MYCT * MMAX ... (itd.)
- Metoda toString() powinna także wyświetlać sumę kwadratów wag (tak aby m.in. zobaczyć, czy regularyzacja pomniejsza wagi).
- Ustawić odpowiednio Capabilities (metoda getCapabilities), tak aby algorytm pracował tylko na zmiennych numerycznych (również zmienna y ma być numeryczna). W efekcie algorytm ma być widoczny jako aktywny w WEKA tylko przy zbiorach danych, które spełniają w/w warunki.
- Działanie metody przetestować na zbiorach cpu.arff oraz sin.arff (sin.txt, po pobraniu zmienić rozszerzenie na .arff).
- Dla stopnia m = 1 porównać wartości otrzymywanych współczynników w z istniejącym w WEKA algorytmem LinearRegression.