• 大小: 2KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: 其他
  • 标签: 贝叶斯  

资源简介

西瓜书上第七章朴素贝叶斯采用拉普拉斯修正,简单易懂,关键代码都有注释,适合初学者的理解

资源截图

代码片段和文件信息

import numpy as np


def load_data(filepath):
    ‘‘‘
    :arg filepath  filepath是数据的路径
    :fun 加载数据:1青绿蜷缩浊响清晰凹陷硬滑0.6970.46是
    :return 加载后的数据
    ‘‘‘

    file_object = open(filepath encoding=‘UTF-8‘)
    train_data = []
    file_object.readline()
    while 1:
        data = file_object.readline()
        if not data:
            break
        else:
            train_data.append(data)
    file_object.close()
    test = []
    for s in train_data:
        test.append(s.replace(‘\n‘ ‘‘).split(‘‘))  # 去掉\n和把数据按照’‘分割再存
    return test


def count_labels(data):
    ‘‘‘

    :param data:数据集
    :return: 返回好瓜和坏瓜的数目
    ‘‘‘
    yes = 0
    no = 0
    for s in range(data.__len__()):
        if data[s][-1] == ‘是‘:
            yes += 1
        else:
            no += 1
    return yes no


def handle_one_data(data attr location yes no attr_dis):
    ‘‘‘
    :param data: 数据集
    :param attr: 要传入的属性
    :param location: 传入属性的位置
    :param yes: 好瓜数量
    :param no: 坏瓜数量
    :param attr_dis: 各个属性的取值不同的个数
    :return: 返回该属性在好瓜或者是坏瓜的前提下的概率
    ‘‘‘
    attr_y attr_n = 0 0
    for s in range(data.__len__()):
        if data[s][-1] == ‘是‘:
            if data[s][location] == attr:
                attr_y += 1
        else:
            if data[s][location] == attr:
                attr_n += 1
    return (attr_y + 1) / (yes + attr_dis[location-1]) (attr_n + 1) / (no + attr_dis[location-1])


def handle_data(data):
    ‘‘‘

    :param data: 数据集
    :return: 对密度和含糖率的均值和标准差
    ‘‘‘
    midu_y = []
    tiandu_y = []
    midu_n = []
    tiandu_n = []
    for s in range(data.__len__()):
        if data[s][-1] == ‘是‘:
            midu_y.append(np.float(data[s][-3]))
            tiandu_y.append(np.float(data[s][-2]))
        else:
            midu_n.append(np.float(data[s][-3]))
            tiandu_n.append(np.float(data[s][-2]))
    m_midu_y = np.mean(midu_y)
    m_midu_n = np.mean(midu_n)
    t_tiandu_y = np.mean(tiandu_y)
    t_tiandu_n = np.mean(tiandu_n)
    std_midu_y = np.std(midu_y)
    std_midu_n = np.std(midu_n)
    std_tiandu_y = np.std(tiandu_y)
    std_tiandu_n = np.std(tiandu_n)

    return m_midu_y m_midu_n t_tiandu_y t_tiandu_n std_midu_y std_midu_n std_tiandu_y std_tiandu_n


def show_result(p_yes p_no):
    ‘‘‘

    :param p_yes: 在好瓜的前提下,测试数据各个属性的概率
    :param p_no: 在是坏瓜的前提下,测试数据的各个属性的概率
    :return: 是好瓜或者是坏瓜
    ‘‘‘
    p1 = 1.0
    p2 = 1.0
    for s in range(p_yes.__len__()):
        p1 *= np.float(p_yes[s])
        p2 *= np.float(p_no[s])
    if p1 > p2:
        print(“好瓜“ p1 p2)
    else:
        print(“坏瓜“ p1 p2)


def count_attr_dis(data):
    ‘‘‘

    :param data: 数据集
    :return: 各个属性取值的个数
    ‘‘‘
    count = []  # 记录各个属性的取值有多少个不同
    for i in range(data[0].__len__()):
        if i == 0 or i == 7 or i == 8:  # 去掉编号,密度,甜度这个属性
            continue
        d = []
        for s in range(data.__len__())

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        1114  2018-04-30 20:02  bayes.txt
     文件        5245  2018-05-01 17:09  Bayes_laplacian.py

评论

共有 条评论