Maison  >  Article  >  interface Web  >  JS implémente le classificateur bayésien

JS implémente le classificateur bayésien

php中世界最好的语言
php中世界最好的语言original
2018-05-14 11:38:252102parcourir

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 :

JS implémente le classificateur bayésien

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn