m_NumClasses 训练数据中类的个数
m_NumAttributes 属性的个数
m_Instances 训练数据
m_ClassDistribution 类的概率分布, 即P(C)。 其类型是Estimator, 估值器
m_Distributions[m_NumAttributes][m_NumClasses] 每个属性在每个类中的概率分布。 其类型也是Estimator。
1) 数值类型要用连续分布的Estimator, 如NormalEstimator
2) 名词性类型, 如(少年人、中年人、老年人), 需要离散化, 如DiscreteEstimator
然后增量式的训练。
针对每个样本, 修改m_Distributions[m_NumAttributes][m_NumClasses], 以及 m_ClassDistribution
识别时, 通过调用函数 distributionForInstance, 该函数返回正规化的一组值, 表示该待测样本在每个类中的概率
核心是 Estimator, 如NormalEstimator
对应到bogofilter的bayes,
类个数为2; 属性个数就是token的个数
Estimator就是简单的计数
训练时,
扫描待训练邮件的逐个token,增加其在对应类别中的计数===>m_Distributions;
增加对应类别的样本数====> m_ClassDistribution
分类时,
1)得到各个类的先验概率 P(C)
2)乘以该属性在该类中出现的概率 P(D|C), D为待测文档,D由一组token组成
P(C|D) = P(C) *P(D|C)/P(D); 其中P(D)不必求,都一样, 只需要求出P(C)*P(D|C)即可
其中, P(D|C) = P(t1|C)*,,,*P(tn|C)........条件独立。 只需要 P(ti|C) 与 P(tj|C) 独立即可。 因此是条件独立