<?xml version="1.0" encoding="UTF-8" ?>
<rss version="0.91">
  <channel>
    <title>いけいけ機械学習</title>
    <description>統計、機械学習、AIを学んでいきたいと思います。 お役に立てば幸いです。</description>
    <link>https://learnms.blog.shinobi.jp/</link>
    <language>ja</language>
    <copyright>Copyright (C) NINJATOOLS ALL RIGHTS RESERVED.</copyright>

    <item>
      <title>【機械学習の知識】カテゴリ変数の主要エンコーディング手法の完全比較と使い分け</title>
      <description>&lt;p&gt;機械学習モデルや統計モデルは、文字データ（「赤・青・緑」や「東京・大阪」など）をそのまま計算することができません。そのため、カテゴリデータを数値に翻訳する「エンコーディング」が必須となります。今回は代表的な6つの手法の違いと、実務での選び方を徹底比較します。&lt;/p&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;1. 【 概要 】&lt;/h3&gt;
&lt;p&gt;カテゴリ変数のエンコーディングとは、質的なデータ（文字や属性）をコンピュータが計算できる量的なデータ（数値）に変換するプロセスです。&lt;/p&gt;
&lt;p&gt;手法によって「作られる列の数」や「数値が持つ意味」が大きく異なります。特に「都道府県名」や「商品ID」のように種類（カテゴリ）が大量にあるデータをどう扱うかによって、モデルの精度が大きく変わるため、適切な手法の選択が重要になります。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: #d32f2f;&quot;&gt;2. 【 基本手順（6つの代表的な手法） 】&lt;/h3&gt;
&lt;div style=&quot;background-color: #eeeeee; border: 2px solid #333; padding: 15px; font-size: 1.1em; line-height: 1.8; text-align: left;&quot;&gt;&lt;b&gt;(1) One-Hotエンコーディング&lt;/b&gt;：全カテゴリに専用の列を作り、該当箇所を1、他を0にする。&lt;br /&gt;
&lt;b&gt;(2) ダミーコーディング&lt;/b&gt;：K個のカテゴリに対し「K-1個」の列を作り、基準を1つ省略する。&lt;br /&gt;
&lt;b&gt;(3) エフェクトコーディング&lt;/b&gt;：基準を-1、他を0や1で表現し、全体平均からの偏差を表す。&lt;br /&gt;
&lt;b&gt;(4) 順序（Ordinal / Label）エンコーディング&lt;/b&gt;：カテゴリに「0, 1, 2...」と単純な整数を割り当てる。&lt;br /&gt;
&lt;b&gt;(5) ターゲットエンコーディング&lt;/b&gt;：カテゴリを「そのグループの目的変数の平均値」に置き換える。&lt;br /&gt;
&lt;b&gt;(6) 頻度（Frequency）エンコーディング&lt;/b&gt;：カテゴリを「出現回数（または割合）」に置き換える。&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;3. 整理：各エンコーディング手法の具体的な違い&lt;/h3&gt;
&lt;p&gt;6つの手法がそれぞれどのような構造を持ち、何が違うのかをステップごとに詳しく見ていきましょう。&lt;/p&gt;
&lt;p&gt;【 各手法の仕組みと特徴 】&lt;/p&gt;
&lt;div style=&quot;font-family: monospace; border: 1px solid #ccc; padding: 10px; line-height: 1.6;&quot;&gt;・&lt;b&gt;手法(1)：One-Hotエンコーディング&lt;/b&gt;&lt;br /&gt;
カテゴリが3つなら3つの列を作り、[1,0,0], [0,1,0], [0,0,1] で表現します。情報の欠落がありません。&lt;br /&gt;
&lt;br /&gt;
・&lt;b&gt;手法(2)：ダミーコーディング&lt;/b&gt;&lt;br /&gt;
3つのうち1つを基準として削り、残り2つの列だけを作ります（多重共線性の回避）。&lt;br /&gt;
&lt;br /&gt;
・&lt;b&gt;手法(3)：エフェクトコーディング&lt;/b&gt;&lt;br /&gt;
ダミーに似ていますが、基準を `-1` で表現します。全体平均に対する各グループの偏りを見たい統計モデル向けです。&lt;br /&gt;
&lt;br /&gt;
・&lt;b&gt;手法(4)：順序（Ordinal / Label）エンコーディング&lt;/b&gt;&lt;br /&gt;
「低=1、中=2、高=3」のように整数に変換します。メモリを圧迫しませんが、アルゴリズムが「3は1の3倍の価値がある」と誤解するリスクがあります。&lt;br /&gt;
&lt;br /&gt;
・&lt;b&gt;手法(5)：ターゲットエンコーディング（平均エンコーディング）&lt;/b&gt;&lt;br /&gt;
例えば「東京に住んでいる人の正解率（目的変数の平均）」のように、実績値で置き換えます。カテゴリ数が数千ある場合に非常に強力ですが、情報漏洩（リーク）に注意が必要です。&lt;br /&gt;
&lt;br /&gt;
・&lt;b&gt;手法(6)：頻度（Frequency）エンコーディング&lt;/b&gt;&lt;br /&gt;
データ全体の中で「そのカテゴリが何回出現したか」の頻度数に置き換えます。珍しいカテゴリか、よくあるカテゴリかを数値化できます。&lt;/div&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;4. 関連して押さえたい「どれを使えばいいの？（実務での選び方）」&lt;/h3&gt;
&lt;p&gt;「手法が多すぎてどれを使えばいいか迷う」という場合の明確な選び方の基準を整理します。&lt;/p&gt;
&lt;p&gt;・&lt;b&gt;カテゴリ数が少ない（10未満）＆決定木系モデルなら「One-Hot」&lt;/b&gt;&lt;br /&gt;
色や性別など、種類が少ないデータでLightGBMやランダムフォレストを使うならOne-Hotが最も安全です。&lt;br /&gt;
&lt;br /&gt;
・&lt;b&gt;カテゴリ数が膨大（数千〜数万）なら「ターゲットエンコーディング」や「頻度エンコーディング」&lt;/b&gt;&lt;br /&gt;
「郵便番号」や「商品ID」などをOne-Hotにすると列が爆発して破綻するため、ターゲットエンコーディングや頻度エンコーディングで1列に圧縮します。&lt;br /&gt;
&lt;br /&gt;
・&lt;b&gt;順序に意味があるデータなら「順序エンコーディング」&lt;/b&gt;&lt;br /&gt;
「満足度（低・中・高）」や「学歴（高卒・大卒・院卒）」など、大小関係に意味がある場合は整数に置き換える順序エンコーディングが最適です。&lt;br /&gt;
&lt;br /&gt;
・&lt;b&gt;本格的な統計・回帰分析なら「ダミーコーディング」&lt;/b&gt;&lt;br /&gt;
Pythonの `statsmodels` やRでp値を厳密に評価したい場合はダミーコーディングを選択します。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: orange;&quot;&gt;5. 補足：Pythonでの実装コード例&lt;/h3&gt;
&lt;p&gt;Pythonで代表的なエンコーディングを行う際の書き方イメージです。&lt;br /&gt;
可読性の高いライトグレーの背景でまとめています。&lt;/p&gt;
&lt;div style=&quot;font-family: monospace; border: 1px solid #ccc; padding: 10px; line-height: 1.6; background-color: #f5f5f5; color: #222222;&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;# 1. One-Hot（Pandas）&lt;/span&gt;&lt;br /&gt;
df_onehot = pd.get_dummies(df, columns=['fruit'])&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 2. 順序エンコーディング（Scikit-learn）&lt;/span&gt;&lt;br /&gt;
from sklearn.preprocessing import OrdinalEncoder&lt;br /&gt;
encoder = OrdinalEncoder()&lt;br /&gt;
df['size_encoded'] = encoder.fit_transform(df[['size']])&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 3. ターゲットエンコーディング（category_encodersライブラリ）&lt;/span&gt;&lt;br /&gt;
import category_encoders as ce&lt;br /&gt;
te = ce.TargetEncoder(cols=['city'])&lt;br /&gt;
df['city_te'] = te.fit_transform(df['city'], df['target'])&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;6. まとめ&lt;/h3&gt;
&lt;p&gt;カテゴリ変数のエンコーディングには、定番の「One-Hot」「ダミー」「エフェクト」に加え、カテゴリ数が多いときに無双する「ターゲット・頻度エンコーディング」、順序を保持する「順序エンコーディング」など多彩なアプローチがあります。&lt;br /&gt;
「データのカテゴリ数」と「使うモデルの種類」に合わせて最適な手法をチョイスし、機械学習モデルの予測性能を最大限に引き出せるようになりましょう！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;</description> 
      <link>https://learnms.blog.shinobi.jp/Entry/247/</link> 
    </item>
    <item>
      <title>【DS検定対策】データ不足を賢く補う！自然言語処理の「バックオフ（Backoff）」の仕組み</title>
      <description>&lt;p&gt;自然言語処理の確率モデル（N-gramなど）において、データの中に登場しないレアな単語の組み合わせに出会ったとき、確率がゼロになってしまい計算が破綻することがあります。これを防ぐために&lt;b&gt;「より短い文脈のデータへ段階的に切り替えて確率を推定する」手法が「バックオフ（Backoff）」&lt;/b&gt;です！&lt;/p&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;1. 【 問題 】&lt;/h3&gt;
