Вихід Scikit SVM у багатокласовій класифікації завжди дає однакову мітку


10

На даний момент я використовую Scikit learn із таким кодом:

clf = svm.SVC(C=1.0, tol=1e-10, cache_size=600, kernel='rbf', gamma=0.0, 
              class_weight='auto')

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

Я пробую деякі інші параметри, включаючи повний за замовчуванням ( svm.SVC()), але поки rbfзамість цього використовується метод ядра polyабо linearвін просто не буде працювати, в той час як він працює дуже добре для polyі linear.

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

Хтось бачить подібну проблему раніше і знає, що тут відбувається?

Я ніколи не розглядаю детально свій розподіл класів, але знаю, що це повинно бути приблизно 30%, це 7, 14% - 4.

Я навіть пробую ручну реалізацію 1 проти решти, і це все ще не корисно.


Які пропорції ваших даних, що належать до кожного з класів?
gung - Відновіть Моніку

У моїх даних дійсно більше "7", але не дуже. Близько 30% з них - 7. @gung
Tamaki Sakura

Відповіді:


10

Ймовірна причина - той факт, що ви не налаштовуєте свою модель. Вам потрібно знайти хороші значення для і . У вашому випадку дефолти виявляються поганими, що призводить до тривіальних моделей, які завжди дають певний клас. Це особливо часто, якщо один клас має набагато більше екземплярів, ніж інші. Який ваш розподіл класів?γCγ

scikit-learn має обмежені можливості пошуку в гіперпараметрі, але ви можете використовувати його разом з бібліотекою налаштування типу Optimum . Приклад налаштування SVC з навчанням за допомогою наукової програми доступний тут .

Відмова: Я є провідним розробником Optunity.


Я фактично маніпулюю будь-яку комбінацію C і гамми, що є потужністю від 10 до 0, але всі вони дають мені повну 7. Я навіть починаю сумніватися, чи збираю я наукові роботи правильно.
Тамакі Сакура

8

Проблемою виявляється тестування параметрів. Я не пробував, коли gammaзнаходиться між 0,0 (що становить 1 / n_feature) і 1. На моїх даних gammaслід звернутися до чогось навколо1e-8


4
Це має ідеальний сенс. Занадто великі значення призводять до матриці ядра, близької до одиничної матриці. Кожне передбачення в кінцевому підсумку стане терміном упередженості (оскільки всі оцінки ядра дуже близькі до нуля), що, можливо, призводить до класу 7 у вашому випадку. γ
Marc Claesen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.