Heim  >  Artikel  >  Web-Frontend  >  JS implementiert den Bayes'schen Klassifikator

JS implementiert den Bayes'schen Klassifikator

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

Dieses Mal werde ich Ihnen die Implementierung des Bayes'schen Klassifikators in JS vorstellen. Was sind die Vorsichtsmaßnahmen für die Implementierung des Bayes'schen Klassifikators in JS? Das Folgende ist ein praktischer Fall, schauen wir uns das an.

Geben Sie zuerst den Code ein

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;
    }
};

Die Vorhersagefunktion erfordert die Verwendung des Naive Bayes-Algorithmus

Schauen wir uns zunächst die Bayes'sche Formel an:

JS implementiert den Bayesschen Klassifikator

Vielleicht verstehst du die Formel nicht oder verstehst die Formel, weißt aber nicht, wie man sie benutzt
Dann lass es mich kurz übersetzen:

P( Category |Feature) = P ( Feature | Category ) * P( Category)/ P(Feature)

Eigentlich ist es so:

P(Kategorie|Merkmal)=P(Merkmal|Kategorie)*P(Kategorie)/p(Merkmal)

Also wir Es müssen nur die folgenden Daten berechnet werden:

P(Feature|Kategorie)
P(Kategorie)
p(Feature)

Nehmen Sie zwei Kategorien an, nämlich Kategorie 1 und Kategorie 2
dann ist die Gesamtzahl der Kategorien die Summe der Häufigkeit des Vorkommens der beiden Kategorien
plus der Möglichkeit, dass die von uns eingegebenen Merkmale mehrere Hypothesen haben, nur 3, es ist einfach:

P((Merkmal 1, Merkmal 2, Merkmal 3) |Kategorie 1)= P(Merkmal 1|Kategorie 1)*P(Merkmal 2|Kategorie 1)*P(Merkmal 3|Kategorie 1)
P( Kategorie 1)=Anzahl der Kategorie 1/(Gesamtzahl der Kategorien)
P (Merkmal 1, Merkmal 2, Merkmal 3) = P (Merkmal 1) * P (Merkmal 2) * P (Merkmal 3)

Denn nach der Formel wissen wir:

P(Kategorie 1|Merkmal)=P(Merkmal|Kategorie 1)*P(Kategorie 1)/p(Merkmal)
P (Kategorie 2|Merkmal)=P(Merkmal|Kategorie 2)*P(Kategorie 2)/p(Merkmal)

Es kommt vor, dass p(Merkmal) der Nenner ist, wenn man also vergleicht Wahrscheinlichkeit von P(Kategorie 1|Merkmal) und P(Kategorie 2|Merkmal)
Vergleichen Sie einfach P( Die Größe von Merkmal|Kategorie 1)*P(Kategorie 1) und P(Merkmal|Kategorie 2)*P(Kategorie 2) wird ausreichen

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Bitte kommen Sie für weitere spannende Informationen vorbei. Achten Sie auf andere verwandte Artikel auf der chinesischen PHP-Website!

Verwandte Lektüre:

Wie man aus Leinwand ein nützliches Graffiti-Zeichenbrett macht

Wie man es benutzt s- Zellen in xlsx zusammenführen

Das obige ist der detaillierte Inhalt vonJS implementiert den Bayes'schen Klassifikator. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn