Maison > Article > interface Web > JS implémente le classificateur bayésien
Cette fois, je vais vous présenter l'implémentation du classificateur bayésien en JS. Quelles sont les précautions pour l'implémentation du classificateur bayésien en JS. Ce qui suit est un cas pratique, jetons un coup d'œil.
Mettez d'abord le code
function NB(data) { this.fc = {}; //记录特征的数量 feature conut 例如 {a:{yes:5,no:2},b:{yes:1,no:6}} this.cc = {}; //记录分类的数量 category conut 例如 {yes:6,no:8} } NB.prototype = { infc(w, cls) { //插入新特征值 if (!this.fc[w]) this.fc[w] = {}; if (!this.fc[w][cls]) this.fc[w][cls] = 0; this.fc[w][cls] += 1; }, incc(cls) { //插入新分类 if (!this.cc[cls]) this.cc[cls] = 0; this.cc[cls] += 1; }, allco() { //计算分类总数 all count var t = 0; for (var k in this.cc) t += this.cc[k]; return t; }, fprob(w, ct) { //特征标识概率 if (Object.keys(this.fc).indexOf(w) >= 0) { if (Object.keys(this.fc[w]).indexOf(ct) < 0) { this.fc[w][ct] = 0 } var c = parseFloat(this.fc[w][ct]); return c / this.cc[ct]; } else { return 0.0; } }, cprob(c) { //分类概率 return parseFloat(this.cc[c] / this.allco()); }, train(data, cls) { //参数:学习的Array,标识类型(Yes|No) for (var w of data) this.infc(String(w), cls); this.incc(cls); }, test(data) { var ccp = {}; //P(类别) var fccp = {}; //P(特征|类别) for (var k in this.cc) ccp[k] = this.cprob(k); for (var i of data) { i = String(i); if (!i) continue; if (Object.keys(this.fc).indexOf(i)) { for (var k in ccp) { if (!fccp[k]) fccp[k] = 1; fccp[k] *= this.fprob(i, k); //P(特征1|类别1)*P(特征2|类别1)*P(特征3|类别1)... } } } var tmpk = ""; for (var k in ccp) { ccp[k] = ccp[k] * fccp[k]; if (!tmpk) tmpk = k; if (ccp[k] > ccp[tmpk]) tmpk = k; } return tmpk; } };
La fonction de prédiction nécessite l'utilisation de l'algorithme Naive Bayes
Tout d'abord, regardons la formule bayésienne :
Peut-être que vous ne comprenez pas la formule ou que vous ne comprenez pas la formule mais que vous ne savez pas comment l'utiliser
Alors laissez-moi la traduire brièvement :
P( Category |Feature) = P ( Feature | Category ) * P( Category)/ P(Feature)
En fait, c'est tout :
P(category|feature)=P(feature|category)*P(category)/p(feature)
Donc nous il suffit de calculer les données suivantes :
P(feature|category)
P(category)
p(feature)
Supposons deux catégories, à savoir la catégorie 1 et catégorie 2
alors Le nombre total de catégories est la somme du nombre d'occurrences des deux catégories
plus la possibilité que les caractéristiques que nous saisissons aient plusieurs hypothèses, seulement 3, c'est simple :
P((Fonctionnalité 1, Fonctionnalité 2, Fonctionnalité 3) |Catégorie 1)= P(Fonctionnalité 1|Catégorie 1)*P(Fonctionnalité 2|Catégorie 1)*P(Fonctionnalité 3|Catégorie 1)
P( Catégorie 1)=Nombre de catégorie 1/(Nombre total de catégories)
P (fonctionnalité 1, fonctionnalité 2, fonctionnalité 3) = P (fonctionnalité 1) * P (fonctionnalité 2) * P (fonctionnalité 3)
Parce que selon la formule que nous connaissons :
P(Catégorie 1|Fonctionnalité)=P(Fonctionnalité|Catégorie 1)*P(Catégorie 1)/p(Fonctionnalité)
P (Catégorie 2|Fonction)=P(Fonction|Catégorie 2)*P(Catégorie 2)/p(feature)
Il arrive que p(feature) soit le dénominateur, donc si vous comparez le probabilité de P (catégorie 1 | fonctionnalité) et P (catégorie 2 | fonctionnalité)
il suffit de comparer P (la taille de la fonctionnalité | Catégorie 1) * P (catégorie 1) et P (fonctionnalité | Catégorie 2) * P (catégorie 2) suffira
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article, venez pour des informations plus intéressantes. Faites attention aux autres articles connexes sur le site Web chinois de php !
Lecture connexe :
Comment utiliser la toile pour créer une planche à dessin de graffiti utile
Comment utiliser s- Fusionner les cellules en xlsx
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!