朴素贝叶斯分类器
朴素贝叶斯分类器
朴素贝叶斯算法: 它是一种基于贝叶斯定理的监督机器学习算法。它是一种用于各种分类任务的概率机器学习算法。在我们深入探讨这个话题之前,我们首先要了解什么是 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),所以天气不适合玩。
朴素贝叶斯分类器的类型:
- 多项朴素贝叶斯分类器: 广泛用于自然语言处理(NLP)任务。它使用贝叶斯定理预测文本的标签,并计算给定样本的每个标签的可能性,并以更大的概率输出标签。
- 伯努利朴素贝叶斯分类器: 在伯努利朴素贝叶斯分类器中,预测变量是独立的布尔变量。它用于文档分类,其中使用二进制术语出现(文档中是否存在单词)而不是术语频率。
- 高斯朴素贝叶斯分类器: 在高斯朴素贝叶斯中,假设与每个特征相关的连续值按照高斯分布(正态分布)分布。高斯朴素贝叶斯的条件概率由下式给出:
使用最大似然估计参数 σy 和 μy。
朴素贝叶斯分类器的优点:
- 适用于具有许多特征的数据。
- 与其他算法相比,它在多类预测中表现良好。
- 当我们训练模型时它收敛得更快
朴素贝叶斯分类器的缺点: 它假设所有特征都是独立的,或者它们之间没有影响性能的相关性。
朴素贝叶斯分类器的应用:
- 文本分类如 垃圾邮件检测 和 情绪分析 .
- 它可用于 文件分类。
- 它可以用于 实时预测 因为朴素贝叶斯分类器是一个热切的学习者。
使用 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 版权协议,转载请附上原文出处链接和本声明