私は駆け出しの新人ですが、学んだことをメモのように記録していきたいと思っていますし、同じく始めようとしている人の手助けになればと思っています。
目次
1. 数学的根拠
1. ベイズ決定理論
(1) 事前確率と事後確率
事前確率: 過去の経験と分析から得られる確率。
事後確率: 何かが起こり、その理由が特定の要因によって引き起こされる可能性の大きさ (つまり、観察されたサンプルに応じた補正後の確率値) であることが求められます。
(2) ベイズの定理
目的:「逆確率」問題を解くために、過去のデータに基づいて確率を予測したり、限られた情報の下で確率を予測したりすることができます。
P(B): 事前確率、つまり、イベント A を知らずにイベント B が発生する確率についての主観的な判断。
P(A|B)/P(A): 可能性関数、つまり調整係数、つまり、新しい情報 A によってもたらされる調整であり、事前確率と乗算して得られる確率は次のようになります。本当の確率。
たとえば、今、特徴があり、この特徴を持つオブジェクトがこのカテゴリである確率を知りたいとします。
2. 最尤推定
(1) 基本的な考え方
まず、データが特定の確率分布 (すべてのサンプルが独立しており、同一に分布している) を持っていると仮定しますが、そのパラメーターは不明です。次に、トレーニング サンプルに基づいて確率分布のパラメーターを推定し、最適なパラメーターを取得します。
(2) 式の導出
これは、トレーニング セット内の c 番目のクラスのサンプルで構成されるセットとして設定されます。サンプル分布を仮定した特定の確率分布のパラメーター ベクトルです。x は のサンプルであり、目標は次のとおりです。
上記の式が最大値を取得できるように、適切なパラメーターを見つけます(つまり、より多くのサンプルがそのような分布を満たすように適切なパラメーターを見つけます)。
ただし、上記の式はアンダーフロー (下限値の突破) を起こしやすいため、通常は対数尤度を導入します。
したがって、最終的な目的の式は次のようになります。
(3) 共通の仮定 - 正規分布
解決策は次のとおりです: (n は の合計数です)
;
2. 単純ベイズ分類器
単純ベイズ分類器は、すべての属性が互いに独立していることを前提としています。
1. シンボルの設定
サンプル属性のセットを(n は属性の数) とします。これは、i 番目の属性のサンプル x の値です。
サンプル カテゴリのセットは次のとおりです。
2. 事後確率の計算
「すべての属性は互いに独立している」は、次の式の 2 番目のステップです。
3. 最適な分布パラメータを見つけるための最尤法
P(x) はすべてのクラスで同じであるため、最大値を求める際にその影響を考慮する必要はありません。
したがって、ターゲットの定式化は次のようになります。
4. 共通の仮定 - 正規分布
あれは
5. ラプラス平滑化
他の属性が持つ情報がトレーニング セットに現れない属性によって消去されるのを避けるために、通常、確率を推定するときに平滑化が実行されます。
3. メリットとデメリット
1. 利点
(1) 簡単かつ高い学習効率
(2) 分類プロセスにおける時間と空間のオーバーヘッドが小さい
2. デメリット
変数間の独立性の仮定と仮定された分布の影響を受ける
4. コード例
from sklearn import metrics
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn import datasets
import pandas as pd
from sklearn.metrics import classification_report
data = datasets.load_iris()
iris_target = data.target
iris_features = pd.DataFrame(data=data.data, columns=data.feature_names)
train_x, test_x, train_y, test_y = train_test_split(iris_features, iris_target, test_size=0.3)
clf = GaussianNB()
clf.fit(train_x, train_y)
y_predict = clf.predict(test_x)
accuracy = metrics.accuracy_score(test_y, y_predict)
print(accuracy)
print(classification_report(test_y, y_predict))
出力
皆さんもコメント欄で批判や修正を歓迎します、ありがとう~