ロジスティック回帰は、分類問題を解決することです。コードの一部は、YESまたはNOに答えるために必要とされます。メッセージが来たときに、そのようなスパイシーなチキンメールなどのカテゴリーでは、このメッセージがスパムであるかどうかを特定する必要があります。
簡単な例
借りAndrew Ng
言われるために生徒の成績や大学のアプリケーションの例Logistic Regression
アルゴリズムを。あなたは歴史の学生の2つのクラスを持っているし、レコードが入院することになっていると仮定し、あなたが学生の新しいバッチが大学に入学するかどうかを予測する必要があります。ここで次のように一部のデータは次のとおりです。
exam1 | exam2 | 入場料(0:失敗しました。1:渡されました) |
---|---|---|
34.62365962451697 | 78.0246928153624 | 0 |
30.28671076822607 | 43.89499752400101 | 0 |
35.84740876993872 | 72.90219802708364 | 0 |
60.18259938620976 | 86.30855209546826 | 1 |
79.0327360507101 | 75.3443764369103 | 1 |
45.08327747668339 | 56.3163717815305 | 0 |
61.10666453684766 | 96.51142588489624 | 1 |
ここexam1
とexam2
モデルへの入力、すなわちとして得点X
。モデルの出力が許可されるかどうか、すなわちY
、前記
関数を想定
私たちは、関数が前提と定義し、それが認められるかどうかの確率を予測するために、この関数を使用して、。だから我々はことを願っています範囲は[0、1]です。sigmoid
関数は、関数のマッチング度が非常に高いです。以下は、あるsigmoid
イメージの機能:
私たちは、使用されpython
、この機能を達成するために:
import numpy as np
def sigmoid(z):
g = np.zeros(z.size)
g = 1 / (1 + np.exp(-z))
return g
复制代码
私たちは、それは仮定のように定義されます。
我々は作ることができるように定義します:
コスト関数
与えられた定義の後、我々は定義することができます
ときに最適なソリューションのグローバル実行勾配降下を見つけるために、関数が凸関数でなければなりません。だから我々はできるCost
、次のように定義されます:
最終的に得られる勾配降下アルゴリズムは、差動への使用が必要です。
使用してpython
次のように実装:
import numpy as np
from sigmoid import *
def cost_function(theta, X, y):
m = y.size
cost = 0
grad = np.zeros(theta.shape)
item1 = -y * np.log(sigmoid(X.dot(theta)))
item2 = (1 - y) * np.log(1 - sigmoid(X.dot(theta)))
cost = (1 / m) * np.sum(item1 - item2)
grad = (1 / m) * ((sigmoid(X.dot(theta)) - y).dot(X))
return cost, grad
复制代码
私たちは、使用scipy
するアルゴリズムの最適化をある程度行うこと。
import scipy.optimize as opt
def cost_func(t):
return cost_function(t, X, y)[0]
def grad_func(t):
return cost_function(t, X, y)[1]
theta, cost, *unused = opt.fmin_bfgs(f=cost_func, fprime=grad_func,
x0=initial_theta, maxiter=400, full_output=True, disp=False)
复制代码
この方法により、使用する必要がモデルで得ることができます。したがって、モデル訓練良いです。
可視化
観測データとの間に法律を容易にするために、我々はアウトデータを視覚化することができます
def plot_data(X, y):
x1 = X[y == 1]
x2 = X[y == 0]
plt.scatter(x1[:, 0], x1[:, 1], marker='+', label='admitted')
plt.scatter(x2[:, 0], x2[:, 1], marker='.', label='Not admitted')
plt.legend()
def plot_decision_boundary(theta, X, y):
plot_data(X[:, 1:3], y)
# Only need two points to define a line, so choose two endpoints
plot_x = np.array([np.min(X[:, 1]) - 2, np.max(X[:, 1]) + 2])
# Calculate the decision boundary line
plot_y = (-1/theta[2]) * (theta[1]*plot_x + theta[0])
plt.plot(plot_x, plot_y)
plt.legend(['Decision Boundary', 'Admitted', 'Not admitted'], loc=1)
plt.axis([30, 100, 30, 100])
plt.show()
复制代码
効果はこのようなものです:
見通し
計算すると後の進路我々は予測するこれを使用することができますので、あなたが書くことができるpredict
機能を
import numpy as np
from sigmoid import *
def predict(theta, X):
m = X.shape[0]
p = np.zeros(m)
prob = sigmoid(X.dot(theta))
p = prob > 0.5
return p
复制代码
X
確率がより大きい場合、データ、0.5
時間、私たちは、大学のアプリケーションのために予測することができます。
上記のロジスティック回帰アルゴリズムロジスティック回帰の基本的な実現には、あなたの助けのために、この記事ことを期待してMLには非常に基本的な、非常に強力なアルゴリズムです
ます。https://juejin.im/post/5d05def26fb9a07efb69842cで再現