贝叶斯分类器
1.1贝叶斯分类器的应用
我们组主要从三个方面做贝叶斯分类器的应用领域大综述,分别是:贝叶斯分类算法在数据预测中的应用及综述、朴素贝叶斯分类器在智能导诊中的应用和贝叶斯分类在职业性格中的应用。
查找贝叶斯分类在职业性格中的应用部分的资料与文献,制作PPT,负责设计思想部分的讲解。
1.2 题目研究的工作基础或实验条件
(1)贝叶斯定理
(2)软件环境:python
1.3 设计思想
根据贝叶斯定理,通过一个人的特征,可以预测猜中他是某种职业的概率,也可以根据特征,猜中其某种性格的概率。
最后的结果和先验概率有关,比如以医生为例,若样本中其本身的占比较高,比如是10个人当中有7个是医生,医生的先验概率是70%,这样的话,从中选出不符合医生的特征,所求出的职业是医生的概率也很大。
主要利用贝叶斯的公示如下:
Pb代表符合该特征的某种性格(气质)的概率
PZ代表附和该特征的某种职业的概率
1.4 在python软件中实现
在python软件中,我们从以下三个方面探讨了贝叶斯在职业性格分析中的应用:
1.5主要程序代码
第一部分代码如下:
#根据性格猜测职业
#创建性格函数,定义字典
MBTI = ['INTP','INTJ','ENTP','ENTJ','ENFJ','INFJ','INFP','ENFP','ESFP','ISFP','ISTP','ESTP','ISFJ','ISTJ','ESFJ','ESTJ']
INTP = {'独立': 0.2, '抽象': 0.2, '对事不对人': 0.2,'随心所欲':0.3,'冷静':0.1} #思绪飞扬的学者
INTJ = {'冷静':0.3,'井井有条':0.3,'任务':0.2,'抽象':0.1,'独立':0.1} #独立自主的专家
ENTP = {'细节':0.3,'抽象':0.2,'精力充沛':0.2,'冷静':0.1,'随机应变':0.2} #大雄的机器猫
ENTJ = {'热情':0.2,'决定':0.2,'精力充沛':0.3,'冷静':0.2,'敏锐':0.1} #天生的领导者
ENFJ = {'沟通':0.3,'对人不对事':0.1,'敏锐':0.2,'同情心':0.2,'决定':0.2} #谆谆教诲的教育家
INFJ = {'沉默':0.2,'同情心':0.2,'创新':0.3,'井井有条':0.2,'抽象':0.1} #精神世界的引路人
INFP = {'安静':0.3,'抽象':0.1,'敏锐':0.1,'同情心':0.3,'随心所欲':0.2} #完美主义的知心人
ENFP = {'精力充沛':0.3,'创新':0.2,'随心所欲':0.2,'抽象':0.1,'对事不对人':0.2} #追梦人
ESFP = {'精力充沛':0.2,'和蔼':0.1,'同情心':0.2,'热情':0.3,'对人不对事':0.2} #不可或缺的大活宝
ISFP = {'沉默':0.3,'敏感':0.2,'细节':0.2,'同情心':0.2,'随心所欲':0.1} #静美的艺术家
ISTP = {'对事不对人':0.1,'细节':0.3,'经验':0.2,'理智':0.2,'独立':0.2} #谦逊的手艺人
ESTP = {'精力充沛':0.2,'随心所欲':0.3,'经验':0.2,'对事不对人':0.2,'细节':0.1} #活在当下的践行者
ISFJ = {'同情心':0.3,'决定':0.1,'敏感':0.2,'细节':0.2,'安静':0.2} #具奉献精神的保护者
ISTJ = {'安静':0.2,'理智':0.3,'敏感':0.2,'井井有条':0.2,'任务':0.1} #一丝不苟的检查者
ESFJ = {'沟通':0.1,'敏感':0.3,'热情':0.2,'和蔼':0.2,'同情心':0.2} #盛情难却的东道主
ESTJ = {'井井有条':0.3,'细节':0.2,'理智':0.2,'沟通':0.1,'决定':0.2} #天生的管理者
zhanbi = [0.02,0.01,0.02,0.03,0.03,0.03,0.04,0.08,0.09,0.06,0.06,0.06,0.13,0.13,0.12,0.09] #每一类MBTI气质特征在人群中的占比
zhiye = ['librarian','farmer','student','lawyer','doctor','sportsman']
librarian = {'井井有条':0.3,'细节':0.3,'安静':0.2,'敏锐':0.1} #图书馆管理员
farmer = {'经验':0.2,'精力充沛':0.3,'任务':0.3,'和蔼':0.2} #农民
student = {'安静':0.3,'精力充沛':0.3,'理智':0.2,'冷静':0.2} #学生
lawyer = {'理智':0.3,'细节':0.2,'经验':0.2,'冷静':0.2,'对事不对人':0.1} #律师
doctor = {'细节':0.3,'经验':0.2,'和蔼':0.3,'敏锐':0.2,'同情心':0.2} #医生
sportsman = {'精力充沛':0.2,'随心所欲':0.3,'任务':0.2,'热情':0.2} #运动员
yangben = [0.1,0.1,0.3,0.1,0.2,0.2] #每一类职业在样本中的占比
pe = 0 #该特征的占比
a = input('抽取的特征为:')
beh = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] #每一种气质类型具有该特征的概率列表,初始化
peh = [0,0,0,0,0,0] #每一种职业具有该特征的概率列表,初始化
pg = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] #贝叶斯计算后该特征的每一种MBTI气质的概率
pk = [0,0,0,0,0,0] #贝叶斯计算后该特征的每一种职业的概率
if a in INTP: #如果a特征在INTP气质类型里
beh[0] = INTP[a] #INTP气质类型中a特征的概率放入列表里
#print('INTP型中该特征的概率:',beh[0])
pg[0] = (zhanbi[0]*beh[0]) #P(INTP)*P(该特征|INTP),即贝叶斯公式的分子
if a in INTJ:
beh[1] = INTJ[a]
#print('INTJ型中该特征的概率:', beh[1])
pg[1] = (zhanbi[1]*beh[1])
if a in ENTP:
beh[2] = ENTP[a]
#print('ENTP型中该特征的概率:',beh[2])
pg[2] = (zhanbi[2]*beh[2])
if a in ENTJ:
beh[3] = ENTJ[a]
#print('ENTJ型中该特征的概率:', beh[3])
pg[3] = (zhanbi[3]*beh[3])
if a in ENFJ:
beh[4] = ENFJ[a]
#print('ENFJ型中该特征的概率:', beh[4])
pg[4] = (zhanbi[4]*beh[4])
if a in INFJ:
beh[5] = INFJ[a]
#print('INFJ型中该特征的概率:', beh[5])
pg[5] = (zhanbi[5]*beh[5])
if a in INFP:
beh[6] = INFP[a]
#print('INFP型中该特征的概率:', beh[6])
pg[6] = (zhanbi[6]*beh[6])
if a in ENFP:
beh[7] = ENFP[a]
#print('ENFP型中该特征的概率:',beh[7])
pg[7] = (zhanbi[7]*beh[7])
if a in ESFP:
beh[8] = ESFP[a]
#print('ESFP型中该特征的概率:',beh[8])
pg[8] = (zhanbi[8]*beh[8])
if a in ISFP:
beh[9] = ISFP[a]
#print('ISFP型中该特征的概率:',beh[9])
pg[9] = (zhanbi[9]*beh[9])
if a in ISTP:
beh[10] = ISTP[a]
#print('ISTP型中该特征的概率:',beh[10])
pg[10] = (zhanbi[10]*beh[10])
if a in ESTP:
beh[11] = ESTP[a]
#print('ESTP型中该特征的概率:',beh[11])
pg[11] = (zhanbi[11]*beh[11])
if a in ISFJ:
beh[12] = ISFJ[a]
#print('ISFJ型中该特征的概率:',beh[12])
pg[12] = (zhanbi[12]*beh[12])
if a in ISTJ:
beh[13] = ISTJ[a]
#print('ISTJ型中该特征的概率:',beh[13])
pg[13] = (zhanbi[13]*beh[13])
if a in ESFJ:
beh[14] = ESFJ[a]
#print('ESFJ型中该特征的概率:',beh[14])
pg[14] = (zhanbi[14]*beh[14])
if a in ESTJ:
beh[15] = ESTJ[a]
#print('ESTJ型中该特征的概率:',beh[15])
pg[15] = (zhanbi[15]*beh[15])
for i,j in zip(zhanbi,beh):
ps = float(i * j)
pe += ps #求和P(MBTI气质)P(该特征|气质)=P(气质)P(该特征|气质)+P(非气质)P(特征|非气质),即贝叶斯的分母
#print('pg',pg)
print('每种MBTI类型具有该特征的概率beh',beh)
print('该特征的概率pe',pe)
pgg = [x/pe for x in pg] #该特征下所有MBTI气质的概率
print('该特征下所有MBTI概率pgg',pgg)
pbmax = max(pgg) #求最大值
wei = pgg.index(pbmax) #最大值的位置
#print('wei',wei)
print('最大概率的MBTI气质为:',MBTI[wei])
print('该气质的概率pbmax',pbmax)
print('-----------------------------------------------------')
if a in librarian: #如果图书馆管理员有这个特征
peh[0] = librarian[a] #将图书馆管理员有这个特征的概率放入列表
#print('图书管理员具有该特征的概率:', peh[0])
pk[0] = (yangben[0]*peh[0]) #P(librarian)*P(该特征|librarian),即贝叶斯公式的分子
if a in farmer:
peh[1] = farmer[a]
#print('农民具有该特征的概率:',peh[1])
pk[1] = (yangben[1]*peh[1])
if a in student:
peh[2] = student[a]
#print('学生具有该特征的概率:',peh[2])
pk[2] = (yangben[2]*peh[2])
if a in lawyer:
peh[3] = lawyer[a]
#print('律师具有该特征的概率:',peh[3])
pk[3] = (yangben[3]*peh[3])
if a in doctor:
peh[4] = doctor[a]
#print('医生具有该特征的概率:',peh[4])
pk[4] = (yangben[4]*peh[4])
if a in sportsman:
peh[5] = sportsman[a]
#print('运动员具有该特征的概率:',peh[5])
pk[5] = (yangben[5]*peh[5])
print('每种职业具有该特征的概率peh',peh)
pze = 0
for i,j in zip(yangben,peh):
ps = float(i * j)
pze += ps #求和P(职业)P(该特征|职业)=P(职业)P(该特征|职业)+P(非职业)P(特征|非职业),即贝叶斯的分母
#print('pk',pk)
print('该特征的概率pze',pze)
pkk = [x/pze for x in pk] #该特征下所有职业的概率
print('该特征下所有职业概率pkk',pkk)
pzmax = max(pkk) #求最大值
ge = pkk.index(pzmax) #最大值的位置
#print('ge',ge)
print('最大概率的职业类型为:',zhiye[ge])
print('该职业的概率pzmax',pzmax)
print('-----------------------------------------------------')
输入抽取的特征为“精力充沛”,结果如下:
输入抽取的特征为“敏锐”,结果如下: