Sie Umgang mit einer einzigen Funktion richtig, aber Sie gehen davon aus falsch, dass nur weil 4 an die 0 Klasse Merkmale nahe, dass sie auch als solche vorausgesagt werden würden
Sie Ihre Trainingsdaten dargestellt werden können, zusammen mit die S-förmige Funktion, eine Schwelle von y=0.5
für die Einstufung unter der Annahme, und die gelernten Koeffizienten und fängt von Ihrem Regressionsmodell:
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()
Hier ist, was die S-förmige Funktion wie in Ihrem Fall aussieht:
in etwas Vergrößerte:
Für Ihr spezielles Modell, wird der Wert von X
wenn Y
an der Schwelle 0,5 Klassifizierung ist irgendwo zwischen 3.161
und 3.227
. Sie können dies überprüfen, indem Sie die loss
und X_test
Arrays zu vergleichen (X_test[123]
ist der X-Wert im Zusammenhang mit dem gebundenen Ober - Sie eine Funktion Optimierungsmethode verwenden können einen genauen Wert zu erhalten, wenn Sie möchten)
So ist der Grund, warum 4 wird als Klasse vorhergesagt 1
ist, weil 4 über dem für gebunden ist, wenn Y == 0.5
können Sie dies weiter zeigen, mit den folgenden:
:
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)))
, die aus der folgenden gedruckt werden
2 --> [0]
3 --> [0]
3.1 --> [0] # Below threshold
3.3 --> [1] # Above threshold
4 --> [1]
Ich realisierte das ein wenig später. Aber die Graphen treiben den Punkt nach Hause. :) – rgk