解くための必要条件、式の数=未知数の数、も満たしている。これを記号的に解く気にはなれない。コンピュータに頼るしかない。記号が入っていない、変数以外は実際の数値ならば、EXCElで簡単に解くことができるが、ここでは係数などが記号のままとかなければならないのである。数式を記号のまま処理して、連立方程式を解けるシステム、まず、頭に浮かんだのはMathematicaで、かつてライセンスを取っていた。ほとんど使わなかったが、今更、アップグレードやら何やらの手続きも面倒だ。トライアル期間を利用して解くという手もあるかと思ったが、そもそも使い方がよくわからない。そこで、Maximaというのが無料で、よく使われているということを知って、これをMacにインストールした(サイト)。式が少し間違っていると、答えを出さなかったり、とんでもなく長い答えを出してくるので、正確に式を入れなければならない。s12]]上半分に、solveというコマンドで解くための式を定式化している。答えが書き出されている。簡略化が、不完全なので、ぱっと見よくわからないが、整理すると次のようになる。2次元の場合の自然な拡張になっていることも直ちに読み取ることができる。(pp.256-268)がある(サイト)。そこに、私のものと同じように、2次の場合と3次の場合の式が書かれている。3次の場合の式の並びと、ここでの式の並びは対応していない。それを適切に対応させれば、両者が一致していることを確認できるだろう。必要になることは、この論文に教えてもらった。ここまでくると、一般的な多数のベルヌーイ変数がある場合の同時確率が予想できる。その一般形を書いた式は、私は見つけていない。いや、書き方が大変なことは予測できる。上記のTeugels氏は、クロネッカー積というものを使わざるを得なかったのだろうと思う。共分散を考慮したベルヌーイ分布を使って、一般的な(Naiveではない)ベイズ分類器を作る場合、必ずしも一般式は必要ではないというか、一般的な式のまま計算はできないと思う。どのように使うかは、次以降の記事で書きたい。Classifierこの間、アソシアトロンの本を読んだりプログラムを書いたりするうちに、概念形成の場合は、アソシアトロンよりもベイズ推計のほうがパフォーマンスが良くなる可能性に思い当たった。そこで、このさい、この概念形成のベイズ推計モデルを使って、ディープラーニングなどの人工知能の性能評価に使われているMNISTの手書き数字データをベイズモデルで推計してみた。MNISTデータは、中身を変えずに少し形式を変形して用いた。訓練用の60000個のデータで、事前確率を計算し、それをもとにテストデータ10000個で、テストした。パフォーマンスはぼろぼろだろうと思ったが、84.1%の正解率だった。Learningのプログラムで、MNISTのテストした時には、96%にとどまったが:笑)、それから比べると相当低いが、私は正直、こんなに高い数字が出たことで、ちょう驚いた。どこか、正解を計算に使ったような、とんでもない間違いをしているのではないかと思ったくらいだ。プログラムが、ディープラーニングよりも無茶苦茶簡単なものになる。プログラムは、以下に置いてある。https://github.com/toyowa/NaiveBayesClassifierMNISTのデータは大きすぎて載せていないが、読み込み関数を見れば、どのようなフォーマットか理解できると思う。MNISTデータをテキストファイルとして、わかりやすいフォーマットに変えている。プログラムの簡単さよりも遥かに大きな驚きは、60000個の学習から10000個のテストを終えるまでに、私の8コアのubuntu18.04で9秒33で終わってしまうのだ。プログラムはg++用のc++で書いている。テストは、4秒弱で終わる。データの読み込み時間がかかっているので、実際の計算はもっと短い。Classifier)というものだ。単純というのは、変数間の相関を考慮せず、独立であると想定していることである。独立でない場合については、のちに書く予定だ。理論的な枠組みを示す。単純ベイズ分類器といっても、理論はそんな単純ではない。手書き数字データは、0から9までの10個の数字のラベルがつけられている。MNISTでは1ピクセルを0から255の数値でその濃さを表しているが、ここでは正ならば1、負ならば0と変換しておく(多変量ベルヌーイ試行あるいはベルヌーイ分布にしている。これを多変量正規分布でも、試みたが色々不都合があった。機会があれば説明する)。