PiPSSI/L/z3

From WikiZMSI

< PiPSSI | L

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.