算法选择--模型选择与评估

实际应用中我们如何选择合适的模型

在这里插入图片描述


算法的选择纲领

  要想获取好的结果,按照流程工作很重要,并且仔细检查确保不犯常见错误。

模型选择及评估流程a方案:

  1)先针对特定问题,选算法。一般不会用最新的,而是用最成熟的,大概会选择2到3个算法。
  2)实现算法,小规模样本保证流程正确。有数据就爽,不然还要收集。
  3)调参数,选特征。得到模型的最优解。
  4)针对特定问题会进行少量的修改。

模型选择及评估流程b方案:

  根据要解决的问题和对数据的理解,大致决定出模型的搜索范围,如尝试SVM,逻辑回归,随机森林等。如资源允许,可扩大模型候选名单。
  根据要解决的问题和对数据的理解,决定模型的评估标准。虽然建议选择单一的评估标准进行对比,但推荐计算所有可能的评估标准。
  根据具体问题中的数据量大小,以及模型稳定性,决定是否使用交叉验证。
  结合参数搜索、交叉验证方法,通过选定的评估标准从候选模型中找到表现最好的模型。
  对上一步中的所选模型进行微调。迭代以上步骤直到找到最优的模型。

经验

  1)你最偏向使用哪个机器学习算法?
  我会逐个来筛选算法,但我更喜欢在模型集成时使用一些简单算法,如岭回归(ridge regression)。在深度学习比赛中,我喜欢从resnet-50网络或类似结构来开始尝试。

  2)把回归问题转为分类问题,牺牲一部分精度;
  3)舍弃掉一部分密度很低的数据,对于高密度区域根据密度重建模型;
  4)如果不行,对于高密度区域用有限混合模型(Finite Mixture Model)再做一次。


「神经网络」VS「决策树算法」,怎么选? "如果不强调绝对的解释度,尽量避免单棵决策树,用集成树模型

选择指南

  1)在集成数模型中,优先推荐使用xgboost

  2)在中小数据集上,优先选择集成树模型。大数据集上推荐神经网络

  3)在需要模型解释度的项目上,优先使用树模型

  4)在项目时间较短的项目上,如果数据质量低(大量缺失值、噪音等),优先使用集成树模型

  5)在硬件条件有限及机器学习知识有限的前提下,优先选择树模型

  6)对于结构化较高的数据,尤其是语音、图片、语言,优先使用神经网络模型(往往其数据量也较大)

  一般来说,在小数据量多特征下,集成的树模型往往优于神经网络。随着数据量增大,两者表现趋于接近,随着数据量继续上升,神经网络的优势会逐步体现。这个跟很多答主提到的一样:随着数据量上升,对模型能力的要求增加而过拟合的风险降低,神经网络的优势终于有了用武之地而集成学习的优势降低。

  用个不恰当的比喻,集成树模型就像Python,而神经网络就像C++。前者简单粗暴效果好,容易上手优点多,后者比较精贵更为复杂但严肃项目上潜力很大。如果你愿意好好学习数据结构、内存分配和要命的指针,C++几乎无所不能。但如果你只打算写个简单的网络爬虫,Python十行就可以搞定。
  综上来看,大部分项目建议使用集成决策树,首推xgboost,速度快效果好用时少。特定的复杂且数据量大的项目,建议还是老老实实的为神经网络调参,拿出debug C++ pointer的精神来。


使用深度学习算法

  1)用深度学习方法的关键是数据一定要多!!
  一个深的模型(常见的faster等等就行)+大量的数据
  无论数据多少,很多与客户进行互动的业务都在开始考虑使用这些技术。如果你只有十几个数据样例,那就很难开展深度学习。但如果你有10万个相关的数据样例,那你就应该真正开始思考这些技术的运用。
  深度学习通常需要大量数据,涉及数量和种类。然而,大多数应用仅具有有限的训练数据,其中标记了一小部分。在此,我们回顾了深度学习中应对这一挑战的三种最先进的方法。第一个主题是转移学习,其中一个域的某些方面(例如,特征)被转移到另一个域。接下来是无监督学习,例如自动编码器和降维技术,其对未标记数据进行操作。最后一个是生成性的对抗性网络,它可以生成逼真的数据,可以欺骗深度学习网络和人类。

  2)关于NN中的无监督逐层预训练
  现在的人用得少了,但会用的人用得如火如荼,不会的人只能说没用了。

猜你喜欢

转载自blog.csdn.net/wydbyxr/article/details/84748871