Хорошая техника машинного обучения, чтобы отсеять хорошие URL от плохих
У меня есть приложение, которое должно различать хорошие запросы HTTP GET и плохие.
For example:
http://somesite.com?passes=dodgy+parameter # BAD
http://anothersite.com?passes=a+good+parameter # GOOD
My system can make a binary decision about whether or not a URL is good or bad - but ideally I would like it to predict whether or not a previously unseen URL is good or bad.
http://some-new-site.com?passes=a+really+dodgy+parameter # BAD
I feel the need for a support vector machine (SVM) ... but I need to learn machine learning. Some questions:
1) Подходит ли SVM для этой задачи? 2) Могу ли я обучить его с необработанными URL? - без явного указания "функций" 3) Сколько URL мне понадобится, чтобы он был хорош в предсказаниях? 4) Какое ядро SVM мне следует использовать? 5) После того, как я обучу это, как я держу это в курсе? 6) Как мне снова протестировать невидимые URL-адреса в SVM, чтобы определить, хорошо это или плохо? я
4 ответа
Я думаю, что Стив и StompChicken оба делают отличные очки:
- Выбрать лучший алгоритм сложно даже для специалистов по машинному обучению. Использование универсального пакета, такого как Weka, позволит вам легко сравнить множество различных подходов, чтобы определить, какой из них лучше всего подходит для ваших данных.
- Выбор хороших функций часто является одним из наиболее важных факторов, влияющих на эффективность алгоритма обучения.
Также было бы полезно изучить, как другие люди подошли к подобным проблемам:
- Ци, X. и Дэвисон, BD 2009. Классификация веб-страниц: особенности и алгоритмы. ACM Computing Survey 41, 2 (февраль 2009 г.), 1-31.
- Кан, MY и HON Thi (2005). Быстрая классификация веб-страниц с использованием функций URL. В материалах 14-й Международной конференции ACM по управлению информацией и знаниями (CIKM '05), Нью-Йорк, Нью-Йорк, стр. 325–326.
- Деви, М.И., Раджарам, Р. и Сельвакуберан, К. 2007. Методы машинного обучения для автоматической классификации веб-страниц с использованием функций URL. В материалах международной конференции по вычислительной разведке и мультимедийным приложениям (ICCIMA 2007) - том 02 (13 - 15 декабря 2007 г.). Вашингтон, округ Колумбия, с. 116-120.
Я не согласен со Стивом, что SVM - это плохой выбор, хотя я также не думаю, что есть много причин думать, что он будет работать лучше, чем любой другой дискриминационный алгоритм обучения.
Вам нужно будет хотя бы подумать о разработке функций. Это одна из наиболее важных частей того, чтобы алгоритмы машинного обучения хорошо работали над определенной проблемой. Трудно понять, что предложить, не зная об этой проблеме. Я думаю, вы могли бы начать с количества символов n-грамм, присутствующих в URL как функции.
Никто на самом деле не знает, сколько данных вам нужно для какой-либо конкретной проблемы. Общий подход состоит в том, чтобы получить некоторые данные, изучить модель, посмотреть, поможет ли больше обучающих данных, повторять до тех пор, пока вы не добьетесь более значительного улучшения.
Ядра - сложное дело. Некоторые библиотеки SVM имеют строковые ядра, которые позволяют вам тренироваться на строках без какого-либо извлечения функций (я думаю о SVMsequel, могут быть и другие). В противном случае вам нужно вычислить числовые или двоичные характеристики из ваших данных и использовать линейное, полиномиальное или RBF-ядро. Нет ничего плохого в том, чтобы попробовать их все, и стоит потратить некоторое время на поиск лучших настроек для параметров ядра. Ваши данные также явно структурированы, и нет смысла позволять алгоритму обучения пытаться определить структуру URL (если вы не заботитесь о недействительных URL). Вы должны по крайней мере разделить URL-адрес в соответствии с разделителями '/', '?', '.', '='.
Я не знаю, что вы имеете в виду под "держать в курсе". Перенесите модель с новыми данными, которые у вас есть.
Это зависит от используемой вами библиотеки. В svmlight есть программа svm_classify, которая берет модель и пример и дает метку класса (хорошая или плохая). Я уверен, что это будет легко сделать в любой библиотеке.
Если я правильно понимаю, вы просто хотите узнать, хороший URL или плохой.
SVM не подходит, SVM подходят только в том случае, если набор данных очень сложный и многие информационные точки расположены близко к гиперплоскости. Вы бы использовали SVM для добавления дополнительных измерений к данным.
Вы бы хотели, чтобы несколько тысяч URL идеально подходили для обучения вашего набора данных. Чем больше, тем лучше, очевидно, вы могли бы сделать это всего за 100, но ваши результаты могут не дать хороших классификаций.
Я бы посоветовал вам сначала создать свой набор данных и использовать Weka http://www.cs.waikato.ac.nz/ml/weka/
Вы можете измерить, какой алгоритм дает вам лучшие результаты.
Какой набор данных вы будете использовать для обучения, если у вас есть хороший набор данных, SVM будет хорошо работать, я считаю, с хорошим штрафным коэффициентом. Если нет набора данных, я бы предложил использовать онлайн-алгоритмы, такие как kNN или даже персептроны.