""" ........................... Lineáris szeparálás SVM-mel ........................... """ print(__doc__) import numpy as np import matplotlib.pyplot as plt from sklearn.svm import SVC import urllib.request # Toltsuk be a perceptron kodnal hasznalt adatokat! url='https://arato.inf.unideb.hu/baran.agnes/NH2017/elemek.txt' points = np.loadtxt(urllib.request.urlopen(url)) #points=np.loadtxt('elemek.txt') # betoltes fajlbol x1=points[:,0] x2=points[:,1] X=points[:,:2] y=points[:,2] # Hasznaljuk az SVC parancsot linearis szeparalasra! svm = SVC(kernel='linear') svm.fit(X, y) suppvec=svm.support_vectors_ # ez a tomb tartalmazza a tarto vektorokat print(suppvec.shape) print(suppvec) w=svm.coef_ # a szeparalo egyenes normalvektora b=svm.intercept_ # a szeparalo egyenes tengelymetszete print(w.shape) print(b.shape) ## Feladat: abrazoljuk a ket ponthalmazt, jeloljuk be a tartovektorokat, tegyuk ra az abrara a szeparalo egyenest t = np.arange(min(x1)-0.5,max(x1)+0.5, 0.2) # egyenes abrazolashoz plt.plot(x1[:200],x2[:200],'bo',fillstyle='none') # +1-esek plt.plot(x1[200:],x2[200:],'ro',fillstyle='none') # -1-esek plt.plot(suppvec[:,0],suppvec[:,1],'go') plt.plot(t,-w[:,0]/w[:,1]*t-b/w[:,1],'g') plt.show()