2013-10-01 7 views
0

Привет всем специалистам по компьютерному обучению, я наивна в вопросах машинного обучения. Мои данные имеют шесть функций (6 обычных атрибутов) и 2 метки (1 специальный атрибут) (true и false) (надеюсь, что я использовал правильный термин). Я хочу объединить те функции, которые нужно обучать SVM. Данные выглядит следующим образом: -SVM: Объединяя индивидуальные баллы для каждого параметра с помощью обучения SVM

ZDis  ZAnch  ZSurf  Zval  ZDom  ZEntropy Top5 
0.48659 -0.20412 1.19243 0.15374 0.59667 1.34151 False 
-0.10067 4.89898 -0.73677 0.22506 0.59667 1.34151 True 
2.24837 -0.20412 -2.02291 0.22455 0.59667 1.34151 False 
0.48659 -0.20412 1.19243 -0.06352 0.59667 1.34151 False 
-0.68793 -0.20412 1.19243 0.12405 0.59667 1.34151 False 
-2.02698 -0.40825 1.86371 0.07348 1.3272 -0.1242 False 
-0.1807 2.44949 0.17865 0.07345 0.9401 0.1505 False 
1.66557 2.44949 -1.50641 0.07381 0.9401 1.30135 False 
1.11169 -0.40825 0.34716 0.07381 0.9401 -0.20225 True 
1.5337 -0.40825 -0.01393 0.07381 -0.9954 0.53144 False 
-0.01945 -0.48348 -1.16128 0.11035 2.02339 0.90237 False 
-1.52944 3.23556 0.23428 0.11093 1.22613 -0.12973 False 
0.43354 -0.48348 -2.20795 0.11093 1.22613 2.25734 False 
2.84953 -0.48348 -2.20795 0.11093 1.49189 3.07609 True 

Так что я хочу сделать здесь всего = X1 * ZDis + X2 * ZAnch + X3 * ZSurf + X4 * Zval + X5 * ZDom + X6 * ZEntropy где X1..X6 являются взвешенным значением, которое должно исходить от SVM. Я использовал rapidminner, чтобы получить это значение веса для моих 40 примеров обучающего набора и результата ниже: -

Total number of Support Vectors: 40 
Bias (offset): -1.055 
w[ZDis] = 0.076 
w[ZAnch] = -0.058 
w[ZSurf] = 0.057 
w[Zval] = 0.010 
w[ZDom] = 0.073 
w[ZEntropy] = 0.077 

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

Благодаря Паллаб


После получения обратной связи от вас, я сделал некоторый анализ еще раз для моей проблемы, где у меня есть 277 наборов данных и 8 являются положительными и 269 отрицательны с 8 функций, поэтому его показать мне ясно , его дисбаланс. как я уже говорил, я хочу уделять одинаковое внимание всем моим функциям, используя SVM по весу SVM, а затем хочу сделать (w1*x1+w2*x2+...+w8*x8) и который поможет мне извлечь истинный результат из моего набора данных. Данные, как: -

`NameOfMotif eval_Zscore dis_Zscore abind_Zscore surf_Zscore pfam_Zscore ptm_Zscore coil_Zscore entropy_Zscore TrueVsFalse 
ptk_9 0.77428 0.2387 -0.39736 1.48274 0.61237 -0.21822 0.49111 0.44599 False 
ptk_8 0.77494 -0.97317 -0.39736 -0.27357 -1.63299 -0.21822 0.6181 -0.04028 False 
ptk_3 0.77591 1.45058 -0.39736 -0.1139 0.61237 4.58258 0.74509 -0.85069 True 
ptk_6 0.77583 -2.18505 -0.39736 -0.27357 0.61237 -0.21822 -0.3343 -0.92281 False 
ptk_22 0.55932 1.45058 -0.39736 0.70216 0.61237 -0.21822 1.25303 -2.17556 False 
ptk_23 0.51159 -0.97317 -0.39736 1.05697 -1.63299 -0.21822 1.25303 0.77021 False 
ptk_20 0.62907 0.2387 -0.39736 1.05697 0.61237 -0.21822 -0.22848 -1.21702 False 
.............................................................................. 
scf-trcp1_1 0.17425 2.23675 -0.92125 -0.03478 1.20877 5.13288 1.31262 2.27655 True 
scf-trcp1_3 0.17425 -1.068 -0.92125 -0.82472 -2.43745 -0.43743 0.48341 -0.59339 False 
scf-trcp1_5 0.17425 0.41914 0.24523 -1.05041 0.23644 -0.43743 -0.02919 1.68523 False 
scf-trcp1_7 0.17425 -1.63453 -0.92125 -1.25354 -1.82975 -0.43743 -2.0193 0.95051 False` 

