web-dev-qa-db-ja.com

scikit-learnロジスティック回帰を使用した機能の重みの取得

私はこれが少し新しいです。 python scikit-learnでシンプルなロジスティック回帰分類子を使用しています。4つの機能があります。私のコードは

X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2, random_state = 42) 
classifier = LogisticRegression(random_state = 0, C=100)
classifier.fit(X_train, y_train)
coef = classifier.coef_[0]
print (coef)

[-1.07091645 -0.07848958  0.66913624  0.43500273]
  • Coef配列の意味を知りたいですか?
  • これらのcoef *機能を使用してランク付けできますか?
  • これは、最後の2つの機能が結果の分類で最も重要であることを意味しますか?
4
Naufal Khalid

以下の質問にお答えしましたが、質問とコメントに基づいて、ロジスティック回帰についてまだ学習しているようです。高度なデータ分析を推奨できます( http://www.stat.cmu.edu/~cshalizi/ADAfaEPoV/ )。これは、ロジスティック回帰と、統計学習の要素または導入についての素晴らしい章があります。トピックに飛び込むための統計学習教科書へ。

coef配列の意味を知りたいですか?

係数配列は、係数値のリストです。値は、X_trainデータセットの列の順序で並べられます。つまり、-1.07091645はX_trainの最初の列の係数値、-0.07848958は2番目の列の係数値などです。

したがって、コメントからの方程式は次のようになります。

-1.07091645 * f1 + -0.07848958 * f2 + 0.66913624 * f3 + 0.43500273 * f4

これらのcoef *機能を使用してランク付けできますか?

機能の重要度をランク付けしようとしていると思います。質問を誤解した場合は訂正して、それに応じて投稿を編集します。

まず、使用している変数が比較可能であることを確認することが重要です。たとえば、データセットの最初の2つの変数が年齢(年単位)と収入(ドル単位)であるとします。

つまり、年齢が1年増えると結果変数が-1.07091645減少し、収入が1ドル増えると結果が-0.07848958減少します。現在、1年の増加の効果は1ドルの増加よりもかなり高くなっていますが、年齢(1年)の単位増加を収入(1ドル)の単位増加と簡単に比較することはできません。

それでは、この場合、収入よりも年齢の方が重要ですか?言うのが難しい。

これを回避する一般的な方法の1つは、各変数を同じ範囲にスケーリングすることです。このようにして、少なくとも同様のステップ変更を比較します。ただし、スケーリングされた変数の1単位の変化が何に対応するのかわからないため、係数値の解釈がさらに難しくなる可能性があります。

これは、最後の2つの機能が結果の分類で最も重要であることを意味しますか?

いいえ。@ Vivek Kumarがコメントで指摘しているように、absoluteの値を確認する必要があります。したがって、この場合、変数が同等であると感じた場合、重要度の順に、1、3、4、2になります。

ロジックは、最初の変数が負の係数を持っている場合でも、他のすべての変数を一定に保ちながらその変数を変更する効果は、変数2、3、または4のいずれかを変更する効果よりも大きいということです。

9
amanbirs

単純なロジスティック回帰を行っている場合、Yがtrue/false、1/0、yes/no…などであると判断しようとしています。

あなたはこれらの機能Xを持っていると思います。基本的なロジスティック回帰の背後にある数学は、シグモイド関数(別名ロジスティック関数)を使用します。これは、Numpy/Pythonでは次のようになります。

y = 1/(1 + np.exp(-x) )

この場合のxは、機能とcoefの線形結合です。

coeaf[0] + coef[1] * feature[0] + coef[2] * coef[1] # etc.

これが増加すると、ロジスティック関数は1に近づき、減少すると、漸近的に0に近づきます。

係数と特徴をロジスティック関数に接続すると、サンプルが真である確率である数値が出力されます。どの程度正確であるかは、モデル化とデータの適合度によって異なります。ロジスティック回帰の目標は、データに正しく適合し、エラーを最小限に抑えるこれらの係数を見つけることです。ロジスティック関数は確率を出力するため、これを使用して、最も可能性の低いものから最も可能性の高いものへのランク付けを行うことができます。

Numpyを使用している場合は、サンプルXと係数を取得し、これらを次のようにロジスティック方程式に代入できます。

import numpy as np
X = np.array([1, .2 , .1, 1.5]) # one element from your data set
c = np.array([.5, .1, -.7, .2]) # the coefficients that (hopefully) minimize error
z = X @ c.T                     # matrix multiply - linear combination

y = 1/(1 + np.exp(-z)           # logistic function

yは、モデルがこのサンプルXをtrueと考える確率です。

4
Mark Meyer