题目要求如下:
和上次作业一样,这里我们令S=1,M=2,L=3,对该题进行求解:
首先还是产生数据,如下所示:
1 | import numpy as np |
然后统计一个属性的类别个数以及种类数,如下所示:
1 | def all_np(arr): |
然后就是统计一个属性里各个类别和标签之间各自对应的个数,注意这里的np.logical_and检查两个数组里都为真的部分,为关键判别部分:
1 | def cal_xy(x,y): |
然后就是朴素贝叶斯的计算,这里将所有属性和类别的概率(先验和条件概率)都计算出来,然后计算它们所对应的似然概率,并且保存返回,作为后面判别的依据:
1 | def NaiveBaiyes(alpha): |
最后是对输入的数据进行判别,判别类别似然概率较大的那一组就被认定为所要判定成的类别:
1 | def check(x,y,alpha): |
最后进行判别,输入数据(1,M)对应(1,2),当alpha为0时,结果如下:
1 | check(1,2,alpha=0) |
The label is -1
prediction of -1 is 0.1091,prediction 1 is 0.0606
当alpha结果为1时,结果如下:
1 | check(1,2,alpha=1) |
The label is -1
prediction of -1 is 0.0865,prediction 1 is 0.0598
1 | 可以看出最后判别的结果均为-1。 |