machine-learning - 逻辑回归应用场景 - 随机森林




一般来说哪种机器学习分类器可供选择? (6)

OpenCV ”这本书在第462-463页有两页。 在亚马逊预览中搜索单词“discriminative”(也可能是Google书籍)可以让你看到有问题的页面。 这两页是我在这本书中找到的最伟大的宝石。

简而言之:

  • 提升 - 在大量训练数据可用时通常有效

  • 随机树 - 通常非常有效 ,也可以执行回归

  • K-最近的邻居 - 你可以做的最简单的事情, 经常有效缓慢 ,需要大量的内存

  • 神经网络 - 训练缓慢运行速度非常 ,仍然是字母识别的最佳表现者。

  • 支持向量机 - 数据有限的情况下 是最好的 ,但只有当大数据集可用时,才会对增强随机树 失败

假设我正在处理一些分类问题。 (欺诈检测和评论垃圾邮件是我现在正在处理的两个问题,但我一般对任何分类任务感到好奇。)

我怎么知道我应该使用哪个分类器?

  1. 决策树
  2. SVM
  3. 贝叶斯
  4. 神经网络
  5. K-最近的邻居
  6. Q学习
  7. 遗传算法
  8. 马尔可夫决策过程
  9. 卷积神经网络
  10. 线性回归或逻辑回归
  11. 提升,装袋,封锁
  12. 随机爬山或模拟退火
  13. ...

在哪些情况下是其中一种“自然”的首选,以及选择这种选择的原则是什么?

我正在寻找的答案类型的示例(来自Manning等人的“信息检索简介”一书):

一个。 如果您的数据是标记的,但您只有有限的数量,则应该使用具有高偏差的分类器(例如,朴素贝叶斯)

我猜这是因为偏向较高的分类器会有较低的方差,这是很好的,因为数据量很小。

如果你有大量的数据,那么分类器并不重要,所以你应该选择一个具有良好可扩展性的分类器。

  1. 什么是其他指导方针? 即使答案是“如果你必须向高层管理人员解释你的模型,那么也许你应该使用决策树,因为决策规则是相当透明的”是好的。 不过,我并不关心实施/库问题。

  2. 另外,对于一个单独的问题,除了标准的贝叶斯分类器之外,是否有'标准的最先进的'评论垃圾邮件检测方法(与垃圾邮件相反)?


Sam Roweis 曾经说过 ,在任何其他事情之前,你应该尝试朴素贝叶斯,逻辑回归,k-最近邻居和Fisher线性判别式。


您在选择使用哪种算法时可能会考虑的事项包括:

  1. 您是否需要逐步培训 (而不是批量培训 )?

    如果你需要频繁地更新你的分类器(或者你有很多数据),你可能会想要使用贝叶斯。 神经网络和支持向量机需要一次性处理训练数据。

  2. 您的数据是仅包含分类还是仅包含 数字 ,还是两者都包含

    我认为贝叶斯最适合分类/二项式数据。 决策树无法预测数值。

  3. 你或你的听众是否需要了解分类器的工作原理?

    使用贝叶斯或决策树,因为这些可以很容易地解释给大多数人。 神经网络和SVM是“黑匣子”,因为您无法真正了解他们如何分类数据。

  4. 你需要多少分类速度

    SVM在分类时很快,因为它们只需确定数据所在的“行”的哪一侧。 决策树可能会很慢,特别是当它们很复杂时(例如很多分支机构)。

  5. 复杂性

    神经网络和SVM可以处理复杂的非线性分类。


您应始终考虑推断与预测权衡。

如果您想了解数据中出现的复杂关系,那么您应该使用丰富的推理算法(例如线性回归或套索)。 另一方面,如果你只对结果感兴趣,你可以使用高维和更复杂(但不易解释)的算法,如神经网络。


正如Andrew Ng教授经常说的那样:总是从实施一个粗糙的,肮脏的算法开始,然后迭代地改进它

对于分类, 朴素贝叶斯是一个很好的入门者,因为它具有良好的性能,高度可扩展性,并且可以适应几乎任何类型的分类任务。 同样, 1NN (仅有1个邻居的K-最近邻居)是一个没有麻烦的最佳拟合算法(因为数据将是模型,因此您不必关心决策边界的维数拟合),唯一的问题是计算成本(二次方,因为您需要计算距离矩阵,所以它可能不适合高维数据)。

另一个好的入门算法是随机森林 (由决策树组成),这对任何维度都是高度可扩展的,并且通常具有相当可接受的性能。 最后,有遗传算法 ,它可以非常好地适应任何维度和任何数据,而对数据本身知之甚少,其中最简单和最简单的实现就是微生物遗传算法 (Inman Harvey的唯一一行C代码! 1996),最复杂的是CMA-ES和MOGA / e-MOEA。

请记住,通常,在实际使用算法之前,您无法真正了解哪些数据最适合您的数据。

作为一个侧面说明,如果你需要一个理论框架来测试你的假设和算法对于给定问题的理论性能,你可以使用PAC(可能近似正确)的学习框架 (注意:它非常抽象和复杂!),但是总结,PAC学习的要点是,你应该使用适合你的数据的不太复杂但复杂的算法(复杂度是算法可以拟合的最大维数)。 换句话说,使用奥卡姆剃刀。


首先,你需要确定你的问题。 这取决于你有什么样的数据和你想要的任务是什么。

如果你是Predicting Category

  • 你有Labeled Data
    • 您需要遵循Classification Approach及其算法
  • 你没有Labeled Data
    • 你需要去Clustering Approach

如果你是Predicting Quantity

  • 你需要去Regression Approach

除此以外

  • 你可以去Dimensionality Reduction Approach

上述每种方法都有不同的算法。 特定算法的选择取决于数据集的大小。

资料来源: http://scikit-learn.org/stable/tutorial/machine_learning_map/ : http://scikit-learn.org/stable/tutorial/machine_learning_map/







machine-learning