&lt;p&gt;統計的自然言語処理において、高次のN-gram（例：3-gram）で十分な頻度データが得られないレアなケースに直面した際、より低次のN-gram（例：2-gramや1-gram）の確率や統計量に順次切り替えてモデルの予測を補う手法を何と呼ぶでしょうか？&lt;/p&gt;
&lt;p&gt;① バックオフ（Backoff / フォールバック）&lt;br /&gt;
② 特徴量ハッシング（Feature Hashing）&lt;br /&gt;
③ ドロップアウト（Dropout）&lt;br /&gt;
④ ワンホットエンコーディング（One-Hot Encoding）&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: #d32f2f;&quot;&gt;2. 【 解答 】&lt;/h3&gt;
&lt;div style=&quot;background-color: #eeeeee; border: 2px solid #333; padding: 15px; font-size: 1.2em; font-weight: bold; text-align: center;&quot;&gt;正解： ① バックオフ（Backoff / フォールバック）&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;3. 整理：なぜバックオフが必要なのか？（ゼロ確率の問題）&lt;/h3&gt;
&lt;p&gt;テキスト分析や言語モデルでは、データが不足しているときに大きな問題が起こります。&lt;/p&gt;
&lt;table border=&quot;1&quot; style=&quot;border-collapse: collapse; width: 100%; text-align: left; cellpadding: 8px;&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;background-color: #f2f2f2; text-align: center;&quot;&gt;&lt;th style=&quot;width: 25%;&quot;&gt;課題・状況&lt;/th&gt;&lt;th style=&quot;width: 75%;&quot;&gt;内容&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;データ不足とゼロ確率&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;例えば「人工知能が〇〇する」という3単語の組み合わせ（3-gram）がコーパス（学習データ）に存在しない場合、単純計算するとその確率が「0」になってしまい、文章全体の確率計算が破綻します。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;バックオフの仕組み&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;「3-gramのデータがなければ、少し引いて**2-gram**を見る。それもなければ**1-gram（単体）**の頻度を見る」というように、段階的に遡って（バックオフして）確率を推定します。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;4. 関連する重要概念：スムージング（平滑化）との違い&lt;/h3&gt;
&lt;div style=&quot;font-family: monospace; border: 1px solid #ccc; padding: 12px; line-height: 1.6; background-color: #fafafa;&quot;&gt;・&lt;b&gt;スムージング（Laplace / 加算平滑化など）：&lt;/b&gt;&lt;br /&gt;
すべての単語の出現回数に微小な値（例：+1）をあらかじめ足しておくことで、確率がゼロになるのを防ぐ一律の調整手法です。&lt;br /&gt;
&lt;br /&gt;
・&lt;b&gt;バックオフ（Backoff）：&lt;/b&gt;&lt;br /&gt;
データがある部分はそのまま高次のモデルを使い、データが不足・欠落している部分だけを低次のモデルに「切り替えて（フォールバックして）補う」選択的なアプローチです。&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: orange;&quot;&gt;5. DS検定形式：実戦4択クイズ&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;問：自然言語処理や統計的モデリングにおける「バックオフ（Backoff）」に関する記述として、最も適切なものはどれか。&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;① レアなカテゴリや出現回数の少ない単語を一律に「その他」という1つのカテゴリにまとめる前処理の専用用語である。&lt;br /&gt;
② 高次モデルで十分なデータが得られない場合に、より低次のモデルの統計量や確率へ段階的に切り替えて予測を補う手法である。&lt;br /&gt;
③ 勾配降下法において、学習の途中で誤差が大きくなった場合に学習率を強制的に引き上げる調整機構である。&lt;br /&gt;
④ 決定木の剪定（プルーニング）において、過学習を防ぐために深すぎる葉ノードを強制的に削除するアルゴリズムである。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;【 正解： ② 】&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;解説：&lt;/b&gt; バックオフの目的と仕組みを問う標準問題です。&lt;br /&gt;
②が正解です。データ不足のときに低次のモデルへ引き返して確率を補います。&lt;br /&gt;
①は「レアカテゴリのまとめ（プール）」の解説です。&lt;br /&gt;
③は学習率のバックオフではなく、最適化の調整パラメータに関する記述です。&lt;br /&gt;
④は決定木の「プルーニング（枝刈り）」の説明です。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;6. まとめ&lt;/h3&gt;
&lt;p&gt;DS検定や資格試験で「高次モデルでデータがない場合に低次モデルに切り替える」「ゼロ確率を防ぐためのバックオフ（フォールバック）」といったキーワードが出たら、正解は「バックオフ」です！ スムージング（平滑化）とともに、自然言語処理の基礎的な確率推定テクニックとして押さえておきましょう！&lt;/p&gt;</description> 
      <link>https://learnms.blog.shinobi.jp/Entry/246/</link> 
    </item>
    <item>
      <title>【TensorFlow】2次元のテンソル（行列）同士で四則演算と行列積を行う基本コード</title>
      <description>&lt;p&gt;前回のスカラー（単一の数値）の演算に続き、今回はAIや機械学習の計算で基本となる**「2次元のテンソル（行列）」**同士の演算方法を整理します。行列の足し算や、要素ごとの掛け算、そしてディープラーニングの内部で多用される「行列積（ドット積）」の具体的な書き方をコードと出力結果で確認していきましょう。&lt;/p&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;1. 【 概要 】&lt;/h3&gt;
