从不会到不怕——用R语言搞懂高斯朴素贝叶斯

文摘   2024-11-19 05:31   德国  

高斯朴素贝叶斯(Gaussian Naive Bayes)是一种基于贝叶斯定理的分类算法,其特点是假设数据的每个特征在每个类别下服从正态分布(即高斯分布)。这种算法通常用于特征服从正态分布的分类问题。

朴素贝叶斯的核心思想

朴素贝叶斯分类器基于贝叶斯定理,计算样本属于各个类别的后验概率,选择后验概率最大的类别作为最终预测结果。它的假设是特征之间相互独立,这也是“朴素”一词的由来。

在高斯朴素贝叶斯中,我们假设每个特征的分布是正态分布(高斯分布)。因此,我们需要知道每个特征在每个类别下的均值和标准差,然后用这些参数来计算每个样本的概率。

计算过程详解

以“是否喜欢电影《小鬼当家》”为例,假设我们根据三种特征来进行分类:
  • 爆米花的消费量(Popcorn)
  • 饮料的消费量(Soda)
  • 糖果的消费量(Candy)
假设训练数据如下:
  • 对于喜欢《小鬼当家》的人,爆米花的均值是24克,标准差是4克;对于不喜欢的人,爆米花的均值是4克,标准差是2克。
  • 对于喜欢《小鬼当家》的人,饮料的均值是350ml,标准差是50ml;对于不喜欢的人,饮料的均值是200ml,标准差是60ml。
  • 对于喜欢《小鬼当家》的人,糖果的均值是22克,标准差是5克;对于不喜欢的人,糖果的均值是12克,标准差是3克。
假设有一个新样本(人每天吃20克爆米花、喝500ml饮料、吃25克糖果),我们需要判断他/她是否喜欢《小鬼当家》。步骤如下:
  1. 计算先验概率(即每个类别的初始概率):
  • 假设在训练数据中,8人喜欢《小鬼当家》,8人不喜欢,因此先验概率为0.5。
  • 计算似然概率(即每个特征在每个类别下的概率):
    • 计算20克爆米花、500ml饮料和25克糖果在喜欢《小鬼当家》和不喜欢《小鬼当家》类别下的概率。使用正态分布公式:
    1. 计算后验概率
    • 使用贝叶斯公式,结合先验概率和似然概率,计算样本属于“喜欢《小鬼当家》”和“不喜欢《小鬼当家》”的概率。
  • 选择后验概率最大的一类
    • 如果喜欢《小鬼当家》的后验概率更大,则预测该样本喜欢《小鬼当家》,否则预测不喜欢。

    高斯朴素贝叶斯的R语言实现

    # 加载 e1071 包,这个包中包含了高斯朴素贝叶斯的函数library(e1071)
    # 创建训练数据集data <- data.frame( popcorn = c(24, 4, 30, 5, 26, 5, 20, 4), # 爆米花消费量 soda = c(350, 200, 400, 180, 320, 220, 300, 190), # 饮料消费量 candy = c(22, 12, 25, 10, 24, 11, 23, 9), # 糖果消费量 love_troll2 = factor(c(1, 0, 1, 0, 1, 0, 1, 0)) # 目标变量:1表示喜欢,0表示不喜欢)
    # 拆分数据集为训练集和测试集train_data <- data[1:6,] # 使用前6条数据作为训练集test_data <- data[7:8,] # 使用后2条数据作为测试集
    # 训练高斯朴素贝叶斯模型model <- naiveBayes(love_troll2 ~ popcorn + soda + candy, data=train_data)
    # 对测试集进行预测predictions <- predict(model, test_data)
    # 输出预测结果print(predictions)

    高斯朴素贝叶斯算法是一种高效且直观的分类方法,适用于特征服从正态分布的情况。其优势在于简单易懂、计算效率高,但需要特征满足独立性和正态分布的假设。在实际应用中,可以通过特征选择和交叉验证来优化模型表现。

    Dr Leo
    ENT医生的科研分享
     最新文章