2

scikit-learnLogisticRegressionソルバーを使用する正しい方法は、数値フィーチャが1つだけの場合ですか?1つの数値フィーチャを持つロジスティック回帰

私は説明が難しいとわかった簡単な例を実行しました。誰でも私がここで間違っていることを説明できますか?

import pandas 
import numpy as np 
from sklearn.linear_model import LogisticRegression 

X = [1, 2, 3, 10, 11, 12] 
X = np.reshape(X, (6, 1)) 
Y = [0, 0, 0, 1, 1, 1] 
Y = np.reshape(Y, (6, 1)) 

lr = LogisticRegression() 

lr.fit(X, Y) 
print ("2 --> {0}".format(lr.predict(2))) 
print ("4 --> {0}".format(lr.predict(4))) 

これは、スクリプトの実行が終了したときの出力です。 ガウス分布4によれば、テストセットによれば0に分類されるため、4の予測は0でなければならないか?

2 --> [0] 
4 --> [1] 

数値データを持つ列が1つしかない場合、ロジスティック回帰にはどのようなアプローチがありますか?

答えて

4

あなたは正しく、単一の機能を処理しているが、あなたは間違っ4は、それはまた、

と予測される0クラスの機能に近いという理由だけであなたが一緒にあなたのトレーニングデータをプロットすることができますことを想定しています分類のためのy=0.5のしきい値を想定して、あなたの回帰モデルから学んだの係数及び切片を使用してシグモイド関数、:

import numpy as np 
import matplotlib.pyplot as plt 
from sklearn.linear_model import LogisticRegression 

X = [1, 2, 3, 10, 11, 12] 
X = np.reshape(X, (6, 1)) 
Y = [0, 0, 0, 1, 1, 1] 
Y = np.reshape(Y, (6, 1)) 

lr = LogisticRegression() 
lr.fit(X, Y) 

plt.figure(1, figsize=(4, 3)) 
plt.scatter(X.ravel(), Y, color='black', zorder=20) 

def model(x): 
    return 1/(1 + np.exp(-x)) 

X_test = np.linspace(-5, 15, 300) 
loss = model(X_test * lr.coef_ + lr.intercept_).ravel() 

plt.plot(X_test, loss, color='red', linewidth=3) 
plt.axhline(y=0, color='k', linestyle='-') 
plt.axhline(y=1, color='k', linestyle='-') 
plt.axhline(y=0.5, color='b', linestyle='--') 
plt.axvline(x=X_test[123], color='b', linestyle='--') 

plt.ylabel('y') 
plt.xlabel('X') 
plt.xlim(0, 13) 
plt.show() 

ここでは、シグモイド関数は、あなたの場合は次のようになります。

enter image description hereビットズームイン

:あなたの特定のモデルについて

enter image description here

Y 0.5分類閾値であるXの値はどこか3.1613.227の間です。だから、

4がある理由を - あなたは(あなたがしたい場合は、正確な値を得るために、いくつかの機能の最適化手法を使用することができます X_test[123]が上限に関連付けられたX値) lossX_testの配列を比較することによって、これを確認することができます

print ("2 --> {0}".format(lr.predict(2))) 
print ("3 --> {0}".format(lr.predict(3))) 
print ("3.1 --> {0}".format(lr.predict(3.1))) 
print ("3.3 --> {0}".format(lr.predict(3.3))) 
print ("4 --> {0}".format(lr.predict(4))) 

次をプリントアウトしますどの:クラスと予測されている1 4はY == 0.5

あなたは、さらに次のようにこれを示すことができたときのために結合したことを超えているためである

2 --> [0] 
3 --> [0] 
3.1 --> [0] # Below threshold 
3.3 --> [1] # Above threshold 
4 --> [1] 
+0

これは少し後で分かりました。しかしグラフは本当にポイントを家に追いやる。 :) – rgk

関連する問題