Logistics Regressionにおけるcoef_とintercept_の具体的な意味についてsklearnで解説します。
使用方法
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))
出力結果です。
結果は一致し、推測が正しいことがわかります。
終了
関連
-
チェックされていないruntime.lastError: 接続を確立できませんでした。受信側が存在しません。
-
ImportError: Windows の Django でプロジェクトを作成するとき、django.core solution という名前のモジュールがない。
-
Python エラー: int() の引数は文字列、バイトのようなオブジェクト、または数値でなければならず、 'list' ではありません。
-
AttributeError: モジュール 'tensorflow' には 'enable_eager_execution' という属性がない。
-
ImportError を解決します。pandas をインストールした後に 'pandas' という名前のモジュールがない。
-
TypeError: 'dict_keys' オブジェクトはインデックス作成をサポートしていません。
-
TypeError: 'float' オブジェクトが for ループ内で整数として解釈できない どうすればよいですか?
-
Python プロンプト。TypeError: 'NoneType' オブジェクトは呼び出し可能なソリューションではありません。
-
Pythonのjson.loadsで文字列のデコードに失敗しました。ValueError: JSONオブジェクトをデコードできませんでした
-
解決策 UnicodeDecodeError: 'gbk' コーデックは、位置 21804 のバイト 0x8b をデコードできません: 不正なマルチバイト配列です。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonです。pandasのiloc, loc, ixの違いと連携について
-
Python は '' で '__main__' モジュールを見つけることができません。
-
Python3.3継続行のアンダーインデントで、.の後に複数のスペースを入れて視覚的にインデントしています。
-
pip AttributeError: 'module' オブジェクトには 'SSL_ST_INIT' という属性がありません。
-
Pythonインストールモジュールエラー AttributeError: モジュール 'pip' には 'main' という属性がありません。
-
Python による pyserial 経由でのシリアルポートの読み取りと書き込み
-
Python ランタイムエラー, raise notImplementedError
-
Pythonの学習における問題点
-
Selenium issue IOError: [Errno 2] そのようなファイルまたはディレクトリがありません: 'nul'
-
Python Numpy.ndarray ValueError: 代入先が読み取り専用です。