ShotaArima / demo-lowprofool

0 stars 0 forks source link

add debug bounds #3

Closed ShotaArima closed 1 month ago

ShotaArima commented 1 month ago

close #2

事象

https://github.com/ShotaArima/demo-lowprofool/blob/33cb6b62deecc5e0b85aae13cbb43c6bd087ce54/src/Playground.ipynb#L191-L268 について以下のようなエラーが発生した https://github.com/ShotaArima/demo-lowprofool/blob/33cb6b62deecc5e0b85aae13cbb43c6bd087ce54/src/Playground.ipynb#L507-L530

変更内容

このエラーは、normalize 関数内で bounds が期待される形式ではないことを示しています。具体的には、bounds が配列やリストではなく、おそらく辞書形式になっているようです。この問題を解決するには、以下の手順を踏む必要があります:

  1. get_bounds 関数の出力を確認する: 現在の get_bounds 関数は辞書を返していますが、normalize 関数は配列やリストを期待しているようです。
  2. get_bounds 関数を修正するか、または normalize 関数を修正する: どちらかの関数を変更して、データ形式を合わせる必要があります。
  3. bounds の形式を normalize 関数に適合させる: 現在の get_bounds 関数の出力を使用しつつ、normalize 関数で正しく扱えるようにデータを変換します。
# 1. boundsの形式を確認
print("Current bounds format:", bounds)

# 2. normalize関数を修正して辞書形式のboundsを扱えるようにする
def normalize(df, target, feature_names, bounds):
    # ... (既存のコード)

    # boundsが辞書形式の場合の処理
    if isinstance(bounds, dict):
        lower_bounds = []
        upper_bounds = []
        for feature in feature_names:
            if bounds[feature]['type'] == 'numeric':
                lower_bounds.append(bounds[feature]['min'])
                upper_bounds.append(bounds[feature]['max'])
            else:
                # カテゴリカル変数の場合は、適切な処理を追加
                # 例: 最小値と最大値を0と1にするなど
                lower_bounds.append(0)
                upper_bounds.append(1)

        lower_bounds = scaler.transform([lower_bounds])
        upper_bounds = scaler.transform([upper_bounds])
    else:
        # 既存の処理(配列やリストの場合)
        lower_bounds = scaler.transform([bounds[0]])
        upper_bounds = scaler.transform([bounds[1]])

    # ... (残りのコード)

# 3. 修正したnormalize関数を呼び出す
scaler, df, bounds = normalize(df, target, feature_names, bounds)