Menu
CoddyTech

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)。

以下の属性を持つ新しいデータポイントを考えてみましょう:
 

temperaturemoodmotivationwindy
lowhappyhighyes

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 と分類します。

challenge icon

チャレンジ

中級

このチャレンジでは、前のレッスンで行ったのと同様に、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オンラインコンパイラ