当前位置:文档之家› 朴素贝叶斯分类器设计方案v1.0

朴素贝叶斯分类器设计方案v1.0

朴素贝叶斯分类器设计方案
1.数据库基本表格设计
针对贝叶斯分类器所需数据结构设计以下4个表格
新闻类别表:
包括以下3个字段:ID(int),类别编号(int),类别名称(string)
ID
categorynum
category
1
19005
哲学
上表就记录了一条记录,哲学类的编号为19005。
一条记录代表一个新闻类别。不同记录,新闻类别应该保持不同。只有出现新的新闻类别的时候,这个表格才会增加一条记录。
4.增量学习
这里不讨论增加的样本包含新的标签,或者属于新的新闻类别。
当数据样本增加的时候,可以修正统计参数表中对应的参数,分以下几种情况:
1.新增样本中,类别是C1,同样这个样本中出现的标签编号在样本空间中同类别中也出现过。
首先修改,categorynum是C1的所有行的total++.
然后修改这个样本所属类别的出现的概率,P(C1)对应的number++,更新计算概率probability.
一条记录代表一个标签。不同记录,标签名应该保持不同。只有出现新的标签的时候,这个表格才会增加一条记录。
实际应用中,标签库的规模应该会在百万级别的范围之内。因此,ID可以直接采用数据库里自增长的int字段即可。标签编号根据设计的编号规则采用合适的数据字段,比如用纯数字编号,就可采用int存储。标签名采用string类别字段。
样本标签向量:
X = (10,30,57,98,104,25,1980,996,5668,87)
我们定义A = {10,30,57,98,104,25,1980,996,5668,87}。用~A表示所有标签减去A中的剩下的标签集合。
我们计算这个样本属于C1这个类别的概率P0。
P0=logP(C1) + +
统计指定类别中某个标签出现的概率:在样本数据表中,这个类别出现的次数Nc在上面已经统计出来了。只需要统计指定标签出现的次数,根据样本数据表的第3列和第4列统计出指定类别指定标签出现的次数Nc,i。最后概率就是(Nc,i+ 1)/(Nc+ 2)。
3.测试过程
针对每一个测试样本,利用贝叶斯定理计算出这个样本属于类别库里每一个类别的概率值,最后找到最大的那个,就是该样本所属的类别。
5.新增标签
标签新增加一个,那么在标签库表中增加一条记录。
增加含有这个标签的样本放到样本数据表里。
根据新增加的样本类别,按照增量学习中第2种情况计算。
6.新增类别
新闻类别增加一个,那么新闻类别表增加一条记录。
增加这类新闻的训练样本到样本数据表里。
统计参数表中:
1.由于类别增加,更新所有的类出现概率值。样本总数更新,类别总数更新。因此,其它类的出现概率要更新。
如果标签编号为-1.那么这行数据就代表样本空间中,这个类别出现的概率。number就是这个类别出现的次数,total就是总样本数量。
probability= (number + 1)/(total + N)。N代表样本空间中样本类别的种数。即新闻类别表的记录条数。
2.训练过程
标签编号表和类别编号表的存储略过。
1
19
19005
0.0103
30
3000
2
-1
19005
0.05996
3000
50000
如果标签编号不是负数。这条记录表示标签编号为19的这个标签,在类别编号为19005的这个类别中出现的概率为probability。number是标签在这个类别里出现的次数,total就是类别出现的次数。
probability= (number + 1)/(total + 2)(1,2是拉普拉斯修正数)
实际应用中,新闻类别总数数量级应该是很小的(100这个级别)。因此,ID可以直接采用数据库里自增长的int字段即可。类别编号和类别名称可以采用国家标准,采用对应的字段类型。
标签库表:
包括以下3个字段:ID(int),标签编号(int),标签名(string)
ID
labelnum
label
1
19
蜜蜂
蜜蜂这个标签的编号为19
其中P(C1)是类别C1在样本空间中的出现概率。这个值在统计参数表里一定存在的。
是在样本空间中类别C1中标签编号是a出现的概率。这些值在统计参数表如果存在就取出来直接用,如果这个值没有出现,说明样本中,C1类的样本标签编号是a的都没有出现,因此出现的概率就是1– (Nc+ 1)/(Nc+ 2)。
是在样本空间中类别C1中标签编号是a不出现的概率。这些值在统计参数表如果存在,存储的是出现的概率,1-取出来的值就就不出现的概率。如果这个值没有出现,说明样本中,C1类的样本标签编号是a的都没有出现,因此出概率就是(Nc+ 1)/(Nc+ 2)。
2.针对这个新出现的类别,统计样本中这类样本出现的所有标签的概率。以新纪录添加到统计数据表中。
在统计指定类别中,某个标签出现的次数时,就可以根据第三列和第四列统计出来对应的次数。
Hale Waihona Puke 统计参数表:包括以下6个字段:
ID(int),标签编号(int),类别编号(int),概率(float),个数(int),总个数(int)
ID
labelnum
categorynum
probability
number
total
19005
9
1
1230
19005
10
1
679
19005
如果一个样本提取10个关键词,那么表示这一个样本,就需要10条记录,例如上表。其中,样本号和类别编号一样,表示这个样本属于哪一种类,只是这10个关键词的标签编号不同。第一条记录的含义就是,在19005类别中,标签编号为2的标签出现了一次。
如果每一个文本都提取10个关键词,那么在样本库里统计每一个类别的个数时,就统计第四列出现了多少次这个类别编号,然后除以10,就是这个类别出现的次数。考虑到后面可能每一个文本提取的关键词个数发生改变了,那么上述方法就不行了。因此设计记录样本编号。这样统计某个类别出现的次数时,就可以再加上第二列排重即可。
样本数据表:
包括以下4个字段:ID(int),样本号(int),标签编号(int),类别编号(string)
ID
sampleId
labelnum
categorynum
1
1
2
19005
2
1
7
19005
3
1
19
19005
4
1
25
19005
5
1
30
19005
6
1
100
19005
7
1
350
19005
8
1
3790-
样本存储过程:
根据提取每个样本的10个标签,找到这10个标签对应的标签编号,以及这个样本所属类别的编号。把这10条数据存储到样本数据表中。注意,这10个数据的样本编号都一样。
训练过程:
贝叶斯分类器的训练过程,就是在样本中,统计各个种类出现的概率以及标签在类别中出现的概率。
统计类别出现的概率:首先统计出样本所有的类别个数Nk在样本数据表中,统计出样本个数N,找到对应类别以及样本编号不一样的个数,即是这个类别出现的次数Nc。最后概率就是(Nc+1)/(N+Nk).
最后更新这个样本中出现的标签编号对应记录中的number++,更新计算概率probability。
2.新增样本中,类别是C1,但是这个样本里出现了以前C1类中从未出现过的标签编号。
重复上一种情况的操作。
针对这个类里新出现的标签编号。新加一条记录。Number= 1.Total是这个类别出现的总次数。更新计算概率。
相关主题