2

我有一个应用程序需要区分好的 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) 我如何在 SVM 上再次测试看不见的 URL 以确定它的好坏?我

4

4 回答 4

6

我认为steveStompChicken都提出了很好的观点:

  • 选择最好的算法是很棘手的,即使对于机器学习专家来说也是如此。使用像 Weka 这样的通用包可以让您轻松比较一堆不同的方法,以确定哪种方法最适合您的数据。
  • 选择好的特征通常是影响学习算法效果的最重要因素之一。

检查其他人如何处理类似问题也可能很有用:

  • Qi, X. 和 Davison, BD 2009。网页分类:特征和算法。ACM 计算调查 41、2(2009 年 2 月),1-31。
  • Kan、MY 和 HON Thi(2005 年)。使用 URL 功能的快速网页分类。在第 14 届 ACM 信息和知识管理国际会议 (CIKM '05)上,纽约州纽约市,第 325-326 页。
  • Devi, MI, Rajaram, R. 和 Selvakuberan, K. 2007。使用 URL 特征进行自动网页分类的机器学习技术。在计算智能和多媒体应用国际会议论文集 (ICCIMA 2007) - 第 02 卷(2007 年 12 月 13 日至 15 日)。华盛顿特区,第 116-120 页。
于 2010-03-12T12:04:55.410 回答
3
  1. 我不同意 steve 的观点,即 SVM 在这里是一个糟糕的选择,尽管我也不认为有太多理由认为它会比任何其他判别式学习算法做得更好。

  2. 您至少需要考虑设计功能。这是使机器学习算法在特定问题上运行良好的最重要部分之一。如果对问题没有更多了解,很难知道该建议什么。我想您可以从将 URL 中存在的字符 n-gram 作为特征开始。

  3. 没有人真正知道您需要多少数据来解决任何特定问题。一般的方法是获取一些数据,学习一个模型,看看更多的训练数据是否有帮助,重复,直到你没有得到任何更显着的改进。

  4. 内核是一项棘手的工作。一些 SVM 库具有字符串内核,允许您在没有任何特征提取的情况下对字符串进行训练(我正在考虑SVMsequel,可能还有其他)。否则,您需要从数据中计算数值或二进制特征,并使用线性、多项式或 RBF 内核。尝试所有这些都没有坏处,值得花一些时间为内核参数找到最佳设置。您的数据显然也是结构化的,让学习算法尝试计算 URL 的结构是没有意义的(除非您关心无效的 URL)。您至少应该根据分隔符“/”、“?”、“.”、“=”来拆分 URL。

  5. 我不知道您所说的“保持最新”是什么意思。使用您拥有的任何新数据重新训练模型。

  6. 这取决于您使用的库,在 svmlight 中有一个名为 svm_classify 的程序,它采用模型和示例并为您提供类标签(好或坏)。我敢肯定,在任何图书馆里做这件事都会很简单。

于 2010-03-12T11:27:48.020 回答
2

如果我理解正确,您只想了解 URL 的好坏。

SVM 是不合适的,仅当数据集非常复杂并且许多信息点靠近超平面时,SVM 才合适。您将使用 SVM 为数据添加额外的维度。

理想情况下,您需要几千个 URL 来训练您的数据集。越多越好,显然你可以只用 100 个,但你的结果可能不会产生好的分类。

我建议你先建立你的数据集并使用 Weka http://www.cs.waikato.ac.nz/ml/weka/

您可以衡量哪种算法可以为您提供最佳结果。

于 2010-03-11T14:20:09.997 回答
0

你将使用什么数据集进行训练,如果你有一个好的数据集,我相信 SVM 会做得很好,而且惩罚因子很好。如果没有数据集,我建议使用 kNN 甚至感知器等在线算法。

于 2012-03-05T05:44:14.533 回答