&lt;p&gt;2次元のテンソルとは、行と列を持つ「行列（Matrix）」のデータ構造です。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tf.constant()&lt;/code&gt; に入れ子のリスト（リストのリスト）を渡すことで、2次元テンソルを簡単に作成できます。Python標準の数値計算と異なり、TensorFlowの関数や演算子は自動的に並列計算や効率的な行列処理を行ってくれます。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: #d32f2f;&quot;&gt;2. 【 基本手順（2つのステップ） 】&lt;/h3&gt;
&lt;div style=&quot;background-color: #eeeeee; border: 2px solid #333; padding: 15px; font-size: 1.1em; line-height: 1.8; text-align: left;&quot;&gt;&lt;b&gt;(1) 入れ子リストを用いた2次元テンソルの定義&lt;/b&gt;&lt;br /&gt;
&lt;code&gt;matrix_a = tf.constant([[1, 2], [3, 4]])&lt;/code&gt; のように、行と列を持つデータを定義する。&lt;br /&gt;
&lt;b&gt;(2) 要素ごとの演算（要素積）と、数学的な行列積の実行&lt;/b&gt;&lt;br /&gt;
通常の四則演算子による「要素ごとの計算」と、&lt;code&gt;tf.matmul()&lt;/code&gt; による「行列積」を使い分ける。&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;3. 整理：行列演算の「要素ごとの計算」と「行列積」の違い&lt;/h3&gt;
&lt;p&gt;行列を扱う際につまずきやすい「2つの計算方法の違い」を整理しておきましょう。&lt;/p&gt;
&lt;p&gt;【 演算の種類と特徴 】&lt;/p&gt;
&lt;div style=&quot;font-family: monospace; border: 1px solid #ccc; padding: 10px; line-height: 1.6;&quot;&gt;・&lt;b&gt;要素ごとの演算（+, -, *, /）&lt;/b&gt;&lt;br /&gt;
同じ位置にある要素同士（例：1行1列目同士）で計算を行います。例えば &lt;code&gt;A * B&lt;/code&gt; を行うと、それぞれの要素が掛け合わされます（アダマール積）。&lt;br /&gt;
&lt;br /&gt;
・&lt;b&gt;行列積（tf.matmul）&lt;/b&gt;&lt;br /&gt;
線形代数における通常の「行列のかけ算（行&amp;times;列の計算）」を行います。ディープラーニングの全結合層などで頻繁に使用される極めて重要な計算です。&lt;br /&gt;
&lt;br /&gt;
・&lt;b&gt;出力値（shape）の確認&lt;/b&gt;&lt;br /&gt;
2次元テンソルを出力すると &lt;code&gt;shape=(2, 2)&lt;/code&gt; のように表示され、何行何列のデータ構造であるかが一目でわかります。&lt;/div&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;4. 関連して押さえたい「2次元テンソル演算の主な関数」&lt;/h3&gt;
&lt;p&gt;TensorFlowで2次元テンソルを操作する際に役立つ代表的な関数です。&lt;/p&gt;
&lt;p&gt;・&lt;b&gt;要素ごとの掛け算&lt;/b&gt;：&lt;code&gt;tf.multiply(a, b)&lt;/code&gt; （演算子: &lt;code&gt;a * b&lt;/code&gt;）&lt;br /&gt;
・&lt;b&gt;数学的な行列積&lt;/b&gt;：&lt;code&gt;tf.matmul(a, b)&lt;/code&gt; （演算子: &lt;code&gt;a @ b&lt;/code&gt;）&lt;br /&gt;
・&lt;b&gt;形状の確認や変更&lt;/b&gt;：&lt;code&gt;tensor.shape&lt;/code&gt; や &lt;code&gt;tf.reshape()&lt;/code&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: orange;&quot;&gt;5. 補足：Pythonでの実装コード例&lt;/h3&gt;
&lt;p&gt;Google Colab等でそのまま実行できる2次元テンソル演算のサンプルコードと実際の実行結果です。&lt;/p&gt;
&lt;div style=&quot;font-family: monospace; border: 1px solid #ccc; padding: 10px; line-height: 1.6; background-color: #f5f5f5; color: #222222;&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;# コード実行例&lt;/span&gt;&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 1. 2つの2次元テンソル（2x2行列）を定義&lt;/span&gt;&lt;br /&gt;
matrix_a = tf.constant([[1, 2], &lt;br /&gt;
[3, 4]])&lt;br /&gt;
matrix_b = tf.constant([[5, 6], &lt;br /&gt;
[7, 8]])&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 2. 要素ごとの加算と掛け算&lt;/span&gt;&lt;br /&gt;
add_result = matrix_a + matrix_b &lt;span style=&quot;color: #666666;&quot;&gt;# 行列の足し算&lt;/span&gt;&lt;br /&gt;
element_mul = matrix_a * matrix_b &lt;span style=&quot;color: #666666;&quot;&gt;# 要素ごとの掛け算（アダマール積）&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 3. 本格的な行列積（ドット積）&lt;/span&gt;&lt;br /&gt;
matmul_result = tf.matmul(matrix_a, matrix_b) &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 4. 結果の表示&lt;/span&gt;&lt;br /&gt;
print(&quot;--- 行列の足し算 ---&quot;)&lt;br /&gt;
print(add_result.numpy())&lt;br /&gt;
print(&quot;\n--- 要素ごとの掛け算 ---&quot;)&lt;br /&gt;
print(element_mul.numpy())&lt;br /&gt;
print(&quot;\n--- 行列積（tf.matmul） ---&quot;)&lt;br /&gt;
print(matmul_result.numpy())&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 出力結果&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# --- 行列の足し算 ---&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# [[ 6 8]&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# [10 12]]&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# --- 要素ごとの掛け算 ---&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# [[ 5 12]&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# [21 32]]&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# --- 行列積（tf.matmul） ---&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# [[19 22]&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# [43 50]]&lt;/span&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;6. まとめ&lt;/h3&gt;
&lt;p&gt;TensorFlowにおける2次元テンソルは、&lt;code&gt;tf.constant()&lt;/code&gt; で直感的に定義でき、通常の足し算や要素ごとの計算だけでなく、AI開発に不可欠な「行列積（&lt;code&gt;tf.matmul&lt;/code&gt;）」を簡単に計算できます。データが何次元でどのように処理されているかを意識することで、AIモデルの構造もぐっと理解しやすくなります！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;</description> 
      <link>https://learnms.blog.shinobi.jp/Entry/245/</link> 
    </item>
    <item>
      <title>【DS検定対策】パラメータごとに学習率を自動調整！「AdaGrad」の仕組み</title>
      <description>&lt;p&gt;ディープラーニングの学習において、すべてのパラメータに同じ「学習率」を使い続けるのは効率が悪い場合があります。そこで、&lt;b&gt;過去の勾配の大きさに応じて「パラメータごとに個別の学習率を自動で更新・調整する」仕組みを持った最適化手法が「AdaGrad（アダグラッド）」&lt;/b&gt;です！&lt;/p&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;1. 【 問題 】&lt;/h3&gt;
&lt;p&gt;ニューラルネットワークの最適化アルゴリズムにおいて、これまでの学習で得られた勾配の二乗和を蓄積し、それを利用してパラメータごとに学習率を自動的に小さく調整しながら最適化を行う手法を何と呼ぶでしょうか？&lt;/p&gt;
&lt;p&gt;① AdaGrad（Adaptive Gradient Algorithm）&lt;br /&gt;
② モーメンタム（Momentum）&lt;br /&gt;
③ 確率的勾配降下法（SGD）&lt;br /&gt;
④ バッチ正規化（Batch Normalization）&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: #d32f2f;&quot;&gt;2. 【 解答 】&lt;/h3&gt;
&lt;div style=&quot;background-color: #eeeeee; border: 2px solid #333; padding: 15px; font-size: 1.2em; font-weight: bold; text-align: center;&quot;&gt;正解： ① AdaGrad（Adaptive Gradient Algorithm）&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;3. 整理：AdaGradの仕組みと画期的なポイント&lt;/h3&gt;
&lt;p&gt;通常のSGDでは固定だった「学習率」を、パラメータごとにどう変化させるのかを整理しましょう。&lt;/p&gt;
&lt;table border=&quot;1&quot; style=&quot;border-collapse: collapse; width: 100%; text-align: left; cellpadding: 8px;&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;background-color: #f2f2f2; text-align: center;&quot;&gt;&lt;th style=&quot;width: 25%;&quot;&gt;項目の特徴&lt;/th&gt;&lt;th style=&quot;width: 75%;&quot;&gt;内容と動作&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;勾配の二乗和の蓄積&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;これまでに発生した勾配（の二乗）をすべて足し算して記憶していきます。たくさん大きく動いたパラメータほど、蓄積値が大きくなります。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;学習率の自動調整&lt;br /&gt;
（適応的学習率）&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;分母に「勾配の二乗和の平方根」を置くことで、&lt;b&gt;大きく激しく動いたパラメータの学習率は自動的に小さく（ブレーキ）&lt;/b&gt;なり、&lt;b&gt;あまり動いていないパラメータの学習率は相対的に大きく（アクセル）&lt;/b&gt;なります。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;4. AdaGradのメリットと「致命的な弱点」&lt;/h3&gt;
&lt;div style=&quot;font-family: monospace; border: 1px solid #ccc; padding: 12px; line-height: 1.6; background-color: #fafafa;&quot;&gt;&lt;b&gt;【 メリット 】&lt;/b&gt;&lt;br /&gt;
・自分で学習率を手動で細かくチューニングしなくても、パラメータごとに最適なペースで効率よく学習が進みます。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;【 致命的な弱点（学習の停滞） 】&lt;/b&gt;&lt;br /&gt;
・過去の勾配の二乗和を&lt;b&gt;「ずっと無限に足し続け」&lt;/b&gt;ていくため、学習が進めば進むほど分母（過去の蓄積）がどんどん巨大になります。&lt;br /&gt;
・その結果、&lt;b&gt;学習率が実質的にゼロに近づき、途中で学習が完全に止まってしまう（動かなくなる）&lt;/b&gt;という弱点があります。（※この弱点を解決したのが RMSprop や Adam です！）&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: orange;&quot;&gt;5. DS検定形式：実戦4択クイズ&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;問：ディープラーニングの最適化アルゴリズムである「AdaGrad」に関する記述として、最も適切なものはどれか。&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;① 過去のすべての勾配の二乗和を分母に蓄積し、パラメータごとに個別の学習率を自動調整して最適化を行う手法である。&lt;br /&gt;
② 物理の慣性（運動量）の概念を取り入れ、前回のパラメータ更新の方向と勢いを次の更新に引き継ぐ手法である。&lt;br /&gt;
③ ミニバッチごとにデータの平均と分散を計算し、強制的にデータを標準化して勾配消失を防ぐ手法である。&lt;br /&gt;
④ ネットワークの過学習を防止するために、ランダムに一部のニューロンの結合を遮断しながら学習を進める手法である。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;【 正解： ① 】&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;解説：&lt;/b&gt; AdaGradの定義と特徴を問う標準問題です。&lt;br /&gt;
①が正解です。勾配の二乗和を蓄積し、パラメータごとの学習率を自動調整します。&lt;br /&gt;
②は「モーメンタム」の説明です。&lt;br /&gt;
③は「バッチ正規化」の説明です。&lt;br /&gt;
④は「ドロップアウト」の説明です。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;6. まとめ&lt;/h3&gt;
&lt;p&gt;DS検定や資格試験で「パラメータごとの学習率の自動調整」「過去の勾配の二乗和を蓄積」「学習が途中で止まってしまうリスク」といったキーワードが出たら、正解は「AdaGrad」です！ 先ほどのモーメンタム（慣性）とあわせて、最適化アルゴリズムの代表例としてしっかり押さえておきましょう！&lt;/p&gt;</description> 
      <link>https://learnms.blog.shinobi.jp/Entry/244/</link> 
    </item>
    <item>
      <title>【DS検定対策】慣性の力で最適化を加速！「モーメンタム（Momentum）」の仕組み</title>
      <description>&lt;p&gt;ディープラーニングの学習で使われる通常の確率的勾配降下法（SGD）は、パラメータが非効率なジグザグ運動をしてしまい学習が遅くなる弱点があります。これを解決するために&lt;b&gt;「物理の慣性（運動量）」の考え方を導入した最適化手法が「モーメンタム（Momentum）」&lt;/b&gt;です！&lt;/p&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;1. 【 問題 】&lt;/h3&gt;
