1.朴素贝叶斯算法
算法讲解以及样本集实例计算过程,请阅读:https://blog.csdn.net/u012421852/article/details/80056947
下面直接给出朴素贝叶斯分类器的python代码实现。
2.朴素贝叶斯分类器的python实现
人肉完成,代码如下:
# -*- coding: utf-8 -*-
"""
Author:蔚蓝的天空Tom
Aim:实现朴素贝叶斯算法
朴素贝叶斯基于贝叶斯公式和每个特征之间是相互独立的
1.样本总数=N
2.标签值的概率, 标签值={'yes','nos'}
p(yes) = n_yes / N
p(no) = n_no / N
3.特征值的概率, 特征值=['nice','ugly','bad','good','S','H','M','low','high']
p('ugly') = n_ugly / N
p('nice') = n_nice / N
4.特征值的条件概率p(特征值|标签值)
p('ugly'|'yes') = n_yes_ugly / n_yes
p('nice'|'yes') = n_yes_nice / n_yes
p('ugly'|'no') = n_no_ugly / n_no
p('nice'|'no') = n_no_nice / n_no
最终的分类器:
p(标签值|特征值) = (p(特征值|标签值) * p(标签值)) / p(特征值)
综上所述,可知,核心是统计:
1.样本总数
N=样本总数
2.标签值的样本个数
n_yes=标签值yes的样本个数
n_no=标签值no的样本个数
3.特征值的样本个数
n_ugly=特征值ugly的样本个数
同理适用于['nice','ugly','bad','good','S','H','M','low','high']
4.条件特征值的样本个数
n_yes_ugly=标签值yes时有特征值ugly的样本个数
n_no_ugly=标签值no时有特征值ugly的样本个数
同理适用于['nice','ugly','bad','good','S','H','M','low','high']
"""
import numpy as np
class CNB(object):
def __init__(self, samples, features):
#训练样本集 + 特征集
self.samples = samples
self.features = features
#1.样本总数
self.N = np.shape(samples)[0]
#2.标签值的样本个数
self.labelSet = np.array([]) #标签值集合
self.labelStat = np.array([]) #标签值的样本个数统计
self.labelProb = np.array([]) #标签值的概率质量
#3.特征值的样本个数
self.featSet = np.array([]) #特征值集合
self.featStat = np.array([]) #特征值的样本个数统计
self.featProb = np.array([]) #特征值的概率质量
#4.条件特征值的样本个数
self.labelFeatStat = np.array([]) #条件特征值的样本个数统计
self.labelFeatProb = np.array([]