机器学习在实际实践中的意义何在?

机器算法验证 机器学习 算法
2022-03-09 15:33:43

我是机器学习(还有一些统计数据)的新手,已经学习了一段时间的知识(监督/非监督学习算法、相关优化方法、正则化、一些哲学(例如偏差-方差权衡?))。我知道,如果没有任何实际的实践,我不会对那些机器学习的东西有深入的了解。

所以我从一些真实数据的分类问题开始,比如手写数字分类(MNIST)。令我惊讶的是,在没有任何特征学习/工程的情况下,使用以原始像素值作为输入的随机森林分类器,准确率达到 0.97。我还尝试了其他学习算法,例如 SVM、LR,并调整了参数。

然后我迷路了,是不是太容易了,还是我在这里遗漏了什么?只是从工具包中选择一个学习算法并调整一些参数?

如果这一切都与实践中的机器学习有关,那么我将失去对这个领域的兴趣。我思考并阅读了几天的博客,得出了一些结论:

  1. 机器学习在实践中最重要的部分是特征工程,即给定数据,找出更好的特征表示。

  2. 使用哪种学习算法也很重要,参数调整也很重要,但最终的选择更多的是关于实验。

我不确定我是否理解正确,希望有人能纠正我并给我一些关于机器学习实践的建议。

2个回答

实践中的机器学习 (ML) 取决于进行 ML 的目标是什么。在某些情况下,可靠的预处理和应用一套开箱即用的 ML 方法可能就足够了。然而,即使在这些情况下,了解这些方法的工作原理以便能够在出现问题时进行故障排除也很重要。然而,ML 在实践中的意义远不止于此,MNIST 就是一个很好的例子。

在 MNIST 数据集上获得“良好”的性能看似容易。例如,根据Yann Le Cun 的 MNIST 性能网站,使用欧几里德距离度量 (L2) 的 K 个最近邻 (K-NN) 的错误率也为 3%,与您的开箱即用随机数相同森林。L2 K-NN 与 ML 算法一样简单。另一方面,Yann、Yoshua、Leon 和 Patrick 最好的,第一次使用这个数据集 LeNet-4,错误率为 0.7%,0.7% 不到 3% 的四分之一,所以如果你把这个系统放到练习阅读手写数字,天真的算法需要四倍的人力来修复它的错误。

Yann 及其同事使用的卷积神经网络与任务相匹配,但我不会将其称为“特征工程”,而是努力理解数据并将这种理解编码到学习算法中。

那么,有什么教训:

  1. 使用开箱即用的方法和良好的预处理很容易达到简单的性能基线。您应该始终这样做,以便您知道基线在哪里以及该性能水平是否足以满足您的要求。但请注意,开箱即用的 ML 方法通常是“脆弱的”,即对预处理非常敏感。一旦你训练了所有开箱即用的方法,尝试将它们装袋几乎总是一个好主意。
  2. 难题需要特定领域的知识或更多数据或两者兼而有之。特征工程意味着使用特定领域的知识来帮助 ML 算法。但是,如果您有足够的数据、可以利用该数据来学习复杂特征的算法(或方法)以及应用该算法的专家,那么您有时可以放弃这些知识(例如Kaggle Merck 挑战)。此外,有时领域专家对什么是好的特性是错误的;所以更多的数据和 ML 专业知识总是有帮助的。
  3. 考虑错误率而不是准确性。准确度为 99% 的机器学习方法所产生的错误是准确度为 98% 的机器学习方法的一半;有时这很重要。

我认为您在博客或网站上找到的示例是已知常用方法运行良好的示例(当然,即使它们可以改进)。

我的专长是特征工程,我可以告诉你,标准算法通常根本不能很好地工作。(我对该领域一无所知,但我经常与拥有该领域的人一起工作。)。

这里有一个我工作了 6 个月的真正问题:给定一个矩阵 X,它有 100 个样本和 10000 个变量,代表患者的遗传值,输出 y 的大小为 100 x 1,代表骨骼的密度。

你能告诉我哪些基因会影响骨骼的密度吗?

现在我正在解决另一个问题。我有一个包含 2000 个样本和 12000 个变量的制造生产数据集。我的老板想以无人监督的方式从这个数据集中提取不超过 30 个变量。
我尝试了一些算法,但我不能选择少于 600 个变量,因为它们之间非常相关。(我还在努力……)

另一个需要考虑的重要思想是各种算法的速度性能。在很多情况下,你不能等待 20 分钟等待结果。例如,您需要知道何时使用 NIPALS 以及何时使用 SVD 来计算 PCA。

希望这可以让您了解 ml 中常见的问题。