質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Kaggle

Kaggleは、機械学習モデルを構築するコンペティションのプラットフォームおよびその運営企業を指します。企業や政府といった組織とデータサイエンティスト・機械学習エンジニアを繋げるプラットフォームであり、単純なマッチングではなくコンペティションが特徴です。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

73閲覧

Kaggle本のtarget encodingの違いが分かりません

hot_simulator

総合スコア0

Kaggle

Kaggleは、機械学習モデルを構築するコンペティションのプラットフォームおよびその運営企業を指します。企業や政府といった組織とデータサイエンティスト・機械学習エンジニアを繋げるプラットフォームであり、単純なマッチングではなくコンペティションが特徴です。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2024/11/17 04:00

実現したいこと

  • target encodingの活用方法の違いを理解する

発生している問題・分からないこと

"Kaggleで勝つデータ分析の技術" のp.143から紹介されている次の2つの違いが分かりません。

  1. target encodingの手法・実装
  2. target encodingの手法・実装 ークロスバリデーションを行う場合

2番のクロスバリデーションを行う場合においても一番外側の for文にて

Python

1tr_x.loc[:, c] = tmp

のあとに

Python

1train_x[c] = tr_x[c] 2train_x[c] = va_x[c]

として特徴量を元の変数に戻せば1番と同じになります。(外側のKFoldの最終Foldで処理した結果だけがtrain_xに反映されると認識しています。)

そのように考えたため、1と2の違いが分からずどのように活用すれば良いのか分かっていません。
分かる方がいらっしゃいましたら、ご教授いただけますと幸いです。よろしくお願いします。

該当のソースコード

Python

1# ----------------------------------- 2# target encoding (1番の例) 3# ----------------------------------- 4# データの読み込み 5train_x, test_x = load_data() 6# ----------------------------------- 7from sklearn.model_selection import KFold 8 9# 変数をループしてtarget encoding 10for c in cat_cols: 11 # 学習データ全体で各カテゴリにおけるtargetの平均を計算 12 data_tmp = pd.DataFrame({c: train_x[c], 'target': train_y}) 13 target_mean = data_tmp.groupby(c)['target'].mean() 14 # テストデータのカテゴリを置換 15 test_x[c] = test_x[c].map(target_mean) 16 17 # 学習データの変換後の値を格納する配列を準備 18 tmp = np.repeat(np.nan, train_x.shape[0]) 19 20 # 学習データを分割 21 kf = KFold(n_splits=4, shuffle=True, random_state=72) 22 for idx_1, idx_2 in kf.split(train_x): 23 # out-of-foldで各カテゴリにおける目的変数の平均を計算 24 target_mean = data_tmp.iloc[idx_1].groupby(c)['target'].mean() 25 # 変換後の値を一時配列に格納 26 tmp[idx_2] = train_x[c].iloc[idx_2].map(target_mean) 27 28 # 変換後のデータで元の変数を置換 29 train_x[c] = tmp 30 31# ----------------------------------- 32# target encoding - クロスバリデーションのfoldごとの場合 (2番の例) 33# ----------------------------------- 34# データの読み込み 35train_x, test_x = load_data() 36# ----------------------------------- 37from sklearn.model_selection import KFold 38 39# クロスバリデーションのfoldごとにtarget encodingをやり直す 40kf = KFold(n_splits=4, shuffle=True, random_state=71) 41for i, (tr_idx, va_idx) in enumerate(kf.split(train_x)): 42 43 # 学習データからバリデーションデータを分ける 44 tr_x, va_x = train_x.iloc[tr_idx].copy(), train_x.iloc[va_idx].copy() 45 tr_y, va_y = train_y.iloc[tr_idx], train_y.iloc[va_idx] 46 47 # 変数をループしてtarget encoding 48 for c in cat_cols: 49 # 学習データ全体で各カテゴリにおけるtargetの平均を計算 50 data_tmp = pd.DataFrame({c: tr_x[c], 'target': tr_y}) 51 target_mean = data_tmp.groupby(c)['target'].mean() 52 # バリデーションデータのカテゴリを置換 53 va_x.loc[:, c] = va_x[c].map(target_mean) 54 55 # 学習データの変換後の値を格納する配列を準備 56 tmp = np.repeat(np.nan, tr_x.shape[0]) 57 kf_encoding = KFold(n_splits=4, shuffle=True, random_state=72) 58 for idx_1, idx_2 in kf_encoding.split(tr_x): 59 # out-of-foldで各カテゴリにおける目的変数の平均を計算 60 target_mean = data_tmp.iloc[idx_1].groupby(c)['target'].mean() 61 # 変換後の値を一時配列に格納 62 tmp[idx_2] = tr_x[c].iloc[idx_2].map(target_mean) 63 64 tr_x.loc[:, c] = tmp 65 66 # 必要に応じてencodeされた特徴量を保存し、あとで読み込めるようにしておく

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

1番と2番の実装の違いについて調べましたが、分かりやすく説明されている記事等は見つけられませんでした。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問