7

Naive Bayes を当てはめようとすると、次のようになります。

    training_data = sample; % 
    target_class = K8;
 # train model
 nb = NaiveBayes.fit(training_data, target_class);

 # prediction
 y = nb.predict(cluster3);

エラーが発生します:

??? Error using ==> NaiveBayes.fit>gaussianFit at 535
The within-class variance in each feature of TRAINING
must be positive. The within-class variance in feature
2 5 6 in class normal. are not positive.

Error in ==> NaiveBayes.fit at 498
            obj = gaussianFit(obj, training, gindex);

誰でもこれとそれを解決する方法に光を当てることができますか? ここで同様の投稿を読みましたが、どうすればよいかわかりません。行ではなく列に基づいて適合しようとしているように見えますが、クラスの分散は、特定のクラスに属する各行の確率に基づく必要があります。これらの列を削除すると機能しますが、明らかにこれは私がやりたいことではありません。

4

1 に答える 1

13

コード (または mathworks の NaiveBayes コード) のどこにもバグがないと仮定し、training_data が NxD の形式であり、N 個の観測と D 個の特徴があると仮定すると、列 2、5、および 6 は完全にゼロになります。少なくとも 1 つのクラスに対して。これは、トレーニング データが比較的小さく、クラス数が多く、1 つのクラスが少数の観測値で表される場合に発生する可能性があります。NaiveBayes はデフォルトですべての機能を正規分布の一部として扱うため、単一のクラスに関連するすべての機能の分散がゼロの列では機能しません。言い換えれば、NaiveBayes がその特定のクラスの特徴に正規分布を適合させることによって確率分布のパラメーターを見つける方法はありません (注: 分布のデフォルトは ですnormal)。

あなたの特徴の性質を見てみましょう。各クラス内で正規分布に従っていないと思われる場合は、normal使用するオプションではありません。おそらく、あなたのデータは多項モデルに近いでしょうmn:

nb = NaiveBayes.fit(training_data, target_class, 'Distribution', 'mn');
于 2012-11-17T05:46:51.323 に答える