分類問題研究ノート-ナイーブベイズ

ナイーブベイズ

場合

過去に、最初に例を通してそれを体験して、それがどれほど単純であるかを見てみましょう。私が大学で確率論にあったとき、私の教師はこの例を使用しました:

宝くじには3枚のチケットがあり、ジャックポットを獲得できるのは1枚だけです。1枚引いてスクラッチしていません。シャオミンが1枚引きますが、スクラッチはありません。この時点で残っている最後のものを獲得する確率はどれくらいですか?彼はあなたと一緒に変わりたいですか?

直感的に言えば、勝つ確率は1/3で、最初に1つ引きます。どのように行っても、勝つ確率は1/3でなければなりません。現時点では、シャオミンは勝てなかったものを除外し、残りの2つは勝つために1つを持っている必要があるため、確率は1/2です。そうですか?

このとき、ベイジアンを拡張する必要があります。P(A | B)は、Bが発生したときにAが発生する確率を表します。
ここに画像の説明を挿入
Aはあなたの手にある写真が現在勝っていることを意味し、BはXiaomingが削り取った写真が勝っていないことを意味するとします。

P(B | A)は、Aが発生したときにBが発生する確率を表します。それを質問に代入します。つまり、手札の写真が勝っている場合、Xiaomingは勝てない確率を削り取ります。これは明らかに避けられないことです。イベント。、当選賞品は1つしかないので、どうすれば当選できますか?したがって、P(B | A)= 1

P(A)は、現在のハンドで賞を獲得する確率を表します。P(A)を計算するときに前提条件が与えられていないため、P(A)= 1/3、つまり3枚のチケットで、賞を獲得します。確率は1/3です。

P(B)は、写真から削り取られたシャオミンが勝てない確率を表します。削り取られたシャオミンが勝っていないという質問に前提条件が与えられているため、確率P(B)= 1です。

次に、数値を式に代入します。P(A | B)= [P(B | A)×P(A)] / P(B)=(1×1/3)/ 1 = 1/3、つまりシャオミンが1つをスクラッチして勝てなかったという前提で、あなたの手でこれを勝ち取る確率は1/3で、シャオミンの手に残っているものは2/3です。なに??ちょっと恥ずかしくないですか?

(これを理解するのは少し面倒ですが、本質的には、最初に宝くじに当選する確率は1/3です。それは、シャオミンが宝くじに当選しなかったピースを捨てるという意味ではありません。宝くじの当選は1/2になります。シャオミンではないので、最初に抽選で当選しなかったものを除外します。彼はあなたの選択を使用して残りに進み、次に当選しなかったものを捨てます。言い換えれば、シャオミンの排除は無意味な行為です。あなたが最初に抽選し、後でそれを除外し、残りの2つのうち少なくとも1つが賞を獲得しないことも知っているからです)

アルゴリズムの原理

長い間話しましょう。ベイズの単純さは大まかに理解できます。
機械学習アルゴリズムでは、この場合、通常、単純ベイズ分類器を使用します。これは、すべての可能性の確率を計算し、最終出力で可能性の高い方を出力するモデルです。

栗をあげる:ある非常に暑い夏の夜、キャンパスを歩いていて、指が見えないとき、このとき、人は彼に向かって歩き、性別を見るには遠すぎましたが、彼の特徴は「ショートパンツ+ショートヘア」であることがわかっています。 "。また、事前に学生のサンプル調査がいくつかあり、特定の特性に基づいてTaの性別を大まかに判断する必要があります。どのように分類する必要がありますか?
ここに画像の説明を挿入
この分析方法では、最初にP(男の子|ショートパンツ)とP(女の子|ショートパンツ)を計算し、2つのサイズを比較して、以前のデータに基づいて性別を決定します。つまり、男の子と女の子は以前のデータに基づいてショートパンツとショートヘアを着用する「ショートパンツとショートヘア」の人の性別を判断する基準として、の条件付き確率が使用されます。この例では、明らかにtaを男の子と判断します。コアアイデアはこれと同じくらい簡単です:
ここに画像の説明を挿入

連続値の扱い方

例では離散値が使用されているので、連続値を処理するにはどうすればよいですか?この特徴は正規分布に従うと仮定し、サンプルセットを通じて各カテゴリに対応する特徴の平均と分散を計算し、次に、たとえば密度関数に基づいて、新しいデータと平均の間の距離を計算します。確率値を取得します。

アルゴリズムの長所と短所

利点

  1. ロジックは明確でシンプルで、実装が簡単で、大規模なデータに適しています。アルゴリズムの原理に従って、サンプル内のすべての属性に関連する確率値を計算し、それらをさまざまなカテゴリに格納する限り、単純ベイズモデルを取得します。

  2. 計算のオーバーヘッドは小さいです。前回の記事によると、予測に必要なすべての確率が準備されていることがわかります。新しいデータが来たら、対応する確率値を取得し、簡単な計算を実行するだけで結果を得ることができます。

  3. ノイズポイントや無関係な属性に対してより堅牢です。ノイズポイントと無関係な属性はアルゴリズムにほとんど影響を与えず、この方法は依然として多くのメールサービスのスパムフィルタリングに使用されています。

  4. 予測プロセスは高速です。使用する必要のあるすべての属性関連の確率が計算されているため、新しいデータが到着して予測する必要がある場合は、計算のために対応する確率値の一部を取り出すだけで、結果と時間が得られます使用されるスペースは非常に小さいです。

不利益

「各属性は独立している」という仮定により、アルゴリズムはその欠点も明らかにします。実際のアプリケーションでは、属性が完全に独立していることはまれです。属性の相関が高いと、分類効果が低下します。したがって、特定のアプリケーションでは、特徴間の相互独立性を慎重に検討してから、アルゴリズムを使用するかどうかを決定する必要があります。たとえば、次元が多すぎると、次元が異なるため、次元が多すぎるデータは適切でない場合があります。互いに独立しているのではなく、共同の状況が存在する可能性が高いほど、モデルの効果は悪化します。

Python

from sklearn import datasets
from sklearn.naive_bayes import GaussianNB #高斯分布型的朴素贝叶斯
import numpy as np
np.random.seed(0)

iris=datasets.load_iris()
iris_x=iris.data
iris_y=iris.target
indices=np.random.permutation(len(iris_x))
iris_x_train=iris_x[indices[:-10]]
iris_y_train=iris_y[indices[:-10]]
iris_x_test=iris_x[indices[-10:]]
iris_y_test=iris_y[indices[-10:]]
clf = GaussianNB() #构造朴素贝叶斯分类器
clf.fit(iris_x_train,iris_y_train) #拟合
#result=clf.predict()
iris_y_predict=clf.predict(iris_x_test)
#调用该对象的打分方法,计算出准确率
score=clf.score(iris_x_test,iris_y_test,sample_weight=None)
print('iris_y_predict = ')
print(iris_y_predict)
print('iris_y_test = ')
print(iris_y_test)
print('Accuracy:',score)
"""
iris_y_predict = 
[1 2 1 0 0 0 2 1 2 0]
iris_y_test = 
[1 1 1 0 0 0 2 1 2 0]
Accuracy: 0.9
"""

参照:
https //cloud.tencent.com/developer/article/1631931

おすすめ

転載: blog.csdn.net/Pioo_/article/details/111554447
おすすめ