【机器学习实战】朴素贝叶斯(连续型/离散型)

朴素贝叶斯

一、连续型

当特征中数据是连续型时,通常有两种方法来估计条件概率。
第一种方法是把每一个连续的数据离散化,然后用相应的离散区间替换连续数值。这种方法对于划分离散区间的粒度要求较高,不能太细,也不能太粗。
第二种方法是假设连续数据服从某个概率分布,使用训练数据估计分布参数,通常我们用高斯分布来表示连续数据的类条件概率分布。
此处我们使用第二种方法:

1.计算高斯概率密度CalcuGaussProb(x,mean,stdev)

公式为:
12πσ2e(12σ2(xμ)2) 1 2 π σ 2 e ( − 1 2 σ 2 ( x − μ ) 2 )
μ为均值, σ2 σ 2 为方差,σ为标准差
给定来自训练数据中已知特征的均值和标准差后,可以使用高斯函数来评估一个给定的特征值的概率。即用高斯概率密度函数来表示条件概率 P(x(j)|ck) P ( x ( j ) | c k )

#计算高斯概率密度函数
def CalcuGaussProb(self,x,mean,stdev):
    exponent = np.exp(-(np.power(x-mean,2))/(2*np.power(stdev,2)))
    GaussProb = (1/(np.sqrt(2*np.pi)*stdev))*exponent
    return GaussProb

2.获取各类别中各特征的均值、方差和标签集getMeanStdLabel(self,train_data)

获取类标签,并获取每个类中各个特征的均值和方差

#获取训练集每一类中每个特征的均值和方差以及类标签的取值集合
def getMeanStdLabel(self,train_data):
    label_counts=train_data.label.value_counts()
    label_arr=np.array(label_counts.index)
    label_arr.sort()
    #得到除标签外特征数
    num_feature = len(train_data.columns.values) - 1
    #按类别划分数据
    names = locals()
    for i in range(len(label_arr)):
        names['c%s' % i] = train_data[train_data["label"]==label_arr[i]]
    #按类别对每个属性求均值和方差
    c_mean=[]
    c_std=[]
    for j in range(len(label_arr)):
        names['mc%s' % j] = []
        names['sc%s' % j] = []
        for k in range(num_feature):
            names['mc%s' % j].append(np.mean(names['c%s' % j][k]))
            names['sc%s' % j].append(np.std(names['c%s' % j][k],ddof=1))

    for x in range(len(label_arr)):
        c_mean.append(names['mc%s' % x])
        c_std.append(names['sc%s' % x])
        names['arr_c%s' % x] = np.array(names['c%s' % x])
    return c_mean,c_std,label_arr

3. 计算连续型数据所属类的概率CalcuClassProbCon(arr,cx_mean,cx_std)

n个样本的样本集为

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值