• 机器学习笔记——逻辑回归(对数几率回归)和朴素贝叶斯分类器的对比


    一 综述

      由于逻辑回归和朴素贝叶斯分类器都采用了极大似然法进行参数估计,所以它们会被经常用来对比。(另一对经常做对比的是逻辑回归和SVM,因为它们都是通过建立一个超平面来实现分类的)本文主要介绍这两种分类器的相同点和不同点。

    二.两者的不同点

    1.两者比较明显的不同之处在于,逻辑回归属于判别式模型,而朴素贝叶斯属于生成式模型。具体来说,两者的目标虽然都是最大化后验概率,但是逻辑回归是直接对后验概率P(Y|X)进行建模,而朴素贝叶斯是对联合概率P(X,Y)进行建模,所以说两者的出发点是不同的。

    (西瓜书上关于贝叶斯分类器的那章有比较详细的解释)

    2.朴素贝叶斯分类器要求“属性条件独立假设”即,对于已知类别的样本x,假设x的所有属性是相互独立的。这就导致了两点与逻辑回归的不同之处:

    (1)朴素贝叶斯的限制条件比逻辑回归更加严格,意味着逻辑回归的应用范围更广。

    (2)朴素贝叶斯可以不通过(而不是不能梯度下降等优化方法进行参数优化,事实上,在利用极大似然法的进行参数估计的时候,由于其严格的条件限制,朴素贝叶斯分类器的相关参数就已经很明确了,或者说是有固定的形式了(此处可以参考:https://www.cnblogs.com/wangkundentisy/p/9127399.html),它可以直接通过统计每个特征的逻辑发生比来当做权重。;而逻辑回归求得的参数并没有明确的形式(因为他没有朴素贝叶斯那么严格的限制条件),可以通过梯度下降法等优化方法,得到特征之间的耦合信息,从而得到相应的权重(参数)。

    3.更直观的来看,逻辑回归是通过学习超平面来实现分类,而朴素贝叶斯通过考虑特征的概率来实现分类。

    4.逻辑回归在有相关性feature上面学习得到的模型在测试数据的performance更好。也就是说,逻辑回归在训练时,不管特征之间有没有相关性,它都能找到最优的参数。而在朴素贝叶斯中,由于我们给定特征直接相互独立的严格设定,在有相关性的feature上面学习到的权重同时变大或变小,它们之间的权重不会相互影响。从这方面来说,如果能够在对参数较好地控制,在损失项方面处理的很好的话,逻辑回归相对朴素贝叶斯在应用时更不会限制在特征工程(feature engineering)上面。(简言之,逻辑回归对特征工程的要求相对朴素贝叶斯更低)

    5.朴素贝叶斯的好处是没有优化参数这一步(由2可知),通过训练数据可以直接得到一个counting table,这些有助于并行化。

    6.Andrew Ng和Michael Jordan在2001年发了一篇NIPS短文《 On Discriminative vs. Generative classifiers: A comparison of logistic regression and naive Bayes 》,他们把这两个模型用在各种数据集上面进行测试,最后得到在小数据上面朴素贝叶斯分类器可以取得更好的效果,随着数据的增多、特征维度的增大,逻辑回归的效果更好。这也是因为朴素贝叶斯是生成模型,在有prior的情况下模型能够把数据fit的更好,而逻辑回归属于判别模型,目标驱动化,不去建模联合概率,通过训练数据直接预测输出,因此在数据足够多的情况下能够得到更好一些的效果。

    三.两者的相同点

    1.两者都利用了极大似然法进行参数估计。虽然似然函数的目标不同。

    2.逻辑回归和朴素贝叶斯分类器都是对特征的线性表达,虽然两者拟合的参数不同,前者是W和b后者是先验概率和似然(参考:https://www.cnblogs.com/wangkundentisy/p/9127399.html)。

    3.逻辑回归和朴素贝叶斯建模的都是条件概率(后者通过贝叶斯公式得到) ,对所最终求得的不同类的结果有很好的解释性。而不像SVM,神经网络这样解释性不高。

    参考:http://sunshiningjiang.github.io/2015/05/08/Comparision-between-Logistic-Regression-and-Naive-Bayes/

       https://www.zhihu.com/question/265995680

  • 相关阅读:
    通俗的讲解下傅立叶分析和小波分析之间的关系
    Kalman滤波
    K-L变换和 主成分分析PCA
    c语言字符串库函数#include<string.h>
    c语言字符类别测试库函数#include<ctype.h>
    c语言之extern关键字
    陈正冲老师讲c语言之声明和定义的区别
    陈正冲老师讲c语言之const关键字
    陈正冲老师讲c语言void关键字
    陈正冲老师讲c语言之内存的申请malloc() 和释放free()
  • 原文地址:https://www.cnblogs.com/wangkundentisy/p/9193217.html
Copyright © 2020-2023  润新知