-
-
Notifications
You must be signed in to change notification settings - Fork 827
/
softmax_regression.ipynb
407 lines (407 loc) · 97.1 KB
/
softmax_regression.ipynb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"hide_input": false
},
"source": [
"## Softmax regression in plain Python\n",
"\n",
"\n",
"Softmax regression, also called multinomial logistic regression extends [logistic regression](logistic_regression.ipynb) to multiple classes.\n",
"\n",
"**Given:** \n",
"- dataset $\\{(\\boldsymbol{x}^{(1)}, y^{(1)}), ..., (\\boldsymbol{x}^{(m)}, y^{(m)})\\}$\n",
"- with $\\boldsymbol{x}^{(i)}$ being a $d-$dimensional vector $\\boldsymbol{x}^{(i)} = (x^{(i)}_1, ..., x^{(i)}_d)$\n",
"- $y^{(i)}$ being the target variable for $\\boldsymbol{x}^{(i)}$, for example with $K = 3$ classes we might have $y^{(i)} \\in \\{0, 1, 2\\}$\n",
"\n",
"A softmax regression model has the following features: \n",
"- a separate real-valued weight vector $\\boldsymbol{w}= (w^{(1)}, ..., w^{(d)})$ for each class. The weight vectors are typically stored as rows in a weight matrix.\n",
"- a separate real-valued bias $b$ for each class\n",
"- the softmax function as an activation function\n",
"- the cross-entropy loss function\n",
"\n",
"The training procedure of a softmax regression model has different steps. In the beginning (step 0) the model parameters are initialized. The other steps (see below) are repeated for a specified number of training iterations or until the parameters have converged.\n",
"\n",
"An illustration of the whole procedure is given below.\n",
"\n",
"![title](figures/softmax_regression.jpg)"
]
},
{
"cell_type": "markdown",
"metadata": {
"hide_input": false
},
"source": [
"* * * \n",
"**Step 0: ** Initialize the weight matrix and bias values with zeros (or small random values).\n",
"* * *\n",
"\n",
"**Step 1: ** For each class $k$ compute a linear combination of the input features and the weight vector of class $k$, that is, for each training example compute a score for each class. For class $k$ and input vector $\\boldsymbol{x}^{(i)}$ we have:\n",
"\n",
"$score_{k}(\\boldsymbol{x}^{(i)}) = \\boldsymbol{w}_{k}^T \\cdot \\boldsymbol{x}^{(i)} + b_{k}$\n",
"\n",
"where $\\cdot$ is the dot product and $\\boldsymbol{w}_{(k)}$ the weight vector of class $k$.\n",
"We can compute the scores for all classes and training examples in parallel, using vectorization and broadcasting:\n",
"\n",
"$\\boldsymbol{scores} = \\boldsymbol{X} \\cdot \\boldsymbol{W}^T + \\boldsymbol{b} $\n",
"\n",
"where $\\boldsymbol{X}$ is a matrix of shape $(n_{samples}, n_{features})$ that holds all training examples, and $\\boldsymbol{W}$ is a matrix of shape $(n_{classes}, n_{features})$ that holds the weight vector for each class. \n",
"* * *\n",
"\n",
"**Step 2: ** Apply the softmax activation function to transform the scores into probabilities. The probability that an input vector $\\boldsymbol{x}^{(i)}$ belongs to class $k$ is given by\n",
"\n",
"$\\hat{p}_k(\\boldsymbol{x}^{(i)}) = \\frac{\\exp(score_{k}(\\boldsymbol{x}^{(i)}))}{\\sum_{j=1}^{K} \\exp(score_{j}(\\boldsymbol{x}^{(i)}))}$\n",
"\n",
"Again we can perform this step for all classes and training examples at once using vectorization. The class predicted by the model for $\\boldsymbol{x}^{(i)}$ is then simply the class with the highest probability.\n",
"* * *\n",
"\n",
"** Step 3: ** Compute the cost over the whole training set. We want our model to predict a high probability for the target class and a low probability for the other classes. This can be achieved using the cross entropy loss function: \n",
"\n",
"$J(\\boldsymbol{W},b) = - \\frac{1}{m} \\sum_{i=1}^m \\sum_{k=1}^{K} \\Big[ y_k^{(i)} \\log(\\hat{p}_k^{(i)})\\Big]$\n",
"\n",
"In this formula, the target labels are *one-hot encoded*. So $y_k^{(i)}$ is $1$ is the target class for $\\boldsymbol{x}^{(i)}$ is k, otherwise $y_k^{(i)}$ is $0$.\n",
"\n",
"Note: when there are only two classes, this cost function is equivalent to the cost function of [logistic regression](logistic_regression.ipynb).\n",
"* * *\n",
"\n",
"** Step 4: ** Compute the gradient of the cost function with respect to each weight vector and bias. A detailed explanation of this derivation can be found [here](http://ufldl.stanford.edu/tutorial/supervised/SoftmaxRegression/).\n",
"\n",
"The general formula for class $k$ is given by:\n",
"\n",
"$ \\nabla_{\\boldsymbol{w}_k} J(\\boldsymbol{W}, b) = \\frac{1}{m}\\sum_{i=1}^m\\boldsymbol{x}^{(i)} \\left[\\hat{p}_k^{(i)}-y_k^{(i)}\\right]$\n",
"\n",
"For the biases, the inputs $\\boldsymbol{x}^{(i)}$ will be given 1.\n",
"* * *\n",
"\n",
"** Step 5: ** Update the weights and biases for each class $k$:\n",
"\n",
"$\\boldsymbol{w}_k = \\boldsymbol{w}_k - \\eta \\, \\nabla_{\\boldsymbol{w}_k} J$ \n",
"\n",
"$b_k = b_k - \\eta \\, \\nabla_{b_k} J$\n",
"\n",
"where $\\eta$ is the learning rate."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2018-03-11T14:25:03.717091Z",
"start_time": "2018-03-11T14:25:03.058714Z"
}
},
"outputs": [],
"source": [
"from sklearn.datasets import load_iris\n",
"import numpy as np\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.datasets import make_blobs\n",
"import matplotlib.pyplot as plt\n",
"np.random.seed(13)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Dataset"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2018-03-11T14:25:04.443874Z",
"start_time": "2018-03-11T14:25:03.939860Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"X, y_true = make_blobs(centers=4, n_samples = 5000)\n",
"\n",
"fig = plt.figure(figsize=(8,6))\n",
"plt.scatter(X[:,0], X[:,1], c=y_true)\n",
"plt.title(\"Dataset\")\n",
"plt.xlabel(\"First feature\")\n",
"plt.ylabel(\"Second feature\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2018-03-11T14:25:28.761719Z",
"start_time": "2018-03-11T14:25:28.749454Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Shape X_train: (3750, 2)\n",
"Shape y_train: (3750, 1)\n",
"Shape X_test: (1250, 2)\n",
"Shape y_test: (1250, 1)\n"
]
}
],
"source": [
"# reshape targets to get column vector with shape (n_samples, 1)\n",
"y_true = y_true[:, np.newaxis]\n",
"# Split the data into a training and test set\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y_true)\n",
"\n",
"print(f'Shape X_train: {X_train.shape}')\n",
"print(f'Shape y_train: {y_train.shape}')\n",
"print(f'Shape X_test: {X_test.shape}')\n",
"print(f'Shape y_test: {y_test.shape}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Softmax regression class"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2018-03-11T14:25:55.797505Z",
"start_time": "2018-03-11T14:25:55.631917Z"
}
},
"outputs": [],
"source": [
"class SoftmaxRegressor:\n",
"\n",
" def __init__(self):\n",
" pass\n",
"\n",
" def train(self, X, y_true, n_classes, n_iters=10, learning_rate=0.1):\n",
" \"\"\"\n",
" Trains a multinomial logistic regression model on given set of training data\n",
" \"\"\"\n",
" self.n_samples, n_features = X.shape\n",
" self.n_classes = n_classes\n",
" \n",
" self.weights = np.random.rand(self.n_classes, n_features)\n",
" self.bias = np.zeros((1, self.n_classes))\n",
" all_losses = []\n",
" \n",
" for i in range(n_iters):\n",
" scores = self.compute_scores(X)\n",
" probs = self.softmax(scores)\n",
" y_predict = np.argmax(probs, axis=1)[:, np.newaxis]\n",
" y_one_hot = self.one_hot(y_true)\n",
"\n",
" loss = self.cross_entropy(y_one_hot, probs)\n",
" all_losses.append(loss)\n",
"\n",
" dw = (1 / self.n_samples) * np.dot(X.T, (probs - y_one_hot))\n",
" db = (1 / self.n_samples) * np.sum(probs - y_one_hot, axis=0)\n",
"\n",
" self.weights = self.weights - learning_rate * dw.T\n",
" self.bias = self.bias - learning_rate * db\n",
"\n",
" if i % 100 == 0:\n",
" print(f'Iteration number: {i}, loss: {np.round(loss, 4)}')\n",
"\n",
" return self.weights, self.bias, all_losses\n",
"\n",
" def predict(self, X):\n",
" \"\"\"\n",
" Predict class labels for samples in X.\n",
" \n",
" Args:\n",
" X: numpy array of shape (n_samples, n_features)\n",
" Returns:\n",
" numpy array of shape (n_samples, 1) with predicted classes\n",
" \"\"\"\n",
" scores = self.compute_scores(X)\n",
" probs = self.softmax(scores)\n",
" return np.argmax(probs, axis=1)[:, np.newaxis]\n",
"\n",
" def softmax(self, scores):\n",
" \"\"\"\n",
" Tranforms matrix of predicted scores to matrix of probabilities\n",
" \n",
" Args:\n",
" scores: numpy array of shape (n_samples, n_classes)\n",
" with unnormalized scores\n",
" Returns:\n",
" softmax: numpy array of shape (n_samples, n_classes)\n",
" with probabilities\n",
" \"\"\"\n",
" exp = np.exp(scores)\n",
" sum_exp = np.sum(np.exp(scores), axis=1, keepdims=True)\n",
" softmax = exp / sum_exp\n",
" \n",
" return softmax\n",
"\n",
" def compute_scores(self, X):\n",
" \"\"\"\n",
" Computes class-scores for samples in X\n",
" \n",
" Args:\n",
" X: numpy array of shape (n_samples, n_features)\n",
" Returns:\n",
" scores: numpy array of shape (n_samples, n_classes)\n",
" \"\"\"\n",
" return np.dot(X, self.weights.T) + self.bias\n",
"\n",
" def cross_entropy(self, y_true, probs):\n",
" loss = - (1 / self.n_samples) * np.sum(y_true * np.log(probs))\n",
" return loss\n",
"\n",
" def one_hot(self, y):\n",
" \"\"\"\n",
" Tranforms vector y of labels to one-hot encoded matrix\n",
" \"\"\"\n",
" one_hot = np.zeros((self.n_samples, self.n_classes))\n",
" one_hot[np.arange(self.n_samples), y.T] = 1\n",
" return one_hot"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Initializing and training the model"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2018-03-11T14:26:10.831690Z",
"start_time": "2018-03-11T14:26:09.195738Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration number: 0, loss: 1.393\n",
"Iteration number: 100, loss: 0.2051\n",
"Iteration number: 200, loss: 0.1605\n",
"Iteration number: 300, loss: 0.1371\n",
"Iteration number: 400, loss: 0.121\n",
"Iteration number: 500, loss: 0.1087\n",
"Iteration number: 600, loss: 0.0989\n",
"Iteration number: 700, loss: 0.0909\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"regressor = SoftmaxRegressor()\n",
"w_trained, b_trained, loss = regressor.train(X_train, y_train, learning_rate=0.1, n_iters=800, n_classes=4)\n",
"\n",
"fig = plt.figure(figsize=(8,6))\n",
"plt.plot(np.arange(800), loss)\n",
"plt.title(\"Development of loss during training\")\n",
"plt.xlabel(\"Number of iterations\")\n",
"plt.ylabel(\"Loss\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Testing the model"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2018-03-11T14:26:32.425096Z",
"start_time": "2018-03-11T14:26:32.419943Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Classification accuracy on test set: 99.03999999999999%\n"
]
}
],
"source": [
"n_test_samples, _ = X_test.shape\n",
"y_predict = regressor.predict(X_test)\n",
"print(f\"Classification accuracy on test set: {(np.sum(y_predict == y_test)/n_test_samples) * 100}%\")"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.9"
},
"toc": {
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}