generated from LufsX/Experiment-LogReg
This commit is contained in:
+9
-9
@@ -28,7 +28,7 @@ def sigmoid(z):
|
||||
return 1.0 / (1 + np.exp(-z))
|
||||
|
||||
# 这里写自己的代码实现
|
||||
def train_logreg(X, y, learning_rate=0.01, iterations=1000, batch_size=32):
|
||||
def train_logreg(X, y, learning_rate=0.01, iterations=1000):
|
||||
"""
|
||||
对率回归训练函数。
|
||||
|
||||
@@ -42,15 +42,15 @@ def train_logreg(X, y, learning_rate=0.01, iterations=1000, batch_size=32):
|
||||
"""
|
||||
m, n = X.shape
|
||||
weights = np.zeros(n)
|
||||
# 用于Adagrad的累积平方梯度
|
||||
r = np.zeros(n)
|
||||
epsilon = 1e-8
|
||||
for i in range(iterations):
|
||||
for j in range(0, m, batch_size):
|
||||
end = min(j + batch_size, m)
|
||||
X_batch = X[j:end]
|
||||
y_batch = y[j:end]
|
||||
z = np.dot(X_batch, weights)
|
||||
h = sigmoid(z)
|
||||
gradient = np.dot(X_batch.T, (h - y_batch)) / len(X_batch)
|
||||
weights -= learning_rate * gradient
|
||||
z = np.dot(X, weights)
|
||||
h = sigmoid(z)
|
||||
gradient = np.dot(X.T, (h - y)) / m
|
||||
r += gradient ** 2
|
||||
weights -= learning_rate * gradient / (np.sqrt(r) + epsilon)
|
||||
return weights
|
||||
|
||||
def predict_logreg(inX, weights):
|
||||
|
||||
Reference in New Issue
Block a user