package NaviveBayesClassify;.net
/**事件
* <b>類</b>條件機率計算get
*it
* <h3>類條件機率</h3>io
* P(x<sub>j</sub>|c<sub>j</sub>)=( N(X=x<sub>i</sub>, C=c<sub>jclass
* </sub>)+1 ) <b>/</b> ( N(C=c<sub>j</sub>)+M+V ) <br>float
* 其中,N(X=x<sub>i</sub>, C=c<sub>j</sub>)表示類別c<sub>j</sub>中包含屬性x<sub>static
* i</sub>的訓練文本數量;N(C=c<sub>j</sub>)表示類別c<sub>j</sub>中的訓練文本數量;M值用於避免di
* N(X=x<sub>i</sub>, C=c<sub>j</sub>)太小所引起的問題;V表示類別的總數。vi
*
* <h3>條件機率</h3>
* <b>定義</b> 設A, B是兩個事件,且P(A)>0 稱<br>
* <tt>P(B∣A)=P(AB)/P(A)</tt><br>
* 爲在條件A下發生的條件事件B發生的條件機率。
*/
public class ClassConditionalProbability
{
private static TrainingDataManager tdm = new TrainingDataManager();
private static final float M = 0F;
/**
* 計算類條件機率
* @param x 給定的文本屬性
* @param c 給定的分類
* @return 給定條件下的類條件機率
*/
public static float calculatePxc(String x, String c)
{
float ret = 0F;
float Nxc = tdm.getCountContainKeyOfClassification(c, x);
float Nc = tdm.getTrainingFileCountOfClassification(c);
float V = tdm.getTraningClassifications().length;
ret = (Nxc + 1) / (Nc + M + V); //爲了不出現0這樣極端狀況,進行加權處理
return ret;
}
}