&lt;p&gt;ニューラルネットワークの最適化アルゴリズムにおいて、通常の確率的勾配降下法（SGD）に「前回の更新の勢い（慣性）」を意味する項を加え、パラメータの振動を抑えて収束を高速化させる手法を何と呼ぶでしょうか？&lt;/p&gt;
&lt;p&gt;① モーメンタム（Momentum）&lt;br /&gt;
② ドロップアウト（Dropout）&lt;br /&gt;
③ バッチ正規化（Batch Normalization）&lt;br /&gt;
④ グリッドサーチ（Grid Search）&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: #d32f2f;&quot;&gt;2. 【 解答 】&lt;/h3&gt;
&lt;div style=&quot;background-color: #eeeeee; border: 2px solid #333; padding: 15px; font-size: 1.2em; font-weight: bold; text-align: center;&quot;&gt;正解： ① モーメンタム（Momentum）&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;3. 整理：なぜモーメンタムが必要なのか？（転がるボールの例え）&lt;/h3&gt;
&lt;p&gt;通常のSGDとモーメンタムの違いは、「坂道を転がり落ちるボール」に例えると非常にわかりやすくなります。&lt;/p&gt;
&lt;table border=&quot;1&quot; style=&quot;border-collapse: collapse; width: 100%; text-align: left; cellpadding: 8px;&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;background-color: #f2f2f2; text-align: center;&quot;&gt;&lt;th style=&quot;width: 25%;&quot;&gt;手法&lt;/th&gt;&lt;th style=&quot;width: 75%;&quot;&gt;動きの特徴・メリット / デメリット&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;通常のSGD&lt;br /&gt;
（確率的勾配降下法）&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;その瞬間の傾きだけで進むため、谷底に向かって&lt;b&gt;左右に激しくジグザグと蛇行（振動）&lt;/b&gt;してしまい、なかなか効率よく進めない。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;モーメンタム&lt;br /&gt;
（Momentum）&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;「前回の勢い（慣性）」&lt;/b&gt;を引き継ぐため、左右の無駄な揺れ（振動）が打ち消し合って相殺され、&lt;b&gt;谷底の方向へまっすぐ加速（高速化）&lt;/b&gt;できる。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;4. モーメンタムが持つ2つの強力なメリット&lt;/h3&gt;
&lt;div style=&quot;font-family: monospace; border: 1px solid #ccc; padding: 12px; line-height: 1.6; background-color: #fafafa;&quot;&gt;&lt;b&gt;① 振動の抑制と学習の高速化：&lt;/b&gt;&lt;br /&gt;
・ジグザグ動くエネルギーが相殺されるため、効率的かつスピーディーに最適値（最小値）へ到達できます。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;② 局所最適解（ローカルミニマム）の突破：&lt;/b&gt;&lt;br /&gt;
・学習途中で小さな窪み（行き止まり）にハマりそうになっても、これまでの「勢い（慣性）」があるため、&lt;b&gt;勢いでその窪みを飛び越えて進む&lt;/b&gt;ことができます。&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: orange;&quot;&gt;5. DS検定形式：実戦4択クイズ&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;問：ディープラーニングの最適化アルゴリズムである「モーメンタム（Momentum）」に関する記述として、最も適切なものはどれか。&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;① 学習率を一定に保つのではなく、エポックが進むにつれて学習率を強制的にゼロまで直線的に減衰させる手法である。&lt;br /&gt;
② 物理の慣性（運動量）の概念を導入し、前回のパラメータ更新の方向と大きさを一定の割合で今回の更新に反映させることで、振動を抑え最適化を高速化する手法である。&lt;br /&gt;
③ ネットワークの過学習を防ぐため、ランダムに一部のニューロンを無効化しながら学習を進める正則化手法である。&lt;br /&gt;
④ ミニバッチごとのデータの偏りをなくすために、各層の入力データの平均と分散を強制的に正規化する手法である。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;【 正解： ② 】&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;解説：&lt;/b&gt; モーメンタムの目的と仕組みを問う標準問題です。&lt;br /&gt;
②が正解です。慣性の力を取り入れて最適化をスムーズかつ高速にします。&lt;br /&gt;
①は学習率減衰（Learning Rate Decay）の説明です。&lt;br /&gt;
③は「ドロップアウト（Dropout）」の説明です。&lt;br /&gt;
④は「バッチ正規化（Batch Normalization）」の説明です。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;6. まとめ&lt;/h3&gt;
&lt;p&gt;DS検定や資格試験で「物理の慣性」「前回の更新の勢いを引き継ぐ」「ジグザグした振動を抑える」「最適化の高速化」といったキーワードが出たら、正解は「モーメンタム（Momentum）」です！ SGDの弱点である「非効率な蛇行」をカバーする必須の拡張手法として覚えておきましょう！&lt;/p&gt;</description> 
      <link>https://learnms.blog.shinobi.jp/Entry/243/</link> 
    </item>
    <item>
      <title>【DS検定対策】ビッグデータのメモリを救う！「特徴量ハッシング」の仕組み</title>
      <description>&lt;p&gt;テキストの単語数やカテゴリ変数の種類が数百万〜数千万個に膨れ上がると、コンピュータのメモリが足りなくなったり学習が極端に遅くなったりします。そんな高次元データを一瞬で圧縮・削減する巧妙な技術が&lt;b&gt;「特徴量ハッシング（Feature Hashing）」&lt;/b&gt;（別名：ハッシュ化トリック）です！&lt;/p&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;1. 【 問題 】&lt;/h3&gt;
