-
Las losowy w zadaniu klasyfikacji.
Celem projektu jest zaimplementowanie algorytmu random forest w oparciu o drzewo decyzyjne. Program powinien wczytywać dane w jednym dowolnie wybranym formacie (hierarchię klas należy jednak zaprojektować tak, aby możliwe było dodanie w prosty sposób innego formatu danych) i umożliwiać określenie podziału tych danych na zbiór trenujący i testowy. W przypadku wystąpienia atrybutów numerycznych program powinien dokonywać dyskretyzacji takich atrybutów (w dowolny - aczkolwiek rozsądny - sposób). W projekcie należy wykorzystać wielowątkowość.
Literatura:
http://en.wikipedia.org/wiki/Random_forest
http://pl.wikipedia.org/wiki/Drzewo_decyzyjne
http://www.ise.pw.edu.pl/~cichosz/um/wyklad/wyklad3/wyklad3.html
http://www.ise.pw.edu.pl/~cichosz/um/wyklad/wyklad4/wyklad4.html
http://www.ise.pw.edu.pl/~cichosz/mow/wyklad/mow-w8/mow-w8.htmlDane:
http://archive.ics.uci.edu/ml/
http://weka.sourceforge.net/wiki/index.php/Datasets -
Drzewa regresji z dodatkowymi cięciami.
Celem projektu jest zaimplementowanie prostego algorytmu drzewa regresji. W każdym węźle drzewa dokonywany ma być binarny podział przykładów znajdujących się w tym węźle mający na celu minimializację wariancji na kolejnym poziomie. Dodatkowo w korzeniu drzewa użytkownik powinien mieć możliwość określenia alternatywnych miejsc podziału. Dla ułatwienia pracy użytkownika program powininen wyświetlić wykresy wariancji odpowiedzi dla każdego z atrybutów i umożliwić wskazanie kursorem alternatywnych miejsc podziału (w tym celu należy wykorzystać dowolną wolno dostępną bibliotekę graficzną).
Literatura:
http://www.sixsigma.pl/textbook/stathome_stat.html?http%3A%2F%2Fwww.sixsigma.pl%2Ftextbook%2Fstcart.html
http://www.theusrus.de/Talks/Talks/TWIX.pdfDane:
http://archive.ics.uci.edu/ml/
http://weka.sourceforge.net/wiki/index.php/Datasets -
TEMAT ZAJĘTY Program wspomagający użytkownika przy wykrywaniu obiektów na obrazie z radaru.
Program powinien wyświetlać obraz pochodzący z radaru. Obraz pochodzić będzie z pliku tekstowego zawierającego macierz MxN liczb zespolonych odpowiadających mocy sygnału odebranego przez radar. Użytkownik powinien mieć możliwość wskazania za pomocą kursora obiektu na wyświetlonym obrazie i zapisania tej informacji (współrzędne wskazanego punktu). Program powinien dodatkowo wykrywać obiekt i sugerować jego współrzędne użytkownikowi. Należy wykorzystać dowolną wolno dostępną bibliotekę graficzną.
-
TEMAT ZAJĘTY ,,Bitwa jaskiniowców''
Celem projektu jest zaimplementowanie gry dwuosobowej, w której kazdy z graczy pilotuje ,,śmigłowiec jaskiniowy''. ,,Śmigłowiec jaskiniowy'' może być napędzany tylko do góry (opada pod wpływem grawitacji), ruchy w lewo i prawo są więc ruchami opadającymi. ,,Śmigłowiec jaskiniowy'' może również strzelać, a celem gry jest oczywiście zestrzelenie przeciwnika. Na początku gry gracz powinien mieć możliwość wyboru jednej z dostępnych broni, które powinny różnić się skutecznością (moc strzału) i wagą ("śmigłowiec" z cięższą bronią powininen opadać z większym przyspieszeniem). Należy wykorzystać dowolną wolno dostępną bibliotekę graficzną.
-
TEMAT ZAJĘTY Nauka szybkiego pisania na klawiaturze
Celem projektu jest stworzenie programu wspomagającego użytkownika w nauce szybkiego pisania na klawiaturze. Program powinien umożliwiać wybranie jednego z dostępnych ćwiczeń. Ćwiczenia są zapisane w pliku tekstowym zawierającym tekst (znaki), które użytkownik musi jak najszybciej wprowadzić w odpowiedniej kolejności. Program na bieżąco sprawdza błędnie wpisane znaki i liczy czas poświęcony na ćwiczenie. Należy zaimplemntować kilka trybów pracy, np. przepisywanie pełnego tekstu, tekst pojawiający się na bieżąco, poszczególne słowa z ćwiczenia pojawiają się w kolejności losowej, itp. Należy wykorzystać dowolną wolno dostępną bibliotekę do stworzenia interfejsu użytkownika (tekstową, np. ncurses lub graficzną).
-
Program do analizy/konwersji danych
Celem projektu jest zaimplementowanie programu umożliwiającego wczytywanie danych z pliku tekstowego (formaty arff, csv, pliki z danymi oddzielonymi spacją lub tabulacją) i wyświetlenie ich w arkuszu. Program powinien umożliwiać sprawdzenie podstawowych statystyk (liczbowych i graficznych) dotyczących poszczególnych kolumn z wczytanego zbioru danych (minimum, maksimum, średnia, mediana, wariancja w przypadku danych liczbowych, histogram w przypadku danych nominalnych, itp.). Program powinien umożliwiać uzupełnienie brakujących danych ręcznie lub automatycznie (średnia, mediana, wartość najczęściej występująca). Po zakończeniu analizy danych powinna istnieć możliwość zapisu danych w jednym z wcześniej wymienionych formatów.
-
TEMAT ZAJĘTY Program wspomagający planowanie rozkładu pomieszczeń w mieszkaniu
Celem projektu jest zaimplementowanie graficznego programu, który wspomagałby planowanie rozkładu pomieszczeń w mieszkaniu. Program powinien umożliwiać utworzenie nowego rzutu z góry (prostokąt o podanych wymiarach) i umieszczenie na nim ścian, okien, drzwi, itp. Po ustaleniu wstępnego rozkładu pomieszczeń program powinien umożliwiać umieszczanie ścian działowych, mebli i podstawowych urządzeń (lodówka, pralka, itp.). Program powinien umożliwiać wczytywanie i zapisywanie utworzonych schematów.
-
Grupowanie danych
Celem projektu jest zaimplementowanie środowiska umożliwiającego grupowanie danych. Środowisko to powinno umożliwiać wczytywanie danych z plików (formaty arff, csv, pliki z danymi oddzielonymi spacją lub tabulacją), a następnie wykonanie grupowania za pomocą jednego z dostępnych algorytmów (należy zaimplementować dowolne dwa algorytmy grupowania - np. k-średnich i grupowanie hierarchiczne). Implementacja środowiska powinna umożliwiać dodanie nowego algorytmu w możliwie najprostszy sposób (w tym celu należy w przemyślany sposób przygotować interfejsy odpowiednich klas). Program powinien dodatkowo sugerować "optymalną" liczbę grup (dowolna miara jakości grupowanie, np. Hubert’s gamma) oraz umożliwiać przegrupowanie danych (podział grupy, połączenie grup).
Literatura:
http://www.ise.pw.edu.pl/~cichosz/mow/wyklad/mow-w7/mow-w7.html
Dane:
http://archive.ics.uci.edu/ml/
http://weka.sourceforge.net/wiki/index.php/Datasets -
TEMAT ZAJĘTY "The Incredible Machine"
Prosta wersja gry "The Incredible Machine". Gra powinna posiadać edytor plansz.
-
TEMAT ZAJĘTY "Settlers of Catan"
Komputerowa wersja gry "Settlers of Catan". Instrukcja do planszowej wersji gry znajduje się tutaj.
-
Optymalna sekwencja DNA dla białka
Zaimplementować aplikację, która znajduje sekwencję DNA białka. Białka są kodowane na DNA, każda trójka nukleotydów koduje jeden aminokwas, a ponieważ różnych aminokwasów jest 20, zaś różnych kodonów (sekwencji trój-znakowych DNA) jest 64 niektóre aminokwasy mają więcej niż jeden kodon. Każdy z organizmów charakteryzuje się nieco inną częstością kodonów. Bezpośrednia podmiana kodonów nie zawsze jest możliwa, ponieważ mogą powstawać sekwencje DNA, zawierające ,,szpilki'' (tzn. dwie części tej samej cząsteczki ,,sklejają się''). Napisać aplikację która znajduje lepszą sekwencję kodującą białko. Danymi wejściowymi są:
- sekwencja białka (pierwotna)
- docelowe częstości kodonów
Wykorzystać wybrany algorytm optymalizacji, np. wspinaczkowy (hill climbing). Algorytm znajdujący tzw. struktury drugorzędowe (wraz z implementacją w C++) jest dostępny tutaj.
-
Optymalne cięcie DNA
Cząsteczki DNA, które można syntezować muszą mieć długość od 20 do 50 nukleotydów. Jeżeli chce się utworzyć cząsteczkę dłuższą (np 300 nukleotydów) tworzy się krótsze fragmenty, które następnie są łączone. Miejsca ,,cięcia'' muszą być tak dobrane, aby fragmenty miały odpowiednią długość oraz nie łączyły się w niewłaściwy sposób.
Napisać aplikację która znajduje zbiór fragmentów dla danej sekwencji DNA. Wykorzystać wybrany algorytm optymalizacji, np. wspinaczkowy (hill climbing), algorytm znajdujący najbardziej prawdopodobne połączenie dla dwu cząsteczek (wraz z implementacją w C++) jest dostępny tutaj.
-
TEMAT ZAJĘTY Kompresja DNA
Napisać aplikację, która pozwala kompresować sekwencje DNA.
Sekwencja DNA zazwyczaj koduje białko. Każda trójka nukleotydów (zwana kodonem) koduje jeden aminokwas (których jest 20), często tylko niektóre kodony są wykorzystywane. Algorytm kompresujący powinien wykorzystywać tę informację, zamieniając sekwencję DNA na ciąg kodonów a następnie kompresując kodony (tutaj można zastosować jeden ze standardowych algorytmów, np Huffmana).
Porównać wyniki z aplikacjami kompresującymi ogólnego przeznaczenia.