logo

Подршка векторском машинском алгоритму

Машина за вектор подршке или СВМ је један од најпопуларнијих алгоритама за надгледано учење, који се користи за проблеме класификације и регресије. Међутим, првенствено се користи за проблеме класификације у машинском учењу.

Циљ СВМ алгоритма је да створи најбољу линију или границу одлуке која може да одвоји н-димензионални простор у класе тако да можемо лако да ставимо нову тачку података у исправну категорију у будућности. Ова граница најбоље одлуке назива се хиперраван.

СВМ бира екстремне тачке/векторе који помажу у креирању хиперравне. Ови екстремни случајеви се називају вектори подршке, и стога се алгоритам назива машина вектора подршке. Размотрите дијаграм у наставку у којем постоје две различите категорије које су класификоване коришћењем границе одлуке или хиперравнине:

Подршка векторском машинском алгоритму

Пример: СВМ се може разумети на примеру који смо користили у КНН класификатору. Претпоставимо да видимо чудну мачку која такође има неке карактеристике паса, па ако желимо модел који може тачно да идентификује да ли је мачка или пас, тако да се такав модел може креирати коришћењем СВМ алгоритма. Прво ћемо обучити наш модел са пуно слика мачака и паса како би могао да научи о различитим карактеристикама мачака и паса, а затим ћемо га тестирати са овим чудним створењем. Дакле, пошто вектор подршке ствара границу одлуке између ова два податка (мачка и пас) и бира екстремне случајеве (вектори подршке), видеће екстремни случај мачке и пса. На основу вектора подршке, класификоваће га као мачка. Размотрите дијаграм испод:

Подршка векторском машинском алгоритму

СВМ алгоритам се може користити за Препознавање лица, класификација слика, категоризација текста, итд.

јава 8

Врсте СВМ-а

СВМ може бити два типа:

    Линеарни СВМ:Линеарни СВМ се користи за линеарно одвојиве податке, што значи да ако се скуп података може класификовати у две класе коришћењем једне праве линије, онда се такви подаци називају линеарно одвојиви подаци, а класификатор се користи као линеарни СВМ класификатор.Нелинеарни СВМ:Нелинеарни СВМ се користи за нелинеарно раздвојене податке, што значи да ако скуп података не може да се класификује коришћењем праве линије, онда се такви подаци називају нелинеарним подацима, а коришћени класификатор се назива нелинеарним СВМ класификатором.

Хиперраван и вектори подршке у СВМ алгоритму:

Хиперплан: Може постојати више линија/граница одлуке за одвајање класа у н-димензионалном простору, али морамо да пронађемо најбољу границу одлуке која помаже да се класификују тачке података. Ова најбоља граница је позната као хиперраван СВМ-а.

Димензије хиперравне зависе од карактеристика присутних у скупу података, што значи да ако постоје 2 карактеристике (као што је приказано на слици), онда ће хиперраван бити права линија. А ако постоје 3 карактеристике, онда ће хиперраван бити 2-димензионална раван.

Увек креирамо хиперравнину која има максималну маргину, што значи максимално растојање између тачака података.

Вектори подршке:

Тачке података или вектори који су најближи хиперравни и који утичу на положај хиперравне називају се вектором подршке. Пошто ови вектори подржавају хиперравнину, стога се називају вектор подршке.

Како функционише СВМ?

Линеарни СВМ:

Рад СВМ алгоритма може се разумети коришћењем примера. Претпоставимо да имамо скуп података који има две ознаке (зелену и плаву), а скуп података има две карактеристике к1 и к2. Желимо класификатор који може да класификује пар (к1, к2) координата у зеленој или плавој боји. Размотрите слику испод:

Подршка векторском машинском алгоритму

Дакле, пошто је то 2-д простор, тако да само коришћењем праве линије можемо лако раздвојити ове две класе. Али може постојати више линија које могу одвојити ове класе. Размотрите слику испод:

Подршка векторском машинском алгоритму

Дакле, СВМ алгоритам помаже да се пронађе најбоља линија или граница одлуке; ова најбоља граница или регион се назива а хиперплане . СВМ алгоритам проналази најближу тачку линија из обе класе. Ове тачке се називају вектори подршке. Растојање између вектора и хиперравнине се назива као маргина . А циљ СВМ-а је да максимизира ову маргину. Тхе хиперплане са максималном маргином назива се оптимална хиперраван .

питхон сортирање тупле
Подршка векторском машинском алгоритму

Нелинеарни СВМ:

Ако су подаци линеарно распоређени, онда их можемо раздвојити коришћењем праве линије, али за нелинеарне податке не можемо нацртати једну праву линију. Размотрите слику испод:

Подршка векторском машинском алгоритму

Дакле, да бисмо одвојили ове тачке података, морамо додати још једну димензију. За линеарне податке користили смо две димензије к и и, тако да ћемо за нелинеарне податке додати трећу димензију з. Може се израчунати као:

 z=x<sup>2</sup> +y<sup>2</sup> 

Додавањем треће димензије, простор узорка ће постати као на слици испод:

Подршка векторском машинском алгоритму

Дакле, сада ће СВМ поделити скупове података у класе на следећи начин. Размотрите слику испод:

Подршка векторском машинском алгоритму

Пошто се налазимо у тродимензионалном простору, он изгледа као раван паралелна са к-осом. Ако га претворимо у 2д простор са з=1, онда ће постати као:

Подршка векторском машинском алгоритму