&lt;p&gt;機械学習の前処理において、元の特徴量（単語やカテゴリ）をハッシュ関数に通してあらかじめ決まった固定長のインデックス（番号）に変換し、メモリ消費を抑えながら次元数を削減する手法を何と呼ぶでしょうか？&lt;/p&gt;
&lt;p&gt;① 特徴量ハッシング（Feature Hashing / ハッシュ化トリック）&lt;br /&gt;
② 主成分分析（PCA：Principal Component Analysis）&lt;br /&gt;
③ 埋め込み法（Embedded Method）&lt;br /&gt;
④ ラッパー法（Wrapper Method）&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: #d32f2f;&quot;&gt;2. 【 解答 】&lt;/h3&gt;
&lt;div style=&quot;background-color: #eeeeee; border: 2px solid #333; padding: 15px; font-size: 1.2em; font-weight: bold; text-align: center;&quot;&gt;正解： ① 特徴量ハッシング（Feature Hashing / ハッシュ化トリック）&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;3. 整理：特徴量ハッシングの仕組みとメリット&lt;/h3&gt;
&lt;p&gt;通常の One-Hot エンコーディングや辞書作成（全単語を記憶する方式）とは異なり、ハッシングには大きな特徴があります。&lt;/p&gt;
&lt;table border=&quot;1&quot; style=&quot;border-collapse: collapse; width: 100%; text-align: left; cellpadding: 8px;&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;background-color: #f2f2f2; text-align: center;&quot;&gt;&lt;th style=&quot;width: 25%;&quot;&gt;特徴・仕組み&lt;/th&gt;&lt;th style=&quot;width: 75%;&quot;&gt;内容&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;辞書が不要&lt;br /&gt;
（メモリ節約）&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;「どの単語がどの番号か」という全辞書をメモリに保持しておく必要がありません。ハッシュ関数に文字を通すだけで、その場で一意の番号（例：0〜1000のいずれか）に変換されます。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;固定長の次元削減&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;どれだけ新しい単語や未知のデータが増えても、出力先の次元数をあらかじめ「1000次元」や「10000次元」など固定サイズに抑えることができます。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;4. 注意点：ハッシュ衝突（Collision）&lt;/h3&gt;
&lt;p&gt;非常に便利なハッシングですが、致命的なトレードオフも存在します。&lt;/p&gt;
&lt;div style=&quot;font-family: monospace; border: 1px solid #ccc; padding: 12px; line-height: 1.6; background-color: #fafafa;&quot;&gt;・&lt;b&gt;ハッシュ衝突（Collision）：&lt;/b&gt;&lt;br /&gt;
まったく異なる意味の2つの単語（例：「リンゴ」と「みかん」）が、ハッシュ関数によって偶然&lt;b&gt;「同じ番号（インデックス）」に割り振られてしまう現象&lt;/b&gt;のことです。&lt;br /&gt;
&lt;br /&gt;
・&lt;b&gt;対策：&lt;/b&gt;&lt;br /&gt;
出力先の次元数を十分に大きく設定することで衝突確率を下げる、あるいは線形モデルなどの影響を受けにくいアルゴリズムと組み合わせることで実用上問題なく利用されます。&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: orange;&quot;&gt;5. DS検定形式：実戦4択クイズ&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;問：機械学習における「特徴量ハッシング（ハッシュ化トリック）」に関する記述として、最も適切なものはどれか。&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;① 主成分分析（PCA）と同様に、データから共分散行列を計算して分散の最大化を図ることで新しい直交軸を作り出す教師なし次元削減手法である。&lt;br /&gt;
② ハッシュ関数を用いて高次元な特徴量を固定長の小さな空間にマッピング（変換）することで、単語の辞書を持たずにメモリを節約しながら次元削減を行う手法である。&lt;br /&gt;
③ 決定木の分岐をハッシュ化して高速に検索するアルゴリズムであり、ランダムフォレストの計算速度を何倍にも高速化する専用の前処理である。&lt;br /&gt;
④ 異なる特徴量が偶然同じインデックスに変換される「ハッシュ衝突」は理論上絶対に発生しないため、高精度なテキスト分類に最適である。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;【 正解： ② 】&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;解説：&lt;/b&gt; 特徴量ハッシングの目的と仕組みを問う標準問題です。&lt;br /&gt;
②が正解です。ハッシュ関数で固定長にマッピングし、メモリを節約しつつ次元を削減します。&lt;br /&gt;
①は「主成分分析（PCA）」の説明です。&lt;br /&gt;
③決定木の高速化技術ではなく、主に高次元スパースデータ（テキスト等）の圧縮技術です。&lt;br /&gt;
④ハッシュ衝突は原理上発生する可能性があります（そのため次元数を適切に大きく取ります）。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;6. まとめ&lt;/h3&gt;
&lt;p&gt;DS検定や資格試験で「ハッシュ関数」「辞書を持たない」「固定長への変換」「メモリ節約・次元削減」「ハッシュ衝突」といったキーワードが出たら、正解は「特徴量ハッシング（ハッシュ化トリック）」です！ 主成分分析（PCA）との違い（計算をせず関数で一発変換する点）も含めて整理しておきましょう！&lt;/p&gt;</description> 
      <link>https://learnms.blog.shinobi.jp/Entry/242/</link> 
    </item>
    <item>
      <title>【Kaggle挑戦記】TPS Feb 2022：1.1万行の「重複データの罠」を破り、本番LBスコアを更新！</title>
      <description>&lt;p&gt;前回の検証では、手動での特徴量生成を行わずに素のデータをLightGBMへ投入した結果、&lt;b&gt;手元CVが0.99553（約99.5%）&lt;/b&gt;という異次元の高精度を記録した一方で、&lt;b&gt;Kaggle本番のLeaderboard（LB）では0.93937&lt;/b&gt;まで急降下するという大きなスコアギャップに直面しました。&lt;/p&gt;
&lt;p&gt;今回は、この乖離の原因である&lt;b&gt;「データ重複によるリーク（過学習）」&lt;/b&gt;を解消し、正しく検証環境を再構築してLBスコアの更新に挑みました。&lt;/p&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;1. なぜ手元スコアと本番スコアが大きくズレたのか？&lt;/h3&gt;
&lt;p&gt;分析を進めたところ、全20万行ある &lt;code&gt;train.csv&lt;/code&gt; の中に、全く同じ特徴量（286列の数値）を持つ&lt;b&gt;「重複行」が約1.1万行（全体の約5%以上）&lt;/b&gt;も存在していることが判明しました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;丸暗記による過学習：&lt;/b&gt; 通常の &lt;code&gt;StratifiedKFold&lt;/code&gt; で分割すると、全く同じデータが「学習用」と「検証用」の両方に分散して入り込んでしまいます。結果としてモデルがデータを暗記してしまい、手元のCVだけが異常に高く（0.99553）評価されていました。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;本番データでの失速：&lt;/b&gt; Kaggleのテストデータには未知のデータが含まれるため、暗記に頼ったモデルは本番環境（LB 0.93937）で威力を発揮できませんでした。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;2. 対策：重複行の一元化と sample_weight の導入&lt;/h3&gt;
&lt;p&gt;単に重複行を削除（&lt;code&gt;drop_duplicates&lt;/code&gt;）するだけでは、「そのデータがどれだけ高頻度で出現するか」という重要な確率情報（重み）が失われてしまいます。&lt;/p&gt;
&lt;p&gt;そこで、&lt;code&gt;groupby().size()&lt;/code&gt; を活用して重複行を1行に集約しつつ、出現回数を &lt;code&gt;sample_weight&lt;/code&gt;（サンプルの重み）として LightGBM に与えて学習させるアプローチ（&lt;code&gt;sample2.py&lt;/code&gt;）へコードを全修正しました。&lt;/p&gt;
&lt;pre style=&quot;background-color: #2d3748; color: #fff; padding: 15px; border-radius: 5px; font-family: monospace; font-size: 0.9em; overflow-x: auto; line-height: 1.5; white-space: pre;&quot;&gt;import pandas as pd
import numpy as np
from sklearn.model_selection import StratifiedKFold
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import accuracy_score
import lightgbm as lgb
import warnings

warnings.filterwarnings(&quot;ignore&quot;)

# 1. データの読み込みと重複処理
print(&quot;Loading data...&quot;)
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

X_raw = train.drop(columns=['row_id'])
X_test = test.drop(columns=['row_id'])

# 特徴量とターゲットが全く同じ行を集計して重み（sample_weight）を作成
features = [col for col in X_raw.columns if col != 'target']
train_dedup = X_raw.groupby(features + ['target']).size().reset_index(name='sample_weight')

X = train_dedup[features]
y_raw = train_dedup['target']
sample_weight = train_dedup['sample_weight']

print(f&quot;元のデータ数: {len(train)} 行&quot;)
print(f&quot;重複除去後のデータ数: {len(X)} 行&quot;)  # 123,993 行へ圧縮

# ターゲットの数値変換
le = LabelEncoder()
y = le.fit_transform(y_raw)

# 2. 多クラス分類パラメータ
params = {
    'objective': 'multiclass',
    'num_class': 10,
    'metric': 'multi_logloss',
    'verbosity': -1,
    'boosting_type': 'gbdt',
    'learning_rate': 0.1,
    'random_state': 42
}

