diff --git a/function.py b/function.py index daa5782..c041cc6 100644 --- a/function.py +++ b/function.py @@ -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): +def train_logreg(X, y, learning_rate=0.01, iterations=1000, batch_size=64): """ 对率回归训练函数。 @@ -42,15 +42,15 @@ def train_logreg(X, y, learning_rate=0.01, iterations=1000): """ m, n = X.shape weights = np.zeros(n) - # 用于Adagrad的累积平方梯度 - r = np.zeros(n) - epsilon = 1e-8 for i in range(iterations): - 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) + 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 return weights def predict_logreg(inX, weights):