ADIUM/L/z3p

From WikiZMSI

< ADIUM | L

Wiadomości z wykładu

Do domu

  • Pobierz i rozpakuj plik data_for_svm.zip.
  • Wczytaj znajdujący się w środku plik binarny (format Matlaba) zawierający trzy małe zbiory danych (nazwy X1, X2, X3). Wykorzystaj funkcję loadmat('...') z pakietu scipy.io - przykład:
from scipy.io import loadmat
D = loadmat('data_for_svm.mat')
X1 = D['X1'] X2 = D['X2'] X3 = D['X3']
  • Z wykorzystaniem klasy sklearn.svm.SVC przeprowadź następujące czynności (uwaga należy nastawić kernel='linear'). Dla zbioru pierwszego: (1) znajdź prostą separacji o największym marginesie, (2) oblicz wartość marginesu, (3) na wykresie (na płaszczyźnie) zwizualizuj: zbiór danych, optymalną prostą, proste brzegowe, wyróżnij punkty podparcia, zaznaczyć margines (można go poprowadzić np. od prostej separacji do punktów podparcia). Dla zbioru drugiego wykonać wszystkie czynności takie, jak dla zbioru pierwszego, przy czym zwizualizować sytuację w przestrzeni R^3.
  • Powtórz uczenie klasyfikatorów jak w poprzednim punkcie, formułując bezpośrednio zadanie optymalizacji (programowania kwadratowego) z wykorzystaniem pakietu cvxopt (Convex Optimization). Przydatne linki: https://scaron.info/blog/quadratic-programming-in-python.html, http://cvxopt.org/applications/svm/, https://xavierbourretsicotte.github.io/SVM_implementation.html.
  • Wariant soft-margin SVM (zbiór X3). Powróć do używania klasy sklearn.svm.SVC. Wykonaj trzy eksperymenty znalezienia prostej klasyfikacji SVM dla wartości C = 0.1, 1.0, 10 (patrz rys. 9 w pliku .pdf). Otrzymane proste przedstaw na trzech wykresach. Oblicz wielkość marginesu separacji dla każdej z nich.
  • Wariant soft-margin SVM z nieliniową granicą decyzyjną. Zmień parametr decydujący o funkcji jądrowej na kernel='rbf'. Znajdź nieliniową granicę separacji dla zbioru X3. Otrzymaną granicę zwizualizuj za pomocą wykresu warstwicowego (contour lub contourf).