# 3. Stratified K-Fold（sample_weight付き）
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
oof_preds = np.zeros((len(X), 10))
test_preds = np.zeros((len(test), 10))

for fold, (train_idx, val_idx) in enumerate(skf.split(X, y)):
    X_train, y_train, w_train = X.iloc[train_idx], y[train_idx], sample_weight.iloc[train_idx]
    X_val, y_val, w_val = X.iloc[val_idx], y[val_idx], sample_weight.iloc[val_idx]
    
    model = lgb.LGBMClassifier(**params, n_estimators=1000)
    
    # fit時に sample_weight を適用
    model.fit(
        X_train, y_train,
        sample_weight=w_train,
        eval_set=[(X_val, y_val)],
        eval_sample_weight=[w_val],
        callbacks=[lgb.early_stopping(stopping_rounds=50, verbose=False)]
    )
    
    oof_preds[val_idx] = model.predict_proba(X_val)
    test_preds += model.predict_proba(X_test) / skf.n_splits

# 4. 正しい重み付き評価（Accuracy）の算出
oof_classes = np.argmax(oof_preds, axis=1)
cv_accuracy = accuracy_score(y, oof_classes, sample_weight=sample_weight)
print(f&quot;修正後の手元交差検証スコア（Accuracy）: {cv_accuracy:.5f}&quot;)

# 5. 提出用ファイルの作成
test_classes_num = np.argmax(test_preds, axis=1)
test_classes_str = le.inverse_transform(test_classes_num)

submission = pd.DataFrame({
    'row_id': test['row_id'],
    'target': test_classes_str
})
submission.to_csv('submission_tps_feb2022_dedup_lgb.csv', index=False)
&lt;/pre&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;3. 実行結果とスコア比較&lt;/h3&gt;
&lt;p&gt;重複一元化を行ったモデルの実行ログおよびKaggleへ再提出（Late Submit）した結果の推移です。&lt;/p&gt;
&lt;pre style=&quot;background-color: #2d3748; color: #fff; padding: 15px; border-radius: 5px; font-family: monospace; font-size: 0.95em; overflow-x: auto; line-height: 1.4;&quot;&gt;Loading data...
Processing duplicates...
元のデータ数: 200000 行
重複除去後のデータ数: 123993 行

Starting Cross Validation with sample_weight...
 Fold 1 finished.
 Fold 2 finished.
 Fold 3 finished.
 Fold 4 finished.
 Fold 5 finished.

========================================
修正後の手元交差検証スコア（Accuracy）: 0.95766
========================================
&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;【実験結果の比較表】&lt;/b&gt;&lt;/p&gt;
&lt;table border=&quot;1&quot; style=&quot;border-collapse: collapse; width: 100%; text-align: center; margin: 15px 0;&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;background-color: #f2f2f2;&quot;&gt;&lt;th&gt;手法&lt;/th&gt;&lt;th&gt;手元CV (Accuracy)&lt;/th&gt;&lt;th&gt;Kaggle Public LB&lt;/th&gt;&lt;th&gt;評価&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1. 生データ (無加工)&lt;/td&gt;
&lt;td&gt;0.99553&lt;/td&gt;
&lt;td&gt;0.94192 (0.93937)&lt;/td&gt;
&lt;td&gt;重複データによるリークでCVが歪んでいた&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-weight: bold; color: #d9534f;&quot;&gt;2. 重複除去 + sample_weight&lt;/td&gt;
&lt;td style=&quot;font-weight: bold; color: #d9534f;&quot;&gt;0.95766&lt;/td&gt;
&lt;td style=&quot;font-weight: bold; color: #d9534f;&quot;&gt;0.94317 (Private: 0.94024)&lt;/td&gt;
&lt;td style=&quot;font-weight: bold; color: #d9534f;&quot;&gt;CVが健全化し、本番スコアも着実に向上！&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;4. 考察とエンジニアとしての気づき&lt;/h3&gt;
&lt;p&gt;手元のCVスコアは前回の「丸暗記による異常値（0.99553）」から&lt;b&gt;0.95766&lt;/b&gt;へと下がり、現実的で信頼できる検証値へと正常化されました。そして何より、&lt;b&gt;Kaggle本番（Public LB）のスコアが 0.94192 &amp;rarr; 0.94317 へとしっかり向上&lt;/b&gt;したことが大きな成果です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;検証環境（CV）の重要性：&lt;/b&gt; 「CVスコアが高ければ良い」わけではなく、適切な前処理によって本番環境（テストデータ）の挙動を正しく反映する検証環境を作ることが最優先であると再認識しました。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;重み付けの有効性：&lt;/b&gt; 単純な &lt;code&gt;drop_duplicates&lt;/code&gt; でデータ量を減らすだけでなく、出現回数を &lt;code&gt;sample_weight&lt;/code&gt; としてモデルに伝えることで、情報量を維持したまま過学習を防止できました。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;手元検証の基盤が整ったため、いよいよ次回はこのコンペの「真のキーパーツ」であるドメイン知識（GCD：最大公約数を用いた実験スケールの復元）を取り入れ、本番スコアの上位帯（0.98以上）への到達を目指します。&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;次回は、GCD（最大公約数）特徴量の計算・追加によるモデルの飛躍的な精度向上に挑戦します。&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;</description> 
      <link>https://learnms.blog.shinobi.jp/Entry/241/</link> 
    </item>
    <item>
      <title>【TensorFlow】2つのスカラー（定数）で四則演算を行う基本コード</title>
      <description>&lt;p&gt;TensorFlowを扱い始めるとき、まず押さえておきたいのが最も基本的なデータ単位である「スカラー（単一の数値）」の作成と、それらを使った基本的な計算方法です。今回は、2つのスカラー定数を作成し、加算・減算・乗算・除算を行う最小のサンプルコードを整理します。&lt;/p&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;1. 【 概要 】&lt;/h3&gt;
