python贝叶斯实践:嫁与不嫁的概率
程序员文章站
2022-04-22 11:39:25
python贝叶斯实践:嫁与不嫁的概率判断一个具有特征:{帅与否=不帅,性格好坏=不好,身高=矮,上进=不上进}情况下,嫁与不嫁的概率给定数据如下:公式:代码实现:import xlrdimport numpy as npdef getGL_Multi(data, baseIdx=None, baseVal=None, tzIdx=None, tzVal=None, lbd=1.0): if baseIdx is None: rows = data else...
python贝叶斯实践:嫁与不嫁的概率
判断一个具有特征:{帅与否=不帅,性格好坏=不好,身高=矮,上进=不上进}情况下,嫁与不嫁的概率
给定数据如下:
公式:
代码实现:
import xlrd
import numpy as np
def getGL_Multi(data, baseIdx=None, baseVal=None, tzIdx=None, tzVal=None, lbd=1.0):
if baseIdx is None:
rows = data
else:
rows = data[data[:, baseIdx] == baseVal]
rows = rows[:, tzIdx]
totnum = len(rows)
num = len(rows[rows == tzVal])
return (num + lbd) / (totnum + lbd)
# 读取xls文件获得数据
def readData(xlsfile):
book = xlrd.open_workbook(xlsfile) # 实例化对象
sheet1 = book.sheet_by_index(0) # 通过sheet索引获得sheet对象
ret = []
for i in range(13):
if i == 0:
pass
else:
ret.append(sheet1.row_values(i, 0, 12))
return np.array(ret)
# 子项求积
def plus_subs(ls):
ret = 1
for v in ls:
ret *= v
return ret
# 分解条件,转为特征数组
def getCond(condstr):
print("特征:", condstr)
cond = condstr.split(sep=",")
# print(cond)
cs = [c.split(sep="=")[1] for c in cond]
print("特征数组:", cs)
return cs
xlsfile = "z_4_2.xls" # 打开指定路径中的xls文件
data = readData(xlsfile)
# 子项概率数组,存放各子项概率
p_true = [] # 是嫁的子项概率
p_false = [] # 不嫁的子项概率
# 计算P(C)
pc_true = getGL_Multi(data, baseIdx=None, baseVal=None, tzIdx=-1, tzVal="嫁", lbd=0.)
pc_false = getGL_Multi(data, baseIdx=None, baseVal=None, tzIdx=-1, tzVal="不嫁", lbd=0.)
# 添加到子项概率数组中
p_true.append(pc_true)
p_false.append(pc_false)
condstr = "帅与否=不帅,性格好坏=不好,身高=矮,上进=不上进"
conds = getCond(condstr)
# 计算前4项(不帅 不好 矮 不上进)子项在 嫁/不嫁 时概率,并添加到对应数组中
for i, v in enumerate(conds[:4]):
gl_true = getGL_Multi(data, baseIdx=-1, baseVal="嫁", tzIdx=i + 1, tzVal=v)
p_true.append(gl_true)
gl_false = getGL_Multi(data, baseIdx=-1, baseVal="不嫁", tzIdx=i + 1, tzVal=v)
p_false.append(gl_false)
print("嫁的子项概率:", p_true)
print("不嫁的子项概率:", p_false)
gl_true = plus_subs(p_true)
gl_false = plus_subs(p_false)
# ******************输出格式***************************
print("*************************** 结果 ***************************")
print("嫁的概率:", gl_true)
print("不嫁的概率:", gl_false)
if (gl_true > gl_false):
print("有可能嫁!")
else:
print("有可能不嫁!")
("不嫁的概率:", gl_false)
if (gl_true > gl_false):
print("有可能嫁!")
else:
print("有可能不嫁!")
本文地址:https://blog.csdn.net/qq_44517651/article/details/109617271
上一篇: 微博营销方案详解,日引数千流量很简单