我有一个应用程序需要区分好的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以确定它是好还是坏? 我
答案 0 :(得分:6)
我认为steve和StompChicken都有优点:
检查其他人如何处理类似问题也很有用:
答案 1 :(得分:3)
我不同意史蒂夫说SVM在这里是一个糟糕的选择,虽然我也认为没有太多理由认为它会比任何其他判别性学习算法做得更好。
您至少需要考虑设计功能。这是使机器学习算法在某个问题上运行良好的最重要部分之一。如果不了解问题,很难知道建议什么。我想你可以从URL中出现的计数字符n-gram开始作为特征。
没有人真正知道您需要为任何特定问题提供多少数据。一般的方法是获取一些数据,学习模型,看看是否有更多的训练数据有所帮助,重复,直到你没有得到任何更显着的改善。
内核是一项棘手的业务。一些SVM库具有字符串内核,允许您在没有任何特征提取的情况下训练字符串(我想到的是SVMsequel,可能还有其他的)。否则,您需要从数据中计算数值或二进制特征,并使用线性,多项式或RBF内核。尝试所有这些都没有坏处,值得花些时间寻找内核参数的最佳设置。您的数据也显然是结构化的,让学习算法尝试并计算URL的结构是没有意义的(除非您关心无效的URL)。您至少应该根据分隔符'/','?','。','='拆分URL。
我不知道你的意思是'保持最新'。使用您拥有的任何新数据重新训练模型。
这取决于你使用的库,在svmlight中有一个名为svm_classify的程序,它接受一个模型和一个例子并给你一个类标签(好的或坏的)。我相信在任何图书馆都可以直截了当。
答案 2 :(得分:2)
如果我理解正确,您只想了解网址是好还是坏。
SVM不合适,只有当数据集非常复杂并且许多信息点靠近超平面时,SVM才适用。您将使用SVM为数据添加额外的维度。
理想情况下,您需要几千个网址来训练您的数据集。越多越好,显然你可以只用100做,但你的结果可能不会产生良好的分类。
我建议您先构建数据集并使用Weka http://www.cs.waikato.ac.nz/ml/weka/
您可以测量哪种算法可以获得最佳效果。
答案 3 :(得分:0)
你将用什么数据集进行培训,如果你有一个好的数据集,SVM会做得很好我相信有一个好的惩罚因素。如果没有数据集,我建议使用在线算法,如kNN甚至感知器。