Вопрос:

Как сделать выборку объектов с использованием линейных весов SVM

r svm linear feature-selection

704 просмотра

1 ответ

54 Репутация автора

Я построил линейную модель SVM для двух типов классов (1 и 0), используя следующий код:

class1.svm.model <- svm(Class ~ ., data = training,cost=1,cross=10, metric="ROC",type="C-classification",kernel="linear",na.action=na.omit,probability = TRUE)

и я извлек веса для учебного набора, используя следующий код:

#extract the weights and constant from the SVM model:

w <- t(class1.svm.model$coefs) %*% class1.svm.model$SV;  
b <- -1 * class1.svm.model$rho; #(sometimes called w0)

Я получаю веса для каждой функции, как в следующем примере:

X2  0.001710949
X3  -0.002717934
X4  -0.001118897
X5  0.009280056
X993    -0.000256577
X1118   0
X1452   0.004280963
X2673   0.002971335
X4013   -0.004369505

Теперь, как мне выполнить выбор объекта на основе весов, извлеченных для каждого объекта? как мне построить матрицу весов?

Я читаю статьи, но концепция мне еще не ясна. Пожалуйста, помогите!

Автор: sp2 Источник Размещён: 08.01.2018 12:53

Ответы (1)


3 плюса

2994 Репутация автора

Решение

Я вычеркнул этот ответ довольно быстро, поэтому я ожидаю, что будет немало моментов, которые другие могут расширить, но как кое-что, чтобы вы начали ...

Есть несколько способов сделать это, но первое, что нужно решить, - это преобразовать линейные веса в меру того, насколько важен каждый признак для классификации. Это относительно простой трехэтапный процесс:

  1. Нормализуйте входные данные так, чтобы у каждого признака было среднее значение = 0, а стандартное отклонение = 1.
  2. Тренируй свою модель
  3. Возьмите абсолютное значение весов. То есть, если вес равен -0,57, возьмите 0,57.

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

Теперь, когда у вас есть способ определить, насколько важен каждый элемент для классификации, вы можете использовать его различными способами, чтобы выбрать, какие функции включить в окончательную модель. Я приведу пример исключения рекурсивных функций, поскольку он один из моих любимых, но вы можете захотеть взглянуть на итеративный выбор объектов или шумовое возмущение.

Итак, для выполнения рекурсивного исключения функций:

  1. Начните с обучения модели всему набору функций и рассчитайте ее важность.
  2. Откажитесь от функции с наименьшим значением важности и перенастройте модель на оставшиеся функции
  3. Повторяйте 2, пока у вас не будет достаточно небольшого набора функций [1].

[1] где достаточно маленький набор функций определяется точкой, в которой точность начинает снижаться, когда вы применяете свою модель к набору проверки. На что следует обратить внимание: при выполнении такого метода выбора функций убедитесь, что у вас есть не только отдельный набор для обучения и тестирования, но и набор для проверки, который будет использоваться при выборе количества функций, которые нужно сохранить.

Автор: Alan Размещён: 11.01.2018 08:51
Вопросы из категории :
32x32