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))
|
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
|
m, n = X.shape
|
||||||
weights = np.zeros(n)
|
weights = np.zeros(n)
|
||||||
|
# 用于Adagrad的累积平方梯度
|
||||||
|
r = np.zeros(n)
|
||||||
|
epsilon = 1e-8
|
||||||
for i in range(iterations):
|
for i in range(iterations):
|
||||||
for j in range(0, m, batch_size):
|
z = np.dot(X, weights)
|
||||||
end = min(j + batch_size, m)
|
h = sigmoid(z)
|
||||||
X_batch = X[j:end]
|
gradient = np.dot(X.T, (h - y)) / m
|
||||||
y_batch = y[j:end]
|
r += gradient ** 2
|
||||||
z = np.dot(X_batch, weights)
|
weights -= learning_rate * gradient / (np.sqrt(r) + epsilon)
|
||||||
h = sigmoid(z)
|
|
||||||
gradient = np.dot(X_batch.T, (h - y_batch)) / len(X_batch)
|
|
||||||
weights -= learning_rate * gradient
|
|
||||||
return weights
|
return weights
|
||||||
|
|
||||||
def predict_logreg(inX, weights):
|
def predict_logreg(inX, weights):
|
||||||
|
|||||||
Reference in New Issue
Block a user