1. ホーム
  2. Python

Logistics Regressionにおけるcoef_とintercept_の具体的な意味についてsklearnで解説します。

2022-02-13 03:08:43
<パス

使用方法 sklearn ライブラリを使うと、様々な基本的な機械学習アルゴリズムを簡単に実装することができます。例えば、今日のロジスティック回帰のように、コードに長くとらわれすぎて、実装後にアルゴリズムの基本原理を忘れてしまったかもしれないし、急に coef_ intercept_ は、一般にモデルパラメータを表すことが知られているが、式中のどの文字にあたるかは特定されている。

だから恥ずかしくて、しばらく弄ってやっとわかって、若さをアピールするために文書化しました。

全文

ここでは、sklearnの公式サンプルの1つを例として挙げ、ソースコードを こちら その中から短いスニペットを取り出して、少し変更を加えてみました。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.linear_model import LogisticRegression
	
# Construct some data points
centers = [[-5, 0], [0, 1.5], [5, -1]]
X, y = make_blobs(n_samples=1000, centers=centers, random_state=40)
transformation = [[0.4, 0.2], [-0.4, 1.2]]
X = np.dot(X, transformation)
	
clf = LogisticRegression(solver='sag', max_iter=100, random_state=42, multi_class=multi_class).fit(X, y)

print clf.coef_ 
print clf.intercept_


出力は次のようになります。

ご覧のように clf.coef_ は、3×2 (n_class, n_features) の行列です。 clf.intercept_ は1×3の行列(ベクトル)ですが、これらの本当の意味は何でしょうか?

ロジスティック回帰のモデルをおさらいしておきましょう。
<スパン h θ ( x ) = 1 1 + e ( - θ T x ) h_theta(x) = \frac{1}{1+e^{(-theta^Tx)}}.
<スパン <スパン h <スパン <スパン <スパン <スパン <スパン <スパン θ
<スパン ( x ) = <スパン <スパン <スパン <スパン <スパン <スパン <スパン <スパン <スパン <スパン <スパン 1 <スパン <スパン + e <スパン <スパン <スパン <スパン <スパン <スパン <スパン ( - <スパン θ <スパン <スパン <スパン <スパン <スパン T x ) <スパン <スパン <スパン 1 <スパン
ここで θ \ʕ-̫͡-ʔ <スパン <スパン θ はモデルパラメータであり、実際には θ T x \Ίταμμα <スパン <スパン <スパン θ <スパン <スパン <スパン <スパン <スパン T x は一次式であり、この式の結果は再びロジスティック関数を使って0と1の間にマッピングされる。

これを知ると、あの clf.coef_ clf.intercept_ が持っていた。 clf.coef_ clf.intercept_ <スパン θ \ʕ-̫͡-ʔ <スパン <スパン θ は、ここで検証してみましょう。

i = 100
print 1 / (1 + np.exp(-(np.dot(X[i].reshape(1, -1), cc.T) + clf.intercept_)))
# The correct class
print y[i]
print clf.predict_proba(X[i].reshape(1, -1))
print clf.predict_log_proba(X[i].reshape(1, -1))



出力結果です。

結果は一致し、推測が正しいことがわかります。

終了