&lt;p&gt;TensorFlowにおける数値やデータは、すべて「Tensor（テンソル）」というオブジェクトとして扱われます。&lt;/p&gt;
&lt;p&gt;0次元のテンソル（単一の数値）を「スカラー」と呼び、&lt;code&gt;tf.constant()&lt;/code&gt; 関数を使うことで簡単に定義できます。Python標準の数値と同じ感覚で、TensorFlowの関数を使って四則演算を実行できます。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: #d32f2f;&quot;&gt;2. 【 基本手順（2つのステップ） 】&lt;/h3&gt;
&lt;div style=&quot;background-color: #eeeeee; border: 2px solid #333; padding: 15px; font-size: 1.1em; line-height: 1.8; text-align: left;&quot;&gt;&lt;b&gt;(1) tf.constant() によるスカラー定数の定義&lt;/b&gt;&lt;br /&gt;
&lt;code&gt;a = tf.constant(10)&lt;/code&gt; のように、任意の数値を指定してテンソル（スカラー）を作成する。&lt;br /&gt;
&lt;b&gt;(2) TensorFlowの演算関数（または標準演算子）の実行&lt;/b&gt;&lt;br /&gt;
&lt;code&gt;tf.add()&lt;/code&gt; や &lt;code&gt;+&lt;/code&gt; 演算子などを使用して、定義したスカラー同士の計算を行う。&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;3. 整理：スカラー演算の「基本コード」と出力の読み方&lt;/h3&gt;
&lt;p&gt;実際のコードと、計算結果がどのように出力されるかのポイントを詳しく見ていきましょう。&lt;/p&gt;
&lt;p&gt;【 演算方法と結果のポイント 】&lt;/p&gt;
&lt;div style=&quot;font-family: monospace; border: 1px solid #ccc; padding: 10px; line-height: 1.6;&quot;&gt;・&lt;b&gt;基本演算子の使用（+, -, *, /）&lt;/b&gt;&lt;br /&gt;
通常のPythonコードと同様に &lt;code&gt;a + b&lt;/code&gt; や &lt;code&gt;a * b&lt;/code&gt; と記述するだけで、TensorFlow内部で自動的に演算処理が行われます。&lt;br /&gt;
&lt;br /&gt;
・&lt;b&gt;専用関数の使用（tf.add, tf.multiply等）&lt;/b&gt;&lt;br /&gt;
&lt;code&gt;tf.add(a, b)&lt;/code&gt; や &lt;code&gt;tf.multiply(a, b)&lt;/code&gt; といったTensorFlow独自の関数を使うことも可能です。可読性や処理明示のために使い分けられます。&lt;br /&gt;
&lt;br /&gt;
・&lt;b&gt;出力値（tf.Tensor）の読み方&lt;/b&gt;&lt;br /&gt;
計算結果を出力すると &lt;code&gt;tf.Tensor(15, shape=(), dtype=int32)&lt;/code&gt; のような形式で表示されます。&lt;code&gt;shape=()&lt;/code&gt; は0次元（スカラー）であることを意味し、&lt;code&gt;.numpy()&lt;/code&gt; を付けることで数値だけを取り出せます。&lt;/div&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;4. 関連して押さえたい「スカラー演算の主な関数」&lt;/h3&gt;
&lt;p&gt;TensorFlowで用意されている代表的な四則演算関数の一覧です。&lt;/p&gt;
&lt;p&gt;・&lt;b&gt;加算（足し算）&lt;/b&gt;：&lt;code&gt;tf.add(a, b)&lt;/code&gt; （演算子: &lt;code&gt;a + b&lt;/code&gt;）&lt;br /&gt;
・&lt;b&gt;減算（引き算）&lt;/b&gt;：&lt;code&gt;tf.subtract(a, b)&lt;/code&gt; （演算子: &lt;code&gt;a - b&lt;/code&gt;）&lt;br /&gt;
・&lt;b&gt;乗算（掛け算）&lt;/b&gt;：&lt;code&gt;tf.multiply(a, b)&lt;/code&gt; （演算子: &lt;code&gt;a * b&lt;/code&gt;）&lt;br /&gt;
・&lt;b&gt;除算（割り算）&lt;/b&gt;：&lt;code&gt;tf.divide(a, b)&lt;/code&gt; （演算子: &lt;code&gt;a / b&lt;/code&gt;）&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: orange;&quot;&gt;5. 補足：Pythonでの実装コード例&lt;/h3&gt;
&lt;p&gt;Google Colab等でそのまま実行できるスカラー演算のサンプルコードと実際の実行結果です。&lt;/p&gt;
&lt;div style=&quot;font-family: monospace; border: 1px solid #ccc; padding: 10px; line-height: 1.6; background-color: #f5f5f5; color: #222222;&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;# コード実行例&lt;/span&gt;&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 1. 2つのスカラー定数を定義&lt;/span&gt;&lt;br /&gt;
a = tf.constant(10)&lt;br /&gt;
b = tf.constant(5)&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 2. 四則演算の実行&lt;/span&gt;&lt;br /&gt;
add_result = tf.add(a, b) &lt;span style=&quot;color: #666666;&quot;&gt;# 加算 (10 + 5)&lt;/span&gt;&lt;br /&gt;
sub_result = tf.subtract(a, b) &lt;span style=&quot;color: #666666;&quot;&gt;# 減算 (10 - 5)&lt;/span&gt;&lt;br /&gt;
mul_result = tf.multiply(a, b) &lt;span style=&quot;color: #666666;&quot;&gt;# 乗算 (10 * 5)&lt;/span&gt;&lt;br /&gt;
div_result = tf.divide(a, b) &lt;span style=&quot;color: #666666;&quot;&gt;# 除算 (10 / 5)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 3. 結果の表示&lt;/span&gt;&lt;br /&gt;
print(&quot;加算（Tensorオブジェクト）:&quot;, add_result)&lt;br /&gt;
print(&quot;加算（数値のみ抽出）:&quot;, add_result.numpy())&lt;br /&gt;
print(&quot;減算:&quot;, sub_result.numpy())&lt;br /&gt;
print(&quot;乗算:&quot;, mul_result.numpy())&lt;br /&gt;
print(&quot;除算:&quot;, div_result.numpy())&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 出力結果&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 加算（Tensorオブジェクト）: tf.Tensor(15, shape=(), dtype=int32)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 加算（数値のみ抽出）: 15&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 減算: 5&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 乗算: 50&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 除算: 2.0&lt;/span&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;6. まとめ&lt;/h3&gt;
&lt;p&gt;TensorFlowにおける数値操作の最小単位である「スカラー」は、&lt;code&gt;tf.constant()&lt;/code&gt; で生成し、直感的な演算子や専用関数で簡単に計算できます。&lt;code&gt;.numpy()&lt;/code&gt; メソッドを使えば通常のPython数値として結果を取り出せる点もポイントです。まずはこの基本演算からTensorFlowの記法に慣れていきましょう！&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;</description> 
      <link>https://learnms.blog.shinobi.jp/Entry/240/</link> 
    </item>
    <item>
      <title>【TensorFlow】Google Colabで始める環境構築手順と動作確認</title>
      <description>&lt;p&gt;「TensorFlowでAIや機械学習を始めてみたいけれど、PCの環境構築が難しそう&amp;hellip;」と悩んでいませんか？今回は、ブラウザとGoogleアカウントさえあればインストール不要・無料でTensorFlowを動かせる「Google Colaboratory（通称 Colab）」を使った環境構築と動作確認手順を整理します。&lt;/p&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;1. 【 概要 】&lt;/h3&gt;
&lt;p&gt;Google Colaboratory（Google Colab）とは、Googleが提供するブラウザ上でPythonのコードを実行できる開発環境です。&lt;/p&gt;
&lt;p&gt;面倒なライブラリのインストールや環境構築が一切不要で、あらかじめTensorFlowやNumPyといった主要なAIライブラリが組み込まれています。さらに、AIの計算を高速化する「GPU」環境も無料で利用できるため、初心者の学習に最適です。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: #d32f2f;&quot;&gt;2. 【 基本手順（2つのステップ） 】&lt;/h3&gt;
&lt;div style=&quot;background-color: #eeeeee; border: 2px solid #333; padding: 15px; font-size: 1.1em; line-height: 1.8; text-align: left;&quot;&gt;&lt;b&gt;(1) ノートブックの作成とGPU設定&lt;/b&gt;&lt;br /&gt;
Google Colabにアクセスして新しいノートブックを作成し、高速処理用の「GPU環境」を有効化する。&lt;br /&gt;
&lt;b&gt;(2) テストコードによる動作確認&lt;/b&gt;&lt;br /&gt;
TensorFlowのバージョン確認およびGPUの認識確認を行うコードを実行する。&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;3. 整理：環境構築の「ステップ順」徹底解説&lt;/h3&gt;
&lt;p&gt;Google Colab上でTensorFlowを動かすための具体的な手順を詳しく見ていきましょう。&lt;/p&gt;
&lt;p&gt;【 各ステップの具体的な操作 】&lt;/p&gt;
&lt;div style=&quot;font-family: monospace; border: 1px solid #ccc; padding: 10px; line-height: 1.6;&quot;&gt;・&lt;b&gt;ステップ1：Colabにアクセスしノートブックを作成する&lt;/b&gt;&lt;br /&gt;
ブラウザで Google Colab にアクセスし、Googleアカウントでログインします。画面右下の「ノートブックを新規作成」をクリックして新しい作業画面を開きます。&lt;br /&gt;
&lt;br /&gt;
・&lt;b&gt;ステップ2：ハードウェアアクセラレータ（GPU）を設定する&lt;/b&gt;&lt;br /&gt;
上部メニューの「ランタイム」＞「ランタイムのタイプを変更」を開き、ハードウェアアクセラレータで「T4 GPU」（または「GPU」）を選択して保存します。（※簡単な文法確認のみであればCPUのままでも構いません）&lt;br /&gt;
&lt;br /&gt;
・&lt;b&gt;ステップ3：動作確認コードを実行する&lt;/b&gt;&lt;br /&gt;
コードセルに動作確認用のPythonコードを入力し、再生ボタン（▶）または Shift + Enter キーを押して実行します。&lt;/div&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;4. 関連して押さえたい「実行時の注意点と仕様」&lt;/h3&gt;
&lt;p&gt;Google Colabでコードを実行した際、「すぐに実行されずに待たされる」ことがあります。これらはColabの仕様によるものです。&lt;/p&gt;
&lt;p&gt;・&lt;b&gt;初回接続（初期化）の待ち時間&lt;/b&gt;：ノートブックを開いて一番最初にコードを実行する際は、裏側で仮想サーバーを起動する処理（割り当て・初期化）が行われるため、数秒〜数十秒の待ち時間が発生します。&lt;br /&gt;
・&lt;b&gt;GPUのキュー待ち（順番待ち）&lt;/b&gt;：無料版のGPUサーバーはユーザー間で共有されているため、混雑する時間帯は「割り当て待ち」のキューに入ることがあります。&lt;br /&gt;
・&lt;b&gt;セッションの保持&lt;/b&gt;：一定時間操作を行わないと接続が切断され、実行中のメモリ内容が初期化されます。（作成したコード自体はGoogleドライブに自動保存されます）&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: orange;&quot;&gt;5. 補足：動作確認用Pythonコード例&lt;/h3&gt;
&lt;p&gt;以下のコードをColabに貼り付けて実行することで、TensorFlowが正常に動作しているか、またGPUが認識されているかを確認できます。&lt;/p&gt;
&lt;div style=&quot;font-family: monospace; border: 1px solid #ccc; padding: 10px; line-height: 1.6; background-color: #f5f5f5; color: #222222;&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;# コード実行例&lt;/span&gt;&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 1. TensorFlowのバージョン確認&lt;/span&gt;&lt;br /&gt;
print(&quot;TensorFlow バージョン:&quot;, tf.__version__)&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 2. GPUの認識確認&lt;/span&gt;&lt;br /&gt;
gpu_devices = tf.config.list_physical_devices('GPU')&lt;br /&gt;
if gpu_devices:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&quot;使用可能なGPU:&quot;, gpu_devices[0].name)&lt;br /&gt;
else:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&quot;GPUは認識されていません（CPUモードで動作中）&quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 出力イメージ&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# TensorFlow バージョン: 2.20.0&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;# 使用可能なGPU: /physical_device:GPU:0&lt;/span&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;6. まとめ&lt;/h3&gt;
&lt;p&gt;Google Colabを使えば、難解なローカル環境の構築を行うことなく、**「ブラウザを開いてすぐにTensorFlowを動かす」** ことが可能です。出力結果にバージョン番号と「/physical_device:GPU:0」が表示されれば、環境構築は無事成功です。まずは手軽なColab環境からディープラーニングの学習をスタートしてみましょう！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;</description> 
      <link>https://learnms.blog.shinobi.jp/Entry/239/</link> 
    </item>
    <item>
      <title>【DS検定対策】深層学習の最大の壁！「勾配消失問題」の原因と対策</title>
      <description>&lt;p&gt;ディープラーニング（深層学習）において、ネットワークの層を深くすればするほど学習が難しくなる大きな原因の一つが&lt;b&gt;「勾配消失問題（Vanishing Gradient Problem）」&lt;/b&gt;です。そのメカニズムと克服のための対策を整理しましょう！&lt;/p&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;1. 【 問題 】&lt;/h3&gt;
