机器学习实验七

该文是一个关于使用Python编程实现拉普拉斯平滑的朴素贝叶斯分类器的实验。实验目标是理解和应用朴素贝叶斯分类器,给出了一段已部分完成的代码,要求补充计算条件概率和预测代码,以对给定的训练数据进行分类预测。
摘要由CSDN通过智能技术生成

《机器学习与数据挖掘》实验七

实验题目:   实现拉普拉斯修正的朴素贝叶斯分类器                                             

实验目的:   掌握朴素贝叶斯分类器的原理及应用                                       

实验环境(硬件和软件)   Anaconda/Jupyter notebook/Pycharm                               

实验内容:

编码实现拉普拉斯修正的朴素贝叶斯分类器,基于给定的训练数据,对测试样本进行判别。

要求:

一、经给定部分代码,补充完整的代码,需要补充代码的地方已经用红色字体标注,包括:

1#补充计算条件概率的代码-1

2#补充计算条件概率的代码-2

3#补充预测代码;

二、将补充完整的代码提交,并提交实验结果;(也可以自己重写这部分的代码提交

import numpy as np

def loaddata():

    X = np.array([[1,'S'],[1,'M'],[1,'M'],[1,'S'],

         [1, 'S'], [2, 'S'], [2, 'M'], [2, 'M'],

         [2, 'L'], [2, 'L'], [3, 'L'], [3, 'M'],

         [3, 'M'], [3, 'L'], [3, 'L']])

    y = np.array([-1,-1,1,1,-1,-1,-1,1,1,1,1,1,1,1,-1])

return X, y

def Train(trainset,train_labels):

    m = trainset.shape[0]

    n = trainset.shape[1]

    prior_probability = {}# 先验概率 key是类别值,value是类别的概率值

    conditional_probability ={}# 条件概率 key的构造:类别,特征,特征值

    #类别的可能取值

    labels = set(train_labels)

    # 计算先验概率(此时没有除以总数据量m)

    for label in labels:

        prior_probability[label] = len(train_labels[train_labels == label])+1

    #计算条件概率

    for i in range(m):

        for j in range(n):

            # key的构造:类别,特征,特征值

            #补充计算条件概率的代码-1

key = str(train_labels[i]) + ',' + str(j) + ',' + str(trainset[i][j])

            if key in conditional_probability:

                conditional_probability[key] += 1

            else:

                conditional_probability[key] = 1

    print('conditional_probability = ', conditional_probability)

    conditional_probability_final = {}

    for key in conditional_probability:

        #补充计算条件概率的代码-2

        # 取出当前的类别

        label = key.split(',')[0]

        key1 = key.split(',')[1]

        Ni = len(set(trainset[:, int(key1)]))

        print(Ni)

        conditional_probability_final[key] = (conditional_probability[key] + 1) / (prior_probability[int(label)] + Ni)

    # 最终的先验概率(此时除以总数据量m)

    for label in labels:

        prior_probability[label] = prior_probability[label]/ (m+len(labels))

    return prior_probability,conditional_probability_final,labels

def predict(data):

    result={}

    for label in train_labels_set:

        temp=1.0

#补充预测代码;

        for j in range(len(data)):

            key = str(label) + ',' + str(j) + ',' + str(data[j])

            # 条件概率连乘

            temp = temp * conditional_probability[key]

        # 在乘上先验概率

        result[label] = temp * prior_probability[label]

    print('result=',result)

    #排序返回标签值

    return sorted(result.items(), key=lambda x: x[1],reverse=True)[0][0]

X,y = loaddata()

prior_probability,conditional_probability,train_labels_set = Train(X,y)

r_label = predict([2,'S'])

print(' r_label =', r_lab

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值