パラメータ設定
データは指定シードの LCG で決定論的に生成(クラスごとに 30 点、計 60 点、σ=1.2)。勾配降下はバッチ全件で更新します。
散布図・決定境界・確率等高線
赤=クラス 0/青=クラス 1/緑線=決定境界(p=0.5)/薄色塗=確率の等高線(p=0.3, 0.5, 0.7)/左下=(w₁, w₂, b)
理論・主要公式
ロジスティック回帰は、線形スコア $z = \mathbf{w}\cdot\mathbf{x} + b$ をシグモイド関数で確率に変換し、クロスエントロピー損失を勾配降下で最小化する線形分類器です。
シグモイド関数による予測確率:
$$p(y=1 \mid \mathbf{x}) = \sigma(z) = \frac{1}{1 + e^{-z}}$$
クロスエントロピー損失(n はサンプル数、$y_i \in \{0,1\}$):
$$L = -\frac{1}{n}\sum_{i=1}^{n}\bigl[y_i \log p_i + (1 - y_i)\log(1 - p_i)\bigr]$$
勾配と重み更新(L2 正則化 λ を含む):
$$\frac{\partial L}{\partial \mathbf{w}} = \frac{1}{n}\mathbf{X}^{\top}(\mathbf{p}-\mathbf{y}) + \lambda\mathbf{w}, \quad \mathbf{w} \leftarrow \mathbf{w} - \eta\frac{\partial L}{\partial \mathbf{w}}$$
決定境界(p=0.5 の等値線)は $\mathbf{w}\cdot\mathbf{x}+b=0$、すなわち $w_1 x_1 + w_2 x_2 + b = 0$ の直線です。
ロジスティック回帰シミュレーターとは
🙋
ロジスティック「回帰」っていうのに、2クラス分類に使うって聞きました。回帰なのか分類なのか、よく分かんないんですけど…
🎓
そこ、みんな最初につまずくところだ。ざっくり言うと、ロジスティック回帰は「クラス1である確率」という連続値を回帰する。出てきた確率を 0.5 で区切ってクラスに変換する、そこが「分類」っぽい部分だ。上のシミュレーターで赤と青の点を見てごらん。緑の線が決定境界——ちょうど p=0.5 になる場所だよ。
🙋
緑の線の周りに、赤と青のグラデーションがありますね。これは何ですか?
🎓
それが「確率の等高線」だ。シグモイド関数 $\sigma(z) = 1/(1+e^{-z})$ が線形スコア $z$ を 0〜1 の確率に変換する。点線で示した赤側が p=0.3、青側が p=0.7。緑の決定境界に近いほど「自信のない」予測になっていることがビジュアルで分かるはずだ。中央付近は色が薄いだろう?
🙋
「学習率」を 0.001 まで下げたら、線がうまく傾かなくなりました。
🎓
学習率は勾配降下の一歩の大きさを決めるパラメータだ。小さすぎると 500 回反復しても収束しきれず、重みがほぼ 0 のまま。逆に 1.0 まで上げると、一歩が大きすぎて最適解を飛び越えて振動することがある。実務では 0.01〜0.1 くらいから始めて、損失が下がる様子を見ながら調整するのが定石だよ。シミュレーターで「最終クロスエントロピー損失」のカードを見ながら、ちょうど良い η を探してみてほしい。
🙋
「L2 正則化 λ」を 1.0 まで上げたら、重み w₁ がガクッと小さくなって、境界の傾きが緩くなりました。
🎓
いいところに気づいたね。L2 正則化は損失に $\lambda\|\mathbf{w}\|^2$ を加えて「重みを大きくしすぎない」ように罰則をかける仕組みだ。データが線形分離可能だと、シグモイドは重みをどんどん大きくして「自信たっぷりな」予測を出そうとする。これが過学習につながるんだ。λ を効かせるとそれを抑えられる。実務では、訓練精度が下がっても汎化性能(テストデータでの精度)が上がるなら λ を強めるのが普通だよ。
よくある質問
シグモイドの代わりに Softmax 関数 $\sigma(z_k) = e^{z_k}/\sum_j e^{z_j}$ を使い、クラスごとに重みベクトル $\mathbf{w}_k$ を持たせます。これを「Softmax 回帰」または「多項ロジスティック回帰」と呼びます。損失関数は多クラス用クロスエントロピーで、勾配の形は二項版とほぼ同じです。scikit-learn では LogisticRegression(multi_class='multinomial') の 1 行で利用できます。
L2 ($\lambda\sum w_i^2$) は重みを連続的に小さく抑え、滑らかなモデルを得るのが目的です。L1 ($\lambda\sum|w_i|$) は不要な重みをちょうど 0 にする「スパース化」が特徴で、特徴量選択を兼ねます。実務では L2 を基本とし、高次元で重要な特徴量を絞りたい場合に L1 や Elastic Net(L1+L2)を使い分けます。本シミュレーターは L2 のみを実装しています。
そのままでは「直線」でしか分けられないため、円状や XOR 状のデータには弱いです。対処法は2つ:(1) 入力に多項式特徴量 $x_1^2, x_2^2, x_1 x_2$ などを追加して「カーネルトリック」的に拡張する、(2) より表現力の高いモデル(ニューラルネット、SVM、勾配ブースティング)に切り替える、です。本シミュレーターのデータは線形分離がほぼ可能なので、デフォルト設定で 95% 以上の訓練精度が出ます。
本シミュレーターはバッチ勾配降下を使っています。これは全データを使って勾配を 1 回計算する方式で、安定するがデータ量が大きいと遅くなります。SGD は 1 サンプル(またはミニバッチ)ごとに勾配を計算して更新を進める方式で、計算が速くノイズが入る代わりに局所最適を抜け出しやすい利点があります。大規模データではミニバッチ SGD が定番です。
実世界での応用
医療診断支援:患者の検査値(血圧・血糖値・年齢など)から、疾病の有無や治療反応性の確率を予測する場面で広く使われます。線形モデルなので係数 $w_i$ が「どの特徴量がどれだけ寄与しているか」を直接解釈でき、医師に対する説明性が高いことが評価されています。ロジスティック回帰の係数のオッズ比解釈は、医学統計の教科書で必ず登場する基本ツールです。
マーケティング・与信審査:顧客が商品を購入する確率、ローン申込者が貸し倒れる確率などを予測する古典的な手法です。決定木やニューラルネットより精度では劣ることもありますが、規制業界(金融・保険)では「説明可能性」が必須要件のため、いまだに第一選択肢として使われ続けています。Scorecard と呼ばれる業務帳票が、ロジスティック回帰係数から直接作られます。
クリック率予測(CTR):オンライン広告のクリック予測では、特徴量が数億次元に達することもありますが、L1 正則化付きロジスティック回帰が長年スケーラブルな解として使われてきました。Google や Facebook の初期の広告システムは、この手法を分散学習で動かしていたことで知られています。
機械学習の基礎・ベースライン:新しいタスクで「とりあえずロジスティック回帰で精度を測る」のは、データサイエンティストの作法です。シンプルなモデルが意外に高精度を出すことは珍しくなく、複雑なモデルに移行する前にロジスティック回帰のベースラインを必ず取ることが推奨されます。本シミュレーターは、この「ベースラインの動作原理」を可視化する教材です。
よくある誤解と注意点
最も多い誤解は、「ロジスティック回帰は線形回帰の一種だから単純すぎる」と侮ってしまうことです。実際には、シグモイド関数による非線形変換とクロスエントロピー損失の組み合わせは、ニューラルネットワークの 1 層と数学的に同じ構造を持っています。深層学習が登場する以前は、ロジスティック回帰こそが「もっとも信頼できる線形分類器」として君臨し続け、現在でも特徴量設計が良ければ複雑なモデルに匹敵する精度を叩き出すケースが多々あります。シミュレーターで適切な η と λ を選ぶと訓練精度が 95% を超えるのが見えるはずです。「単純=弱い」ではない好例です。
次に多いのが、「訓練精度が高ければ良いモデル」と思い込むことです。本シミュレーターは訓練データに対する精度を表示していますが、これは「学習に使ったデータをどれだけ覚えたか」を示すだけです。実運用での真の指標は「未知データへの予測精度」つまり汎化性能であり、訓練精度だけ追っていると過学習に陥ります。L2 正則化 λ を強めると訓練精度が下がる代わりに過学習が抑えられる、というトレードオフを本シミュレーターで体感してください。実務では訓練/検証/テストの 3 分割で精度を別々に見るのが基本です。
最後に、「勾配降下を回せば必ず最適解に到達する」と過信するのは危険です。ロジスティック回帰の損失関数自体は凸関数なので、理論的にはグローバル最適解に収束します。ただし学習率 η が大きすぎると振動して発散したり、小さすぎると 5000 回反復しても収束しなかったりします。シミュレーターで η を 0.001 や 1.0 にして「重み w₁」と「損失」のカードを見れば、この感覚がつかめます。実務では学習率スケジューリング(徐々に η を下げる)や Adam・RMSProp などの適応的最適化アルゴリズムを使うのが普通です。