&lt;p&gt;ニューラルネットワークの層を深くした際、誤差逆伝播法において出力層から入力層に向かって遡るにつれて勾配（微分値）が小さくなりゼロに近づくことで、入力層に近い重みが更新されず学習が進まなくなる現象を何と呼ぶでしょうか？&lt;/p&gt;
&lt;p&gt;① 勾配消失問題（Vanishing Gradient Problem）&lt;br /&gt;
② 勾配爆発問題（Exploding Gradient Problem）&lt;br /&gt;
③ 欠損値問題（Missing Value Problem）&lt;br /&gt;
④ 多重共線性（Multicollinearity）&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: #d32f2f;&quot;&gt;2. 【 解答 】&lt;/h3&gt;
&lt;div style=&quot;background-color: #eeeeee; border: 2px solid #333; padding: 15px; font-size: 1.2em; font-weight: bold; text-align: center;&quot;&gt;正解： ① 勾配消失問題（Vanishing Gradient Problem）&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;3. 整理：なぜ勾配が消失してしまうのか？&lt;/h3&gt;
&lt;p&gt;主な原因は、従来使われていた活性化関数&lt;b&gt;「シグモイド関数」&lt;/b&gt;の微分特性と、連鎖律（チェーンルール）にあります。&lt;/p&gt;
&lt;table border=&quot;1&quot; style=&quot;border-collapse: collapse; width: 100%; text-align: left; cellpadding: 8px;&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;background-color: #f2f2f2; text-align: center;&quot;&gt;&lt;th style=&quot;width: 30%;&quot;&gt;要素&lt;/th&gt;&lt;th style=&quot;width: 70%;&quot;&gt;仕組みと影響&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;シグモイド関数の微分値&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;シグモイド関数の微分係数は&lt;b&gt;最大でも 0.25（1未満）&lt;/b&gt;です。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;連鎖律による掛け算&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;誤差逆伝播では、層を1つ遡るごとに微分値を掛け合わせます。&lt;br /&gt;
「1未満の数（0.25以下）」を何十層も掛け合わせると、&lt;b&gt;数値は急速にゼロに近づきます（消失）&lt;/b&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;結果（学習の停止）&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;入力層に近いパラメータの勾配がほぼ 0 になるため、重みが更新されなくなります。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;4. 勾配消失を解決した「3つの画期的アプローチ」&lt;/h3&gt;
&lt;p&gt;AIの歴史の中で、勾配消失問題を克服するために様々な技術が開発されました。&lt;/p&gt;
&lt;div style=&quot;font-family: monospace; border: 1px solid #ccc; padding: 12px; line-height: 1.6; background-color: #fafafa;&quot;&gt;&lt;b&gt;① 活性化関数の見直し（ReLU関数の採用）：&lt;/b&gt;&lt;br /&gt;
・入力が正のとき微分値が常に「1」となる &lt;b&gt;ReLU（Rectified Linear Unit）&lt;/b&gt; を使うことで、何層遡っても勾配が小さくなりません。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;② 適切な重みの初期化方法：&lt;/b&gt;&lt;br /&gt;
・Xavier（ザビエル）の初期値（シグモイド向け）や &lt;b&gt;He（ハー）の初期値（ReLU向け）&lt;/b&gt; を使い、データの広がりを適正化します。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;③ ネットワーク構造の工夫（残差構造等）：&lt;/b&gt;&lt;br /&gt;
・CNNでは &lt;b&gt;ResNet（Skip Connection）&lt;/b&gt;、RNNでは &lt;b&gt;LSTM / GRU&lt;/b&gt; を導入し、勾配をダイレクトに過去（手前の層）へ流すバイパス構造を作りました。&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: orange;&quot;&gt;5. DS検定形式：実戦4択クイズ&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;問：ニューラルネットワークの学習における「勾配消失問題」とその対策に関する記述として、最も適切なものはどれか。&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;① 勾配消失問題は、活性化関数にReLUを採用することで、正の入力領域における微分値が0になるため発生しやすくなる。&lt;br /&gt;
② 重みの初期値を極めて大きな値に設定することで、誤差逆伝播時の勾配消失を完全に防止することができる。&lt;br /&gt;
③ シグモイド関数を深層ニューラルネットワークの各層に使用すると、微分値の最大値が1未満であるため勾配消失が発生しやすい。&lt;br /&gt;
④ 勾配消失問題が起きると、出力層に近い層ほどパラメータの更新量が小さくなり、入力層に近い層ほど急速に学習が進む。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;【 正解： ③ 】&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;解説：&lt;/b&gt; 勾配消失の原因と対策の正誤を問う重要問題です。&lt;br /&gt;
③が正解です。シグモイド関数の微分値は最大0.25のため、層を重ねると勾配が消失します。&lt;br /&gt;
①ReLUは正の領域で微分値が「1」となるため、勾配消失を防ぐ効果があります。&lt;br /&gt;
②重みの初期値を大きくしすぎると、逆に「勾配爆発（Exploding Gradient）」を起こします。&lt;br /&gt;
④勾配逆伝播は出力層から入力層へ遡るため、影響を受ける（更新が止まる）のは「入力層に近い層」です。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 style=&quot;color: blue;&quot;&gt;6. まとめ&lt;/h3&gt;
&lt;p&gt;DS検定や資格試験で「誤差逆伝播で勾配がゼロになる」「シグモイド関数の多層利用」「入力層側の重みが更新されない」が出たら、正解は「勾配消失問題」です！ 対策としての「ReLU関数」「Heの初期値」「ResNet（Skip Connection）」もセットで完璧に覚えておきましょう！&lt;/p&gt;</description> 
      <link>https://learnms.blog.shinobi.jp/Entry/238/</link> 
    </item>

  </channel>
</rss>