机器学习之朴素贝叶斯

机器学习之朴素贝叶斯

文章目录

  • 机器学习之朴素贝叶斯
    • 1:概述
    • 2:条件概率
    • 3:鸢尾花为例讲解

1:概述

朴素贝叶斯算法是应用得非常广的一种算法之一。朴素贝叶斯它是基于特征独立和贝叶斯定义的一种算法,它在许多分类上都有非常好的效果,由于朴素贝叶斯算法可以通过公式推导,因此有非常坚实的数学基础,朴素贝叶斯模型对数据参数据要求不高,对数据缺失并不敏感。理解朴素贝叶斯模型肯定也需要的理解条件概率这个概念。

2:条件概率

什么是条件概率呢,我们假设事件A和事件B相互独立,互不干扰,A发生不发生和B没有直接的关系。那么现在我给大家举个例子:

假设有家人两个孩子,想要一个男孩,一个女孩,那么请问在一个孩子是男孩子的条件下,另一个是女孩子的概率是多少:

那么显然这家人家庭结构只可能是以下:

1: 男1 男2

2: 男1 女2

3 女1 男2

4 女1 女2

那么已经确定了有了一个孩子是男孩了,那么显然,有一个孩子是男孩子中,另一个是女生的概率是2/3;

则P(A|B)=P(A,B)/P(B)=2/3;

我们记有个是男孩的概率是先验概率,在有个是男孩的概率下,另外一个是女孩子的概率记为后验概率;

则先验概率为:1/2;

后验概率为:2/3;

每个特征都是独立的,不会相互影响,这种先验后验的关系其实是非常可以模拟一些独立特征的数据。

3:鸢尾花为例讲解

# 导入基本数学库
import numpy as np 
import pandas as pd
# 导入基本绘图库
import matplotlib.pyplot as plt 
import seaborn as sns 
# 忽略警告
import warnings
warnings.filterwarnings('ignore')
# 加载鸢尾花数据
from sklearn import datasets
# 导入高斯朴素贝叶斯分类器
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
# 导入鸢尾花数据集
data = datasets.load_iris()
X , y = datasets.load_iris(return_X_y=True)
# 把数据集划分为测试集以及训练集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 查看整个数据
iris_train_features = pd.DataFrame(data.data, columns=data.feature_names)
print(iris_train_features)
     sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
0                  5.1               3.5                1.4               0.2
1                  4.9               3.0                1.4               0.2
2                  4.7               3.2                1.3               0.2
3                  4.6               3.1                1.5               0.2
4                  5.0               3.6                1.4               0.2
..                 ...               ...                ...               ...
145                6.7               3.0                5.2               2.3
146                6.3               2.5                5.0               1.9
147                6.5               3.0                5.2               2.0
148                6.2               3.4                5.4               2.3
149                5.9               3.0                5.1               1.8

[150 rows x 4 columns]
# 我们假设每一个特征都是独立的,并且是符合高斯分布的,我们用平均数和方差来模拟
clf = GaussianNB(var_smoothing=1e-8)
clf.fit(X_train, y_train)
# 评估
y_pred = clf.predict(X_test)
acc = np.sum(y_test == y_pred) / X_test.shape[0]
print("Test Acc : %.3f" % acc)

# 预测
y_proba = clf.predict_proba(X_test[:1])
print(clf.predict(X_test[:1]))
print("预计的概率值:", y_proba)
Test Acc : 0.967
[2]
预计的概率值: [[1.63542393e-232 2.18880483e-006 9.99997811e-001]]

你可能感兴趣的:(机器学习,人工智能,python)