Отуда добијамо обим полупречника 1 у случају нелинеарних података.

Питхон имплементација Суппорт Вецтор Мацхине

Сада ћемо имплементирати СВМ алгоритам користећи Питхон. Овде ћемо користити исти скуп података кориснички подаци , који смо користили у логистичкој регресији и КНН класификацији.

    Корак претходне обраде података

До корака предобраде података, код ће остати исти. Испод је код:

 #Data Pre-processing Step # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd #importing datasets data_set= pd.read_csv(&apos;user_data.csv&apos;) #Extracting Independent and dependent Variable x= data_set.iloc[:, [2,3]].values y= data_set.iloc[:, 4].values # Splitting the dataset into training and test set. from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0.25, random_state=0) #feature Scaling from sklearn.preprocessing import StandardScaler st_x= StandardScaler() x_train= st_x.fit_transform(x_train) x_test= st_x.transform(x_test) 

Након извршења горњег кода, ми ћемо претходно обрадити податке. Код ће дати скуп података као:

Подршка векторском машинском алгоритму

Скалирани излаз за тест сет ће бити:

Подршка векторском машинском алгоритму

Постављање СВМ класификатора на сет за обуку:

Сада ће сет за обуку бити уграђен у СВМ класификатор. Да бисмо креирали СВМ класификатор, ми ћемо увести СВЦ разред из Склеарн.свм библиотека. Испод је код за то:

 from sklearn.svm import SVC # &apos;Support vector classifier&apos; classifier = SVC(kernel=&apos;linear&apos;, random_state=0) classifier.fit(x_train, y_train) 

У горњем коду смо користили кернел='линеар' , јер овде креирамо СВМ за линеарно одвојиве податке. Међутим, можемо га променити за нелинеарне податке. А онда смо уградили класификатор у скуп података за обуку (к_траин, и_траин)

Излаз:

 Out[8]: SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape=&apos;ovr&apos;, degree=3, gamma=&apos;auto_deprecated&apos;, kernel=&apos;linear&apos;, max_iter=-1, probability=False, random_state=0, shrinking=True, tol=0.001, verbose=False) 

Перформансе модела се могу променити променом вредности Ц (фактор регуларизације), гама и кернел .

    Предвиђање резултата тестног скупа:
    Сада ћемо предвидети излаз за скуп тестова. За ово ћемо креирати нови вектор и_пред. Испод је код за то:
 #Predicting the test set result y_pred= classifier.predict(x_test) 

Након што добијемо вектор и_пред, можемо упоредити резултат и_пред и и_тест да провери разлику између стварне и предвиђене вредности.

Излаз: Испод је излаз за предвиђање тестног скупа:

Подршка векторском машинском алгоритму
    Креирање матрице конфузије:
    Сада ћемо видети перформансе СВМ класификатора колико има нетачних предвиђања у поређењу са класификатором логистичке регресије. Да бисмо креирали матрицу конфузије, морамо да увеземо цонфусион_матрик функција склеарн библиотеке. Након увоза функције, позваћемо је помоћу нове променљиве центиметар . Функција углавном узима два параметра и_труе (стварне вредности) и и_пред (циљани поврат вредности од стране класификатора). Испод је код за то:
 #Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred) 

Излаз:

Подршка векторском машинском алгоритму

Као што можемо видети на горњој излазној слици, постоји 66+24= 90 тачних предвиђања и 8+2= 10 тачних предвиђања. Стога можемо рећи да је наш СВМ модел побољшан у поређењу са моделом логистичке регресије.

шта је објекат јава
    Визуелизација резултата сета обуке:
    Сада ћемо визуализовати резултат скупа за обуку, испод је код за њега:
 from matplotlib.colors import ListedColormap x_set, y_set = x_train, y_train x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap((&apos;red&apos;, &apos;green&apos;))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap((&apos;red&apos;, &apos;green&apos;))(i), label = j) mtp.title(&apos;SVM classifier (Training set)&apos;) mtp.xlabel(&apos;Age&apos;) mtp.ylabel(&apos;Estimated Salary&apos;) mtp.legend() mtp.show() 

Излаз:

Извршавањем горњег кода добићемо излаз као:

Подршка векторском машинском алгоритму

Као што видимо, горњи излаз изгледа слично као резултат логистичке регресије. На излазу смо добили праву линију као хиперравнину јер имамо користио је линеарно језгро у класификатору . А горе смо такође дискутовали да је за 2д простор хиперраван у СВМ-у права линија.

    Визуелизација резултата тестног скупа:
 #Visulaizing the test set result from matplotlib.colors import ListedColormap x_set, y_set = x_test, y_test x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap((&apos;red&apos;,&apos;green&apos; ))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap((&apos;red&apos;, &apos;green&apos;))(i), label = j) mtp.title(&apos;SVM classifier (Test set)&apos;) mtp.xlabel(&apos;Age&apos;) mtp.ylabel(&apos;Estimated Salary&apos;) mtp.legend() mtp.show() 

Излаз:

Извршавањем горњег кода добићемо излаз као:

Подршка векторском машинском алгоритму

Као што можемо видети на горњој излазној слици, СВМ класификатор је поделио кориснике у два региона (Купљено или Некупљено). Корисници који су купили СУВ налазе се у црвеном региону са црвеним тачкама распршивања. А корисници који нису купили СУВ налазе се у зеленом региону са зеленим поенима. Хиперраван је поделио две класе на купљену и некупљену променљиву.