fitメソッド
Coddyの「機械学習入門」コースのレッスン 13/19。
ナイーブベイズの公式は以下の通りです:<strong>P(Class|Feature) = P(Feature|Class) * P(Class) / P(Feature)</strong>
前のレッスンで、すでに <strong>P(Feature|Class)</strong> と <strong>P(Class)</strong> を計算しました。
ここで、数学的な原則に基づき、P(Feature) を省略することで計算を簡略化できます。例えば、5 > 3 の場合、両辺を 10 で割っても(5/10 > 3/10 となり)、不等式は成立したままです。
したがって、簡略化された公式は次のようになります:P(Class|Feature) = P(Feature|Class) * P(Class)。
以下の属性を持つ新しいデータポイントを考えてみましょう:
| temperature | mood | motivation | windy |
| low | happy | high | yes |
play = yes となるすべてのインスタンスについて計算するには、次の公式を使用します:
P(temperature=<strong>low</strong>|play=Yes) * P(mood= <strong>happy</strong>|play=Yes) * P(motivation= <strong>high</strong>|play=Yes) * P(windy=<strong>yes</strong>|play=Yes) * p(play=yes)
これらのデータはすべて、すでに probability_features 変数と probability_target 変数に保存されています:
p_yes = probability_features["temperature"]["low"]["yes"] *
probability_features["mood"]["happy"]["yes"] *
probability_features["motivation"]["high"]["yes"] *
probability_features["windy"]["yes"]["yes"] *
probability_target["yes"]次に、play = no についても同じことを行う必要があります。
両方の確率が得られたら、それらを比較してどちらが大きいかを判断します。
p_yes が p_no より大きい場合、この新しいデータポイントを yes と分類します。そうでない場合は、no と分類します。
チャレンジ
中級このチャレンジでは、前のレッスンで行ったのと同様に、self.probability_features と self.probability_target に確率を保存するように fit メソッドを完成させてください。
y_train はターゲット変数であり、X_train は特徴量のデータセットです。
また、get_classes_probability メソッドも完成させてください。このメソッドは、新しいデータポイント(前の例で示したものと同様)を受け取り、ターゲット変数の各クラス(p_yes および p_no)の確率を返す必要があります。
出力は、以下の形式にする必要があります(ターゲット変数 y_train の値によって異なります)。
classes_probabilities = {
"yes": 0.00,
"no": 0.00,
}特徴量名や属性名は一定ではないことに注意してください。各データセットには異なる特徴量と異なる名前があります。
自分で試してみよう
class NaiveBayes:
class __init__(self):
pass
def get_classes_probability(self, X):
# Xは1行のデータフレームを保持します
# fitメソッドで保存されたself.classesを使用してください
# 以下にコードを記述してください
classes_probabilities = {}
# --------------------------
return classes_probabilities
def fit(self, X_train, y_train):
self.probability_features = {}
self.probability_target = {}
target_variable = "target"
df = X_train.copy()
df[target_variable] = y_train
# 前のレッスンからコードをコピーしてください
# probability_featuresとprobability_targetにself.を追加してください
def predict(self, X_test):
pass機械学習入門のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