Skip to content

Commit fd2b35d

Browse files
committed
add doctests to log_likelihood and logistic_reg
1 parent 2245fd9 commit fd2b35d

File tree

1 file changed

+62
-2
lines changed

1 file changed

+62
-2
lines changed

machine_learning/logistic_regression.py

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,72 @@ def cost_function(h: np.ndarray, y: np.ndarray) -> float:
104104

105105

106106
def log_likelihood(x, y, weights):
107+
"""
108+
Compute the logistic-regression log-likelihood:
109+
110+
Parameters:
111+
x (ndarray): shape (n_samples, n_features) feature matrix
112+
y (ndarray): shape (n_samples,) binary labels (0 or 1)
113+
weights (ndarray): shape (n_features,) parameter vector
114+
115+
Examples:
116+
>>> x = np.array([[0, 0, 0]])
117+
>>> y = np.array([0, 0, 0])
118+
>>> w = np.array([0, 0, 0])
119+
>>> log_likelihood(x, y, w)
120+
-2.0794415416798357
121+
122+
>>> x = np.array([[1]])
123+
>>> y = np.array([1])
124+
>>> w = np.array([1])
125+
>>> log_likelihood(x, y, w)
126+
-0.3132616875182228
127+
128+
>>> x = np.zeros((2, 2))
129+
>>> y = np.zeros(2)
130+
>>> w = np.array([1, 2])
131+
>>> log_likelihood(x, y, w)
132+
-1.3862943611198906
133+
"""
107134
scores = np.dot(x, weights)
108135
return np.sum(y * scores - np.log(1 + np.exp(scores)))
109136

110137

111-
# here alpha is the learning rate, X is the feature matrix,y is the target matrix
112138
def logistic_reg(alpha, x, y, max_iterations=70000):
139+
"""
140+
Trains a logistic regression model using gradient descent.
141+
142+
Parameters
143+
----------
144+
alpha : float
145+
Learning rate (step size) for gradient descent updates.
146+
x : ndarray of shape (n_samples, n_features)
147+
Feature matrix where each row corresponds to one training example.
148+
y : ndarray of shape (n_samples,)
149+
Binary target labels (0 or 1) for each training example.
150+
max_iterations : int, optional
151+
Maximum number of gradient descent iterations to perform (default: 70000).
152+
153+
Returns
154+
-------
155+
theta : ndarray of shape (n_features,)
156+
Learned weight vector after optimization.
157+
158+
Examples:
159+
>>> alpha = 0.001
160+
>>> x = np.ones((2, 2))
161+
>>> y = np.ones(2)
162+
>>> logistic_reg(alpha, x, y, max_iterations=0)
163+
array([0., 0.])
164+
165+
>>> alpha = 0
166+
>>> x = np.ones((2, 2))
167+
>>> y = np.ones(2)
168+
>>> theta = logistic_reg(alpha, x, y, max_iterations=1)
169+
loss: 0.6931471805599453
170+
>>> theta
171+
array([0., 0.])
172+
"""
113173
theta = np.zeros(x.shape[1])
114174

115175
for iterations in range(max_iterations):
@@ -121,7 +181,7 @@ def logistic_reg(alpha, x, y, max_iterations=70000):
121181
h = sigmoid_function(z)
122182
j = cost_function(h, y)
123183
if iterations % 100 == 0:
124-
print(f"loss: {j} \t") # printing the loss after every 100 iterations
184+
print(f"loss: {j}") # printing the loss after every 100 iterations
125185
return theta
126186

127187

0 commit comments

Comments
 (0)