ホームページ  >  記事  >  ウェブフロントエンド  >  JS はベイズ分類器を実装します

JS はベイズ分類器を実装します

php中世界最好的语言
php中世界最好的语言オリジナル
2018-05-14 11:38:252097ブラウズ

今回は、ベイズ分類器を実装するための JS について説明します。JS でベイズ分類器を実装するための 注意事項 について説明します。

最初にコードを入力します


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

予測関数には単純ベイズアルゴリズムを使用する必要があります

まず第一に、ベイズの公式を見てみましょう:

JS はベイズ分類器を実装します

この公式を理解していないかもしれませんし、理解しているかもしれません式はあるけど仕組みがわからない

を使って簡単に翻訳してみましょう:

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

は実際には:

P(category|feature)=P(feature|category)*P(category)/p(feature)


したがって、次のことだけを計算する必要があります。 データは次のとおりです:

P (特徴 | カテゴリ)

P (カテゴリ)
p (特徴)

2 つのカテゴリ、つまりカテゴリ 1 とカテゴリ 2 があるとします。カテゴリの合計数は、2 つのカテゴリの出現数の合計です

さらに、入力した特徴に対して複数の仮説が存在する可能性があります。これは、たった 3 つの仮説と同じくらい単純です:

P((特徴 1、特徴 2。 、機能 3) | カテゴリ 1) = P (機能 1 | カテゴリ 1) * P (機能 2|カテゴリ 1)*P(機能 3|カテゴリ 1)

P(カテゴリ 1)= カテゴリの数 1/(合計数カテゴリの)

P(特徴 1、特徴 2、特徴 3)=P(特徴 1)* P(特徴 2)*P(特徴 3)


次の式に従ってわかっているからです:

P(カテゴリー 1) |特徴)=P(特徴|カテゴリー 1)*P(カテゴリー 1)/p(特徴)

P (カテゴリー 2|特徴)=P(特徴|カテゴリー 2)*P(カテゴリー 2)/p(特徴)



p(Feature) だけが分母なので、P(Category 1|Feature) と P(Category 2 |Feature) を比較する場合

P(Feature|Category 1)*P(Category 1) と P(Category 1) のサイズを比較するだけです。 P(機能|カテゴリ 2)*P(カテゴリ 2)


この記事のケースを読んだ後、あなたはそれをマスターしたと思います方法、よりエキサイティングな情報については、php 中国語 Web サイトの他の関連記事に注目してください。


関連書籍:

キャンバスを使用して便利な落書きボードを作成する方法


s-xlsx を使用してセルを結合する方法

以上がJS はベイズ分類器を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。