Як можна інтерпретувати SVM з вагами?


42

Я намагаюся інтерпретувати змінні ваги, задані встановленням лінійного SVM.

(Я використовую scikit-learn ):

from sklearn import svm

svm = svm.SVC(kernel='linear')

svm.fit(features, labels)
svm.coef_

Я не можу знайти нічого в документації, яка б конкретно вказувала, як обчислюються чи тлумачаться ці ваги.

Чи має ознака ваги щось спільне з класом?

Відповіді:


55

Для загального ядра важко інтерпретувати ваги SVM, однак для лінійного SVM насправді є корисна інтерпретація:

1) Нагадаємо, що в лінійному SVM результатом є гіперплан, який найкраще розділяє класи. Ваги представляють цю гіперплощину, даючи вам координати вектора, ортогонального гіперплану - це коефіцієнти, задані svm.coef_. Назвемо цей вектор w.

2) Що ми можемо зробити з цим вектором? Це напрямок дає нам передбачуваний клас, тож якщо ви візьмете крапковий добуток будь-якої точки з вектором, ви можете сказати, на якій стороні він знаходиться: якщо крапковий добуток позитивний, він належить до позитивного класу, якщо він негативний належить до негативного класу.

3) Нарешті, ви навіть можете дізнатися щось про важливість кожної функції. Це моя власна інтерпретація, тому переконайте себе спочатку. Скажімо, svm знайшов би лише одну особливість, корисну для розділення даних, тоді гіперплан був би ортогональним до цієї осі. Отже, можна сказати, що абсолютний розмір коефіцієнта відносно інших дає вказівку на те, наскільки важливою була особливість для поділу. Наприклад, якщо для поділу використовується лише перша координата, w буде мати вигляд (x, 0), де x - деяке ненульове число, і тоді | x |> 0.


3
Точка 3 є основою алгоритму RFE, що використовує ваговий вектор лінійного SVM для вибору функції (гена): Див. Guyon axon.cs.byu.edu/Dan/778/papers/Feature%20Selection/guyon2.pdf
B_Miner

1
@B_Miner дякую! Я хвилювався, що оскільки я подумав про це самостійно, це може бути неправильним (я не з "чистого" КС) - але я думаю, що це правильно.
Побіт

1
Яке значення має ортогональний вектор, якщо він розділяє обидва класи? Чи має це щось спільне з внеском гіперплану, що розділяє, у загальну ймовірність прогнозування класу?
Остін Річардсон

Детальніше про те, чи відноситься ознака ваги до класу (у лінійному випадку) - це залежить від особливостей. Наприклад, якщо функції прогнозування приймають лише негативні ( ) значення, то негативні ваги сприяють негативній класифікації точок даних. 0
Kdawg

@B_Miner, я думаю, ти мав на увазі посилання на цей документ, а не на інший від Гайона.
ійосеф

11

Документація досить повна: для мультіклассіруют випадку, SVC , який заснований на бібліотеці libsvm використовує параметр один-проти-один. Що стосується лінійного ядра, n_classes * (n_classes - 1) / 2для кожної можливої ​​пари класу підходять окремі лінійні бінарні моделі. Отже, сукупна форма всіх первісних параметрів, об'єднаних разом [n_classes * (n_classes - 1) / 2, n_features](+ [n_classes * (n_classes - 1) / 2перехоплення в intercept_атрибуті).

Для двійкової лінійної задачі coef_в цьому прикладі робиться побудова графіку розділення гіперплану від атрибута .

Якщо ви хочете отримати детальну інформацію про значення пристосованих параметрів, особливо для нелінійного випадку ядра, ознайомтеся з математичною формулою та посиланнями, згаданими в документації.


1
У документації Sklearn атрибут coef_ має форму = [n_class-1, n_features]. Я вважаю, що це помилка.
Наомі

6

Я намагаюся інтерпретувати змінні ваги, задані встановленням лінійного SVM.

Хороший спосіб зрозуміти, як розраховуються ваги, і як їх інтерпретувати у випадку лінійної SVM - це виконати обчислення вручну на дуже простому прикладі.

Приклад

Розглянемо наступний набір даних, який лінійно відокремлюється

import numpy as np
X = np.array([[3,4],[1,4],[2,3],[6,-1],[7,-1],[5,-3]] )
y = np.array([-1,-1, -1, 1, 1 , 1 ])

SVM простий

Вирішення проблеми SVM шляхом перевірки

Перевіривши, ми можемо побачити, що граничною лінією, яка розділяє точки з найбільшим «запасом», є лінія . Оскільки ваги SVM пропорційні рівнянню цієї лінії рішення (гіперплан у більших розмірах), використовуючи перше здогадування параметрів будеx2=x13wTx+b=0

w=[1,1]  b=3

Теорія SVM говорить нам, що "ширина" поля задається . Використовуючи вище припущення ми отримаємо ширину з . що при огляді невірно. Ширина -2||w||22=242

Нагадаємо, що масштабування межі на коефіцієнт не змінює граничну лінію, отже, ми можемо узагальнити рівняння якc

cx1cx23c=0
w=[c,c]  b=3c

Підключимо назад до рівняння за отриману ширину

2||w||=4222c=42c=14

Отже, параметри (або коефіцієнти) насправді

w=[14,14]  b=34


(Я використовую scikit-learn)

Отже, я ось ось який код, щоб перевірити наші ручні розрахунки

from sklearn.svm import SVC
clf = SVC(C = 1e5, kernel = 'linear')
clf.fit(X, y) 
print('w = ',clf.coef_)
print('b = ',clf.intercept_)
print('Indices of support vectors = ', clf.support_)
print('Support vectors = ', clf.support_vectors_)
print('Number of support vectors for each class = ', clf.n_support_)
print('Coefficients of the support vector in the decision function = ', np.abs(clf.dual_coef_))
  • w = [[0,25 -0,25]] b = [-0,75]
  • Індекси векторів підтримки = [2 3]
  • Вектори підтримки = [[2. 3.] [6. -1.]]
  • Кількість векторів підтримки для кожного класу = [1 1]
  • Коефіцієнти вектора підтримки у функції рішення = [[0,0625 0,0625]]

Чи має ознака ваги щось спільне з класом?

Насправді знак ваг має відношення до рівняння граничної площини.

 

Джерело

https://ai6034.mit.edu/wiki/images/SVM_and_Boosting.pdf


5

Перевірте цей документ про вибір функції . Автори використовують квадрат ваг (атрибутів), присвоєний лінійним ядром SVM, як метрику ранжування для визначення відповідності певного атрибуту. Це один із високо цитованих способів відбору генів з даних мікромасив.


3

Чудова праця Гайона та Еліссефа (2003). Вступ до вибору змінних та функцій. Журнал досліджень машинного навчання, 1157-1182 говорить: "Конструювання та вибір підмножини функцій, корисних для створення хорошого прогноктора, протиставляється проблемі пошуку або ранжирування всіх потенційно релевантних змінних. Вибір найбільш релевантних змінних зазвичай неоптимальний для побудови предиктор, особливо якщо змінні є зайвими. І навпаки, підмножина корисних змінних може виключати безліч зайвих, але релевантних змінних. "

Тому я рекомендую бути обережними при інтерпретації ваг лінійних моделей взагалі (включаючи логістичну регресію, лінійну регресію та лінійну ядро ​​SVM). Ваги SVM можуть компенсувати, якщо вхідні дані не були нормалізовані. Вага SVM для конкретної особливості залежить також від інших особливостей, особливо якщо вони співвідносяться. Щоб визначити важливість індивідуальних особливостей, кращим вибором є методи ранжування функцій.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.