部分算法应用场景总结

前言

最近在做 MNIST 的分类问题,使用 sklearn 包尝试了几种不同的算法,惊奇的发现 KNN 算法竟然对 MNIST 分类问题有着较高的正确率,在 20000*120 的 MNIST 数据集上,可以达到95%以上的正确率。在这之前,一直天真的以为KNN算法如此简单,应该不能胜任如此高维度的数据,没想到效果竟是如此之好。向奥卡姆剃刀原则致敬。当然各种算法都有自己的胜任场景,在此篇文章中总结一下。


基本概念

  • 过拟合
  • 拟合不足
  • 泛化误差(泛化能力)
  • 奥卡姆剃刀原则:两个泛化能力和拟合度基本相同的两个模型,应该选择简单的模型,因为复杂模型更有可能拟合了噪声样本,这提醒我们在评价一个模型的时候,需要考虑模型的复杂度。

KNN

  • 性质
    • 分类算法,有监督学习
  • 问题
    • 如何选择K值?
      • K值太小,受噪声影响较大
      • K值太大,可以减少噪声影响,但是分类界限更加模糊,分类效果不一定变好
      • 可以通过交叉验证的方式获取K值
    • 如何选择相似性度量标准?(欧氏距离,马氏距离或者是其他相似性度量方式)
    • 如何构建KD-tree,Ball-tree来加快分类过程?
  • 特点:
    • 精度高,对异常值不敏感,无数据输入假定
    • 不需要训练,test计算量大,耗费内存大(因为所有的数据都需要加载到内存中)
    • 如果样本分布不平衡,可能影响分类(样本数量多的类别总是占据优势)

Decision Tree

  • 性质
    • 分类算法,有监督学习
  • 问题
    • 计算最佳分类属性,Gini,ID3,C4.5,MissError?
    • 其中ID3分裂方法,为了达到较高的purity,可能会分裂出很多个子节点,但是子节点太多的话,会产生数据碎片,分类结果没有参考意义,所以出现了C4.5算法,弥补了该缺陷。(C4.5的分类过程:1.根据ID3算法选择出待分裂的属性;2.根据熵增增益率来决定最佳分类属性)
    • 如何处理缺失值?
    • 如何处理过拟合问题(提高泛化能力)?(噪声影响,训练样本不足,算法问题)
    • 前剪枝,后剪枝
    • 数据碎片:训练过程中,分类到决策树的叶节点的样本数量太少,难以做出有意义的统计学分析,所以该节点分类失去意义,造成数据碎片
  • 特点
    • 建树过程简单
    • 分类速度快

bootstrap

缺点

  • 因为数据集是随机生成的,同样的数据集也可能生成不同的模型,也就是说模型不能稳定复现,这对评估过程是一个很大挑战,因为如果实验变好,也许不是你的feature选择的对,也可能是re-sampling的随机性因素。

results matching ""

    No results matching ""