朴素贝叶斯

    很多分类算法中,特征与标签之间的关系并非决定性的。算法得出的结论,永远不是100%确定对的,更多的是判断出了一种“样本的标签更可能是某类的可能性”,而非一种“确定”。
    每种算法使用不同的指标来衡量这种可能性,比如说,决策树使用的是叶子结点上占比较多的标签所占的比例,逻辑回归使用的是sigmoid函数压缩后的似然,而SVM使用的是样本点到决策边界的距离,而这些指标的本质,其实都是一种“类概率”的表示。
    而朴素贝叶斯是真正的概率分类器,朴素贝叶斯是一种直接衡量标签与特征之间对的概率关系的有监督学习算法,是一种专注分类的算法。朴素贝叶斯算法根源就是基于概率论和数理统计的贝叶斯理论,因此它是根正苗红的概率模型。

相关概念

  • 联合概率
    “X取值为x”和“Y取值为y”两个事件同时发生的概率,表示为P(X=x, Y=y)
  • 条件概率
    在“X取值为x”的条件下,“Y取值为y”的概率,表示为P(Y=y|X=x)
  • 两个事件的联合概率等于这两个事件任意条件概率*这个条件事件自身的概率:
    P(X,Y) = P(Y|X)*P(X)=P(X|Y)*P(Y)
  • 因此可以得到贝叶斯理论等式:
    P(Y|X) = \frac{P(X|Y)*P(Y)}{P(X)}
    P(Y)称为先验概率,P(Y|X)称为后验概率,P(X|Y)称为“类的条件概率”。
  • 假设特征间相互独立,则
    P(X|Y=1) = \prod_{i=1}^nP(X_i=x_i|Y=1)
    即,在Y=1的条件下,多个特征被同时取到的概率,等于在Y=1时多个特征被分别取到的概率相乘。
  • 假设特征之间是有条件独立的,可以解决众多问题,也简化了很多计算过程,这是朴素贝叶斯被称为“朴素”的理由。
  • 全概率公式:
    P(X) = \Sigma_{i=1}^mP(y_i)*P(X|y_i)
  • 朴素贝叶斯是有监督,不建模的分类算法。
  • 最大后验估计:只需要求解贝叶斯公式中的分子,因为分母是一致的,可以不进行计算。

连续型变量的概率估计

  • 连续型变量每个取值的概率趋向于0,该怎么计算呢?
  • 强行变成分区间,变成分类型,每个区间的均值Xi作为取值,其取值的概率可以通过概率密度曲线 (probability density function, PDF)下面积来计算。因此,由于区间的适当选取比较困难,我们可以不进行区间的选取,而将求解连续型变量下某个点Xi取值的概率问题,转换成求解概率密度函数在Xi上的取值的问题。因此,求解概率密度曲线即可。
  • 现实生活中,我们假设概率密度函数是满足某种统计学分布的,最常见的就是高斯分布,即正态分布。常用的还有伯努利分布,多项式分布等。

sklearn中的朴素贝叶斯

  • naive_bayes.BernoulliNB,伯努利分布下的朴素贝叶斯;
  • naive_bayes.GaussianNB,高斯分布下的朴素贝叶斯;
    • 通过假设P(Xi|Y)是服从高斯分布的,来估计每个特征下每个类别上的条件概率;
    • 参数prior,表示类的先验概率,若不指定,则自行根据数据进行计算;
    • var_smoothing,为了追求估计的稳定性,将特征中最大的方差以某个比例添加到估计的方差中。这个比例就是var_smoothing;
    • 高斯朴素贝叶斯的决策边界是曲线;
    • 决策树是天生过拟合的模型,支持向量机是不调参情况下就非常接近极限的模型;朴素贝叶斯天生分类能力比较弱且潜力较弱,弱于决策树/随机森林/逻辑回归等;
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.naive_bayes import GaussianNB
    from sklearn.datasets import load_digits
    from sklearn.model_selection import train_test_split
    
    digits = load_digits()
    X, y = digits.data, digits.target
    Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,y,test_size=0.3,random_state=2023)
    
    gnb = GaussianNB().fit(Xtrain,Ytrain) ##求解高斯分布的参数的过程
    acc_score = gnb.score(Xtest,Ytest) #分数
    Y_pred = gnb.predict(Xtest) #查看预测结果
    prob = gnb.predict_proba(Xtest) #查看预测的概率结果
    
    from sklearn.metrics import confusion_matrix as CM
    CM(Ytest,Y_pred) #ROC曲线不能用于多分类,多分类情况下最佳的模型评估指标是混淆矩阵和整体的准确的
    
  • naive_bayes.MultinomialNB,多项式分布下的朴素贝叶斯;
  • naive_bayes.ComplementNB,补充朴素贝叶斯;
  • linear_model.BayesianRidge,贝叶斯岭回归,在参数估计过程中使用贝叶斯回归技术来包括正则化参数;
  • 与SVM和随机森林相比,朴素贝叶斯运算速度更快;

参考

[1] B站菜菜

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容