朴素贝叶斯算法简介

ML、ML算法、分类
朴素贝叶斯算法简介 cover image

桌子:

简介

朴素贝叶斯是一种基于贝叶斯定理的分类机器学习算法。它非常有效,尤其是在处理文本数据时,例如:情感分析、垃圾邮件检测和文本分类。

该算法被称为“Naive”,因为假设所有数据集变量都是独立的,但情况并非总是如此。

在进一步解释朴素贝叶斯如何工作之前,让我们确保理解以下内容:

条件概率

朴素贝叶斯算法基于贝叶斯定理,该定理建立在条件概率的基础上:它是在事件 B 已经发生的情况下事件 A 发生的概率。

例子:

让我们有两个装有彩球的罐子:

  • 罐子 1 有 3 个蓝球、2 个红球和 4 个绿球。

  • 罐子 2 有 1 个蓝球、4 个红球和 3 个绿球。

我们想要计算从一个罐子中随机选择一个蓝色球的概率

equations

它就是从 Jar1 或 Jar2 中选择蓝色球的概率之和。

现在,我们要计算在选择 Jar1 的情况下选择蓝色球的概率:

equations

最后,我们想要计算选择 Jar1 的概率,因为我们画了一个蓝色的球。这里我们使用贝叶斯定理,如下所示:

equations

equations

朴素贝叶斯分类

在朴素贝叶斯分类器中,我们想要找到在给定输入向量 X 的情况下最大化条件概率的类;因此,朴素贝叶斯可以表述如下:

equations

使用贝叶斯定理,该函数变为:

equations

在这个公式中,很容易计算 P(Ci),它正是类 Ci 的概率,并且很容易计算 P(x),它是事件 x 发生的概率。

比较难计算的是P(x|Ci);给定类别 Ci 的事件 x 的概率。为了进一步简化这一点,我们需要假设所有输入变量都是独立的;因此,我们可以写:

equations

实际上正是因为这个假设,我们称这个分类器为“Naive”,因为我们不能总是保证输入变量的独立性。朴素贝叶斯分类器变为:

equations

事实上,我们可以通过消除 P(x) 来进一步简化这个公式,因为它对于所有类都是相同的:

equations

现在,让我们看一个例子:

|天气 |时间 |星期几 |晚餐|

| -------- | -------- | ---------------- | ------ |

|清除 |晚上|周末|厨师|

|多云 |夜晚|工作日 |订单 |

|下雨 |夜晚|工作日 |订单 |

|下雨 |中午|工作日 |订单 |

|多云 |中午|周末|厨师|

|清除 |夜晚|周末|厨师|

|下雪 |晚上|周末|订单 |

|清除 |夜晚|工作日 |厨师|

|清除 |午夜|周末|订单 |

在这里,我们有一个小数据集,其中包含 3 个输入变量:天气、时间和星期几,以及一个目标变量:“晚餐”,指示一个人是否做饭或点餐。我们想要找到输入 x={Clear, Evening, Weekend} 的类别:

equations

我们需要计算给定输入 x={Clear, Evening, Weekend} 类“Cooks”和类“Orders”的条件概率。预测的类别是具有最高条件概率的类别。

我们首先计算“Cooks”类的条件概率:

equations

现在我们单独计算每个条件概率:

假设类别为“Cooks”,天气=“Clear”的概率是天气“Clear”和类别“Cooks”的行数除以类别“Cooks”的行总数

equations

其他条件概率也是如此:

equations

现在,对于概率 P(Cooks),它是类“Cooks”的行数除以总行数:

equations

现在我们计算这些概率的乘积:

equations

那是针对“Cooks”类的,现在我们需要对“Orders”类做同样的事情:

equations

我们计算个体概率:

equations

最后我们计算概率的乘积:

equations

最后,我们选择概率最高的类别,即“Cooks”类别:

equations

equations

equations

equations

equations

equations

该算法的优点和局限性

优点:

  • 这是一个非常快的分类器。

  • 易于实施。

  • 没有训练阶段,只是推理。

  • 不需要大量数据即可做出推论。

限制:

  • 朴素贝叶斯假设输入变量是独立的,但这并不总是正确的。

<a名称=“练习”>

  • 朴素贝叶斯遇到零频率问题:当它为输入变量分配零概率时。这会将所有条件概率 P(C|x) 归零。避免这种情况的一个技巧是对所有变量使用最小频率 1 (而不是 0 )。

练习

这是我们在示例中看到的同一数据集的数据框。

你的任务是使用 python 自己实现朴素贝叶斯:

import pandas as pd
dataset = pd.DataFrame()
dataset['Weather'] = ['Clear', 'Cloudy', 'Rainy', 'Rainy', 'Cloudy', 'Clear', 'Snowy', 'Clear', 'Clear']
dataset['Time'] = ['Evening', 'Night', 'Night', 'Midday', 'Midday', 'Night', 'Evening', 'Night', 'Midnight']
dataset['Day'] = ['Weekend', 'Weekday', 'Weekday', 'Weekday', 'Weekend', 'Weekend', 'Weekend', 'Weekday', 'Weekend']
dataset['Class'] = ['Cooks', 'Orders', 'Orders', 'Orders', 'Cooks', 'Cooks', 'Orders', 'Cooks', 'Orders']

def naive_bayes(weather, time, day):

# res_dict = {class1: probability of class 1, class1: probability of class 1
return res_dict

<a名称=“解决方案”>

## 解决方案


def naive_bayes(x_weather, x_time, x_day):
  TARGET = 'Dinner' # The name of the target variable
  CLASSES = list(dataset['Dinner'].unique()) # The classes of the target variable
len_dataset = len(dataset) # The length of the dataset
res_dict = {} # res_dict = {class1:probability1, ..., class_n:probability_n}

# for each class of the target classes, we calculate the it's conditional probability
for class_name in CLASSES:
# the number of lines that belong to the class "class_name"
len_c  = len(dataset[ (dataset[TARGET] == class_name) ])

# the number of lines that belong to the class "class_name" and have weather="x_weather"
n_weather = len(dataset[ (dataset[TARGET] == class_name) & (dataset['Weather'] == x_weather) ])
# the number of lines that belong to the class "class_name" and have time="x_time"
n_time = len(dataset[ (dataset[TARGET] == class_name) & (dataset['Time'] == x_time) ])

# the number of lines that belong to the class "class_name" and have day="x_day"
n_day  = len(dataset[ (dataset[TARGET] == class_name) & (dataset['Day'] == x_day) ])

# We calculate the conditional probability:
# P(class|x) = P(weather|class) x P(time|class) x P(day|class) x P(class)
p = (n_weather / len_c) * (n_time / len_c) * (n_day / len_c) * (len_c / len_dataset)        res_dict[class_name] = p
return res_dict



Career Services background pattern

职业服务

Contact Section background image

让我们保持联系

Code Labs Academy © 2024 版权所有.