朴素贝叶斯分类器

朴素贝叶斯分类器

朴素贝叶斯算法: 它是一种基于贝叶斯定理的监督机器学习算法。它是一种用于各种分类任务的概率机器学习算法。在我们深入探讨这个话题之前,我们首先要了解什么是 C 附加概率 是 __ 是什么 贝叶斯定理 .

条件概率: 条件概率是对一个事件发生的概率的度量,假设另一个事件已经发生。

Conditional Probability

让我们试着用一个例子来理解。假设你必须从一副牌中挑选一张牌,并在这张牌是红色的情况下找出得到皇后的概率。所以在这种情况下,P(Red) 将是 1/26,因为红牌的总数是 26。由于 26 张红牌中有 2 个皇后,所以在红牌的情况下得到皇后的概率是 2/26 .

 P(后|红) = P(后∩红)/ P(红)  
 P(女王|红色)= 2/26 = 0.077

贝叶斯定理(Bayes' law | Bayes' rule): 以托马斯贝叶斯命名。贝叶斯定理描述了基于一些先验条件的事件概率。

Bayes’ Theorem

其中 A 和 B 是事件,P(B) ≠0

  • P(A|B) 是 条件概率 :在 B 为真的情况下,事件 A 发生的概率。它也被称为 后验概率 .
  • P(B|A) 也是一个 条件概率 :在 A 为真的情况下,事件 B 发生的概率。它也被称为 似然概率 .
  • P(A) 是 先验概率。
  • P(B) 是 边际概率。

朴素贝叶斯的假设: 朴素贝叶斯的基本假设是每个特征 独立平等 对结果的贡献。让我们考虑一个示例以便更好地理解。考虑具有 Outlook 和 Temperature 功能的天气预报问题,目标列 Play 可以是“Yes”或“No”。

Dataset

基于朴素贝叶斯的假设,我们假设特征彼此独立并且每个特征具有相同的重要性。例如,仅了解 Outlook 和温度并不能完美地预测结果。因此,假定所有属性的贡献相同。

在这个例子中,我们需要 根据天气的特点,对天气是否适合玩进行分类。 根据我们的例子,贝叶斯定理可以写成:

其中 y 是目标列,Play 和 X 是特征。 X 给出为:

其中 x1, x2,…xn 代表特征。通过代入 X 的值并使用链式法则展开我们得到,

由于给定数据集的分母相同,因此我们可以使用比例常数将其删除,并可以给出:

在我们的例子中,目标列只有两个结果,“是”和“否”,但如果结果是多变量的,我们必须找到具有最大概率的类。

所以现在我们必须计算 P(y)、类概率和 P(Xi|y) 即条件概率。让我们尝试计算 Outlook 和 Temperature 列的频率和可能性。

今天在一组新数据上测试一下=(晴天,热)

 P(是|今天) = P(晴|是)*P(热|是)*P(是)  
 = 1/8*1/8*8/12  
 = 0.0104 P(无|今天) = P(晴|无)*P(热|无)*P(无)  
 = 1*1/2*4/12  
 = 0.1667  
 P(是|今天)+ P(否|今天)= 1  
 标准化后  
 P(是|今天) = 0.0104/(0.0104+0.1667)  
 = 0.06  
 P(否|今天) = 0.1667/(0.0104+0.1667)  
 = 0.94

由于 P(No|today) > P(Yes|today),所以天气不适合玩。

朴素贝叶斯分类器的类型:

  1. 多项朴素贝叶斯分类器: 广泛用于自然语言处理(NLP)任务。它使用贝叶斯定理预测文本的标签,并计算给定样本的每个标签的可能性,并以更大的概率输出标签。
  2. 伯努利朴素贝叶斯分类器: 在伯努利朴素贝叶斯分类器中,预测变量是独立的布尔变量。它用于文档分类,其中使用二进制术语出现(文档中是否存在单词)而不是术语频率。
  3. 高斯朴素贝叶斯分类器: 在高斯朴素贝叶斯中,假设与每个特征相关的连续值按照高斯分布(正态分布)分布。高斯朴素贝叶斯的条件概率由下式给出:

使用最大似然估计参数 σy 和 μy。

朴素贝叶斯分类器的优点:

  1. 适用于具有许多特征的数据。
  2. 与其他算法相比,它在多类预测中表现良好。
  3. 当我们训练模型时它收敛得更快

朴素贝叶斯分类器的缺点: 它假设所有特征都是独立的,或者它们之间没有影响性能的相关性。

朴素贝叶斯分类器的应用:

  1. 文本分类如 垃圾邮件检测情绪分析 .
  2. 它可用于 文件分类。
  3. 它可以用于 实时预测 因为朴素贝叶斯分类器是一个热切的学习者。

使用 Python 实现朴素贝叶斯分类器

我们必须在泰坦尼克号数据集中找到乘客是否幸存。

 # 导入必要的库 将熊猫导入为 pd  
 将 matplotlib.pyplot 导入为 plt #加载csv文件  
 df = pd.read_csv('titanic_dataset.csv')  
 df.sample(5) df.drop(['PassengerId','Name','SibSp','Parch','Ticket','Cabin','Embarked'],axis='columns',inplace=True)  
 df['Sex'] = df['Sex'].apply(lambda x:1 if x=='male' else 0)  
 df.head()

 # 检查缺失值  
 df.isnull().sum()  
 # 检查异常值  
 将 seaborn 导入为 sns  
 sns.boxplot(df['年龄'])

BoxPlot

由于我们在 Age 列中有 177 个缺失值,并且也很少有异常值,因此我们将用中位数而不是均值替换空值。

 df['年龄'] = df.Age.fillna(df.Age.median())  
 X = df.drop('幸存者',axis=1)  
 y = df['幸存的'] #将数据吐到训练/测试中 从 sklearn.model_selection 导入 train_test_split  
 X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,stratify=y) 从 sklearn.naive_bayes 导入 GaussianNB  
 gnb = GaussianNB()  
 gnb.fit(X_train,y_train) gnb.score(X_test, y_test) y_pred = gnb.predict(X_test) 从 sklearn.metrics 导入混淆矩阵  
 厘米 = 混淆矩阵(y_test,y_pred)

概括

综上所述,在本文​​中,我们了解了条件概率,如何在朴素贝叶斯算法中使用贝叶斯定理,朴素贝叶斯的优缺点及其应用。对于实际实施,请访问我的 GitHub 存储库。

希望你喜欢它!快乐学习。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/40056/25043017

posted @ 2022-09-30 17:25  哈哈哈来了啊啊啊  阅读(361)  评论(0编辑  收藏  举报