и мой SVM из пут

kernel type polynomial 
cross fold validation =5 
c=100000.0 
kernal degree = 1.0E-4 
L-pos =2.0 
L-neg =2.0 
PerformanceVector: 
accuracy: 84.60% +/- 23.58% (mikro: 84.48%) 
ConfusionMatrix: 
True: False True 
False: 228 2 
True: 41 6 
precision: 31.08% +/- 25.51% (mikro: 12.77%) (positive class: True) 
ConfusionMatrix: 
True: False True 
False: 228 2 
True: 41 6 
recall: 70.00% +/- 40.00% (mikro: 75.00%) (positive class: True) 
ConfusionMatrix: 
True: False True 
False: 228 2 
True: 41 6 
AUC (optimistic): 0.793 +/- 0.184 (mikro: 0.793) (positive class: True) 
AUC: 0.793 +/- 0.184 (mikro: 0.793) (positive class: True) 
AUC (pessimistic): 0.793 +/- 0.184 (mikro: 0.793) (positive class: True) 

Мой вопрос здесь, достаточно теперь мой подход хорош? все параметры, которые я использовал для оптимизации SVM, в порядке? Я очень наивна в этом вопросе !! благодаря Pallab

+0

Почему вы не уверены, что это правильный подход? Проверяли ли вы свои параметры на тестовых данных? –

+0

Я проверил свои тестовые данные, специально я вынул 5 примеров из своего учебного набора (теперь он содержит только 35 примеров), где в тестовом наборе 4 ложны и 1 истинно, но rapistinner дает мне 5 ложных результатов !! – Paul85

ответ

0

Вы используете линейной модели, вы предполагаете, что существует множество параметров, которые дадут вам ответ, просто расчет sign(w1*x1+w2*x2+...+w5*x5 - b). Такие предположения редко имеют место для низкоразмерных пространств. В вашем конкретном примере у вас всего 5 измерений и очень небольшой набор тренировок. Ведь такие небольшие данные - практически нет никаких шансов на то, что любой подход к компьютерному обучению принесет хорошие результаты, так как все они являются статистическими методами. Трудно говорить о статистике 30 элементов.

на вопросы:

  • Для того, чтобы испытать это в Python, взгляните на scikit-learn
  • Чтобы проверить вашу модель выполнить перекрестную проверку - разделить ваши данные в, например, 5 кусков (каждый из 7 примеров), затем обучите SVM на 4 таких кусках (28 баллов) и проверьте оставшийся 1 кусок (7 баллов), повторите 5 раз, поэтому каждый кусок используется ровно один раз в качестве теста. Вычислить среднее значение полученной точности
  • Для обработки низкоразмерных нелинейно-разделяемых данных попробуйте использовать некоторые другие ядра , как и полиномиальные (с малой степенью), или если они не работают - RBF.
  • Помните, что SVM является параметрической моделью .Вы должны выбрать правильные параметры, чтобы получить хорошие результаты. Для линейного SVM требуется параметр C - чем больше значение C, тем больше вы «вынуждаете» SVM правильно классифицировать данные (свести к минимуму количество missclassifications). При использовании ядер - вы получаете другие параметры (поэтому кроме C вы получаете d в полиноме и gamma в rbf). Выбор лучших параметров может быть выполнен с использованием сетевого поиска (scikit-learn имеет подпрограммы, чтобы автоматизировать это, прочитать документацию)
  • Стандартизация данных - общеизвестно, что многие модели ML (включая SVM) могут плохо работать с данными, каждая функция имеет разный масштаб - кажется, что это ваш случай (Zval, кажется, намного меньше, чем Zentropy) - чтобы избежать отклонения от функции, вы должны перемасштабировать их, например, [-1,1] интервалов или нормализовать, чтобы каждый из них имел среднее значение 0 и отклонение 1
+0

Спасибо за вашу полезную информацию, теперь я попытаюсь реализовать свою идею в своей проблеме – Paul85

0

Вы упомянули, что, проведя 5 записей, вы получили 5 ложных классификаций, из которых 4 были правильными, а 1 - неправильным. Этого недостаточно, чтобы знать, хороша ли модель. Как сказано в предыдущем ответе, оцените производительность SVM для невидимых данных, выполнив кросс-проверку (оператор RapidMiner называется X-Validation). Это даст вам представление о том, имеет ли модель какую-либо ценность. Чтобы настроить параметры для оператора SVM для улучшения модели, используйте оператор Loop Parameters и объедините его с перекрестной проверкой, чтобы получить оценочную производительность.