Logistic Regression
ロジスティック回帰は、特徴量の重み付き合計をシグモイド関数でクラス確率に変換します。学習方法、オッズとしての解釈、しきい値の使い方を解説します。
ロジスティック回帰は、入力があるクラスに属する確率を、特徴量の重み付き和にロジスティック関数、すなわちシグモイド関数を適用して推定する、分類のための教師あり学習手法です。モデルが特徴量に対するクラスの対数オッズを回帰するため「回帰」という名前が含まれますが、用途は分類です。スパムフィルター、信用モデル、スクリーニング検査では、確率をしきい値によってはい・いいえの判定に変換します。Joseph Berksonは1944年から一般的な統計モデルとして開発し、「logit」という用語を作りました。学習が数秒で完了し、確率を出力し、重みがオッズへの効果を直接示すことから、現在も表形式データの分類における標準的なベースラインです。
ロジスティック回帰の仕組み#
モデルは線形回帰と同じようにスコアz = w·x + bを計算し、それを確率p = 1 / (1 + e⁻ᶻ)に変換します。シグモイド関数は任意のスコアを0から1の範囲に収め、z = 0では0.5を返し、zが正負いずれかの方向に大きくなると、それぞれ1または0に近づきます。逆変換するとスコアの意味が分かります。zは対数オッズlog(p / (1 − p))に等しいため、モデルは正例クラスの対数オッズが各特徴量に対して線形に変化すると仮定し、決定境界は直線、平面、または超平面になります。ある特徴量が1単位増えると、その特徴量の重みwに対してオッズはeʷ倍になります。そのため、医療や信用調査では、ロジスティック回帰の結果をオッズ比で報告します。
学習では最尤法によって重みを設定します。これは対数損失(別名、二値交差エントロピー)−[y·log(p) + (1 − y)·log(1 − p)]を学習データ全体で平均した値を最小化することと同じです。損失関数は凸で最小値が1つですが、閉形式の解がないため、L-BFGS、ニュートン法、勾配降下法などのソルバーを反復して解を求めます。超平面によってクラスが完全に分離されると、ペナルティがない場合は重みが無限大に向かうため、ライブラリではデフォルトで正則化を適用します。scikit-learnのLogisticRegressionはC = 1.0のL2ペナルティを適用し、Cが小さいほど正則化が強くなります。対数損失は確率の正確さを評価するため、適切に仕様化され、適切な正則化が施されたロジスティック回帰は、適切にキャリブレーションされた確率を返す傾向があります。これは、ブライアスコアなどの指標で測定される特性です。
決定しきい値#
しきい値によって各確率をラベルに変換します。0.5はあくまでデフォルト値です。しきい値を動かすと、適合率と再現率のトレードオフが変わります。がん検診モデルでは腫瘍の見逃しを減らすためにしきい値を下げ、スパムフィルターでは正当なメールを隠さないようにしきい値を上げます。ROC曲線はすべてのしきい値におけるこのトレードオフをプロットし、曲線下面積は、モデルが正例を負例よりどれだけ適切に順位付けできるかを測定します。この例では、scikit-learnに付属するウィスコンシン州の乳がんデータセットでロジスティック回帰を学習し、2つのしきい値を比較します。
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import precision_score, recall_score
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
X, y = load_breast_cancer(return_X_y=True)
y = 1 - y # make malignant (originally 0) the positive class
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)
# Standardize the 30 features, then fit weights by minimizing log loss
model = make_pipeline(StandardScaler(), LogisticRegression())
model.fit(X_train, y_train)
# Predicted probability of malignancy, turned into labels at two thresholds
proba = model.predict_proba(X_test)[:, 1]
for threshold in (0.5, 0.1):
pred = (proba >= threshold).astype(int)
print(
f"Threshold {threshold}: precision {precision_score(y_test, pred):.3f}, recall {recall_score(y_test, pred):.3f}"
)デフォルトのしきい値0.5では、モデルが陽性と判定した腫瘍はすべて悪性です(適合率1.000)。テストセット内の悪性腫瘍53個のうち2個を見逃します(再現率0.962)。しきい値0.1では53個すべてを検出できます(再現率1.000)が、良性腫瘍90個のうち11個も陽性と判定します(適合率0.828)。
多クラス分類とニューラルネットワーク分類器#
相互排他的なクラスが2つより多い場合、多項ロジスティック回帰はクラスごとにスコアを計算し、ソフトマックス関数によって合計が1になる確率に変換し、交差エントロピー損失で学習します。一対他方式では、クラスごとに個別の二値モデルを学習します。1つの入力に複数のラベルを同時に付けられるマルチラベル問題では、クラスごとに独立したシグモイド関数を使います。
多くの分類ニューラルネットワークの出力層は、前段の層が学習した特徴量にこれらのモデルのいずれかを適用します。画像分類ネットワークでは、線形層とソフトマックスで終わる構成がその一例です。YOLO26の検出ヘッドでは、各分類分岐の末尾に1×1畳み込みを配置し、すべてのグリッド位置でクラスごとに1つのロジットを出力します。シグモイド関数が各ロジットを独立したクラススコアに変換し、二値交差エントロピーで学習するため、各クラススコアはその位置の特徴量に対するロジスティック回帰です。predictモードの引数confは、これらのスコアに適用される決定しきい値で、デフォルトは0.25です。
用途#
- 臨床リスクスコア:モデルは年齢、血圧、検査値から、疾患、合併症、再入院の確率を推定します。オッズ比によって、各要因がリスクをどれだけ高めるかを臨床医が把握できます。
- 信用スコアリング:金融機関はロジスティック回帰を用いて信用スコアカードを作成します。各特徴量がスコアに与える影響を、申込者や規制当局に説明できるためです。
- 広告クリック予測:Googleが2013年に発表した本番環境のクリックスルーシステムに関する論文では、ユーザーが広告をクリックする確率を推定するため、モデルをスパースに保つFTRL-Proximalアルゴリズムを使い、ロジスティック回帰をオンライン学習する方法が説明されています。
- 解約予測:サブスクリプション型ビジネスでは、各顧客が次の期間に解約する確率を推定し、リスクが最も高い顧客に継続利用を促す特典を提供します。
ロジスティック回帰と関連手法の比較#
- 0/1ラベルに対する線形回帰:クラスラベルに二乗誤差を当てはめると、予測値が0未満や1を超えることがあります。また、境界から遠い点は、正しく分類されていても適合結果に大きく影響しますが、シグモイド関数と対数損失を使うとこれらを回避できます。
- サポートベクターマシン (SVM):線形SVMも超平面を学習しますが、マージンを最大化するためにヒンジ損失を最小化し、確率の代わりに境界からの距離を出力します。
- ナイーブベイズ:各クラスで特徴量がどのように生じるかをモデル化する生成分類器であり、識別的モデルであるロジスティック回帰と古典的な対をなします。NgとJordan(2001)は、ナイーブベイズは少ない学習サンプルでより高い漸近誤差に近づく一方、データが十分に多くなるとロジスティック回帰の誤差がより低くなることを示しました。
- パーセプトロン:同じ重み付き和にステップ関数を適用し、0または1のみを出力します。学習サンプルを誤分類した場合にのみ重みを更新します。










