本次主要用朴素贝叶斯分类器实现鸢尾花数据集的分类:
1、导入必要的库:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, classification_report
import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
import numpy as np
导入sklearn的相关库,数据的处理与分析库pandas,数值计算库numpy等等。
2、定义朴素贝叶斯分类器:
fit 函数:
np.unique(y)
获取 y 中所有不同的类别,并将这些类别存储在 self.classes 中,这里的classes就是['Iris-setosa' 'Iris-versicolor' 'Iris-virginica']
- 通过 X[y == c] 选择属于类别 c 的所有样本,存储在 X_c 中
- 均值和方差是按特征计算的,即每个特征有一个均值和一个方差,但是prior只有一个。
- axis=0 也表示沿着行的方向,即对每一列进行操作
predict函数:
- iterrows() 是 pandas DataFrame 的一个方法,它按行迭代 DataFrame,返回每行的索引和行数据。
_predict函数:
- 用np.log(self.parameters[c][“prior”]) 得到先验概率的对数
- self.parameters[c][“mean”].values可以得到c类的4个特征的均值,如Iris-setosa的均值是[-1.03396583 0.89321545 -1.31141791 -1.25710072],方差类似。
- 调用_calculate_likelihood函数求似然,4个特征的似然都求出,然后相乘(因为这里满足独立同分布的假设,所以 P ( x 1 x 2 x 3 x 4 ∣ D ) = P ( x 1 ∣ D ) P ( x 2 ∣ D ) P ( x 3 ∣ D ) P ( x 4 ∣ D ) P(x_1x_2x_3x_4|D)=P(x_1|D)P(x_2|D)P(x_3|D)P(x_4|D) P(x1x2x