【机器学习代码例】朴素贝叶斯python实现的简单例子

在这里插入图片描述

# coding=utf-8
from __future__ import division
from numpy import array

def set_data(price, time, sale):
    price_number = []
    time_number = []
    sale_number = []
    for i in price:
        if i == "低":
            price_number.append(0)
        elif i == "中":
            price_number.append(1)
        elif i == "高":
            price_number.append(2)
    for j in time:
        if j == "少":
            time_number.append(0)
        elif j == "中":
            time_number.append(1)
        elif j == "多":
            time_number.append(2)
    for k in sale:
        if k == "低":
            sale_number.append(0)
        elif k == "中":
            sale_number.append(1)
        elif k == "高":
            sale_number.append(2)
    return price_number, time_number, sale_number


def naive_bs(price_number, time_number, sale_number, expected_price, expected_time):
    price_p = []
    time_p = []
    sale_p = []
    m = array(zip(price_number, time_number, sale_number)).T
    for i in range(3):
        price_p.append(price.count(i) / len(price_number))  # 计算各项概率
        time_p.append(time.count(i) / len(time_number))
        sale_p.append(sale.count(i) / len(sale_number))

    advance_sale = []
    p_ex_price = price.count(expected_price) / len(price_number)
    p_ex_time = time.count(expected_time) / len(time_number)
    low_ex_sale = 0
    middle_ex_sale = 0
    high_ex_sale = 0

    for i in range(0, len(sale_number)):
        if sale_number[i] == 0:
            low_ex_sale = low_ex_sale + 1
        elif sale_number[i] == 1:
            middle_ex_sale = middle_ex_sale + 1
        elif sale_number[i] == 2:
            high_ex_sale = high_ex_sale + 1
    # 统计p(c)出现的概率
    # 计算不同情况
    aa = 0
    bb = 0
    cc = 0
    for i in range(0, len(price_number)):
        if expected_price == price_number[i] and sale_number[i] == 0:
            aa = aa + 1
        elif expected_price == price_number[i] and sale_number[i] == 1:
            bb = bb + 1
        elif expected_price == price_number[i] and sale_number[i] == 2:
            cc = cc + 1
    p_aa = aa / low_ex_sale
    p_bb = bb / middle_ex_sale
    p_cc = cc / high_ex_sale

    print("p(a|c):%s ,%s,%s" % (p_aa, p_bb, p_cc))
    aaa = 0
    bbb = 0
    ccc = 0
    for i in range(0, len(time_number)):
        if expected_time == time_number[i] and sale_number[i] == 0:
            aaa = aaa + 1
        elif expected_time == time_number[i] and sale_number[i] == 1:
            bbb = bbb + 1
        elif expected_time == time_number[i] and sale_number[i] == 2:
            ccc = ccc + 1
    p_aaa = aaa / low_ex_sale
    p_bbb = bbb / middle_ex_sale
    p_ccc = ccc / high_ex_sale
    print("p(b|c): %s,%s,%s" % (p_aaa, p_bbb, p_ccc))
    final_low_p = p_aa * p_aaa * low_ex_sale / len(sale_number) * 1000
    final_midd_p = p_bb * p_bbb * middle_ex_sale / len(sale_number) * 1000
    final_high_p = p_cc * p_ccc * high_ex_sale / len(sale_number) * 1000
    final_list = [final_low_p, final_midd_p, final_high_p]
    final_index = final_list.index(max(final_list))
    print
    final_list
    if final_index == 0:
        print("销量预测销量为低")
    elif final_index == 1:
        print("销量预测销量为中")
    else:
        print("销量预测销量为高")


if __name__ == "__main__":
    price = ["低", "高", "低", "低", "中", "高", "低"]
    time = ["多", "中", "少", "中", "中", "多", "少"]
    sale = ["高", "高", "高", "低", "中", "高", "中"]

    expected_price = "高"  # 新课程价格高
    expected_time = "高"  # 新课程课时多
    if expected_price == "低":
        expected_price_id = 0
    elif expected_price == "中":
        expected_price_id = 1
    else:
        expected_price_id = 2
    if expected_time == "少":
        expected_time_id = 0
    elif expected_time == "中":
        expected_time_id = 1
    else:
        expected_time_id = 2
    price_number, time_number, sale_number = set_data(price, time, sale)
    print(price_number, time_number, sale_number)
    naive_bs(price_number, time_number, sale_number, expected_price_id, expected_time_id)

在这里插入图片描述

  • 2
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Performer_Cherry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值