├── LICENSE
├── README.md
└── notebooks
├── Programming Exercise 1 - Linear Regression.ipynb
├── Programming Exercise 2 - Logistic Regression.ipynb
├── Programming Exercise 3 - Multi-class Classification and Neural Networks.ipynb
├── Programming Exercise 4 - Neural Networks Learning.ipynb
├── Programming Exercise 5 - Regularized Linear Regression and Bias v.s. Variance.ipynb
├── Programming Exercise 6 - Support Vector Machines.ipynb
├── Programming Exercise 7 - K-means Clustering and Principal Component Analysis.ipynb
├── Programming Exercise 8 - Anomaly Detection and Recommender Systems.ipynb
└── data
├── bird_small.png
├── ex1data1.txt
├── ex2data1.txt
├── ex2data2.txt
├── ex3data1.mat
├── ex3weights.mat
├── ex4data1.mat
├── ex4weights.mat
├── ex5data1.mat
├── ex6data1.mat
├── ex6data2.mat
├── ex6data3.mat
├── ex7data1.mat
├── ex7data2.mat
├── ex7faces.mat
├── ex8_movies.mat
├── ex8data1.mat
├── ex8data2.mat
└── vocab.txt
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Jordi Warmenhoven
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Coursera Machine Learning
2 | 
3 | This repository contains python implementations of certain exercises from the course by Andrew Ng.
4 |
5 | For a number of assignments in the course you are instructed to create complete, stand-alone Octave/MATLAB implementations of certain algorithms (Linear and Logistic Regression for example). The rest of the assignments depend on additional code provided by the course authors. For most of the code in this repository I have instead used existing Python implementations like Scikit-learn.
6 |
7 | Exercise 1 - Linear Regression
8 | Exercise 2 - Logistic Regression
9 | Exercise 3 - Multi-class Classification and Neural Networks
10 | Exercise 4 - Neural Networks Learning
11 | Exercise 5 - Regularized Linear Regression and Bias v.s. Variance
12 | Exercise 6 - Support Vector Machines
13 | Exercise 7 - K-means Clustering and Principal Component Analysis
14 | Exercise 8 - Anomaly Detection and Recommender Systems
15 |
16 | ##### References:
17 | https://www.coursera.org/learn/machine-learning/home/welcome
18 |
--------------------------------------------------------------------------------
/notebooks/Programming Exercise 3 - Multi-class Classification and Neural Networks.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "## Programming Exercise 3 - Multi-class Classification and Neural Networks"
8 | ]
9 | },
10 | {
11 | "cell_type": "code",
12 | "execution_count": 36,
13 | "metadata": {
14 | "collapsed": false
15 | },
16 | "outputs": [],
17 | "source": [
18 | "# %load ../../standard_import.txt\n",
19 | "import pandas as pd\n",
20 | "import numpy as np\n",
21 | "import matplotlib as mpl\n",
22 | "import matplotlib.pyplot as plt\n",
23 | "\n",
24 | "# load MATLAB files\n",
25 | "from scipy.io import loadmat\n",
26 | "from scipy.optimize import minimize\n",
27 | "\n",
28 | "from sklearn.linear_model import LogisticRegression\n",
29 | "\n",
30 | "pd.set_option('display.notebook_repr_html', False)\n",
31 | "pd.set_option('display.max_columns', None)\n",
32 | "pd.set_option('display.max_rows', 150)\n",
33 | "pd.set_option('display.max_seq_items', None)\n",
34 | " \n",
35 | "#%config InlineBackend.figure_formats = {'pdf',}\n",
36 | "%matplotlib inline\n",
37 | "\n",
38 | "import seaborn as sns\n",
39 | "sns.set_context('notebook')\n",
40 | "sns.set_style('white')"
41 | ]
42 | },
43 | {
44 | "cell_type": "markdown",
45 | "metadata": {},
46 | "source": [
47 | "#### Load MATLAB datafiles"
48 | ]
49 | },
50 | {
51 | "cell_type": "code",
52 | "execution_count": 3,
53 | "metadata": {
54 | "collapsed": false
55 | },
56 | "outputs": [
57 | {
58 | "data": {
59 | "text/plain": [
60 | "dict_keys(['__version__', '__globals__', '__header__', 'y', 'X'])"
61 | ]
62 | },
63 | "execution_count": 3,
64 | "metadata": {},
65 | "output_type": "execute_result"
66 | }
67 | ],
68 | "source": [
69 | "data = loadmat('data/ex3data1.mat')\n",
70 | "data.keys()"
71 | ]
72 | },
73 | {
74 | "cell_type": "code",
75 | "execution_count": 4,
76 | "metadata": {
77 | "collapsed": false
78 | },
79 | "outputs": [
80 | {
81 | "data": {
82 | "text/plain": [
83 | "dict_keys(['__version__', '__globals__', '__header__', 'Theta1', 'Theta2'])"
84 | ]
85 | },
86 | "execution_count": 4,
87 | "metadata": {},
88 | "output_type": "execute_result"
89 | }
90 | ],
91 | "source": [
92 | "weights = loadmat('data/ex3weights.mat')\n",
93 | "weights.keys()"
94 | ]
95 | },
96 | {
97 | "cell_type": "code",
98 | "execution_count": 5,
99 | "metadata": {
100 | "collapsed": false
101 | },
102 | "outputs": [
103 | {
104 | "name": "stdout",
105 | "output_type": "stream",
106 | "text": [
107 | "X: (5000, 401) (with intercept)\n",
108 | "y: (5000, 1)\n"
109 | ]
110 | }
111 | ],
112 | "source": [
113 | "y = data['y']\n",
114 | "# Add constant for intercept\n",
115 | "X = np.c_[np.ones((data['X'].shape[0],1)), data['X']]\n",
116 | "\n",
117 | "print('X: {} (with intercept)'.format(X.shape))\n",
118 | "print('y: {}'.format(y.shape))"
119 | ]
120 | },
121 | {
122 | "cell_type": "code",
123 | "execution_count": 6,
124 | "metadata": {
125 | "collapsed": false
126 | },
127 | "outputs": [
128 | {
129 | "name": "stdout",
130 | "output_type": "stream",
131 | "text": [
132 | "theta1: (25, 401)\n",
133 | "theta2: (10, 26)\n"
134 | ]
135 | }
136 | ],
137 | "source": [
138 | "theta1, theta2 = weights['Theta1'], weights['Theta2']\n",
139 | "\n",
140 | "print('theta1: {}'.format(theta1.shape))\n",
141 | "print('theta2: {}'.format(theta2.shape))"
142 | ]
143 | },
144 | {
145 | "cell_type": "code",
146 | "execution_count": 7,
147 | "metadata": {
148 | "collapsed": false
149 | },
150 | "outputs": [
151 | {
152 | "data": {
153 | "image/png": "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\n6dNcuHCBrKwsCgsLiY+P5/Lly1gsFiIjI5+49hQKBUNDQzQ3N6PVatm9ezc7d+7EZrNJ0b579uwh\nJiaG3t5ezp07F/IpShAEybpVU1NDSkoK5eXlJCQkoFAo8Pl89Pb2cvjwYVQqFS+++OIPCmCDwUBl\nZeUjT7aCIDA1NUVnZyetra3U1tZy5coVRkZGGBwcZOvWrU/0VyoUCiYmJuju7qarqwuTySS97/j4\nOB6PR/I/h4rf76e/v599+/ahVquluSHuRaEwPj7O0aNH6evrQ6VSoVAoUKvVksJrNBqlbz8xMUFX\nVxd6vZ5du3aRnZ0dtAVR9H03NTUxNDTEL37xC2w2G1NTU9TU1NDY2IjdbsdgMLB27VpiYmJC3kf8\nfj+9vb2o1Wp0Oh0Oh4Px8XGMRiNRUVEhtfVd1Go1ZrOZmJgYOjs7/2/5gBUKBRaLhYmJCY4fP45G\no2FqaorDhw/T0tLCmjVrKCsrC2pzV6vV5OXlkZeXR0NDA3q9XtLmExISUKlUs0qH6OnpYWZmhoKC\nAhITEyWBUVdXh8PhIBAIhLQIBgcHuXbtGnfu3JF+z2QyoVKp6Ojo4NatW5IPLSoqioKCAnJzc4Oe\n+GLEZWxsLIsWLcJisTz07j6fj+npaZRKZchKiWjebm9vR6vVfs/05fP5JIUomDERo737+/ul0+N3\nTw8iBoOBRYsWsXPnTn7961/T2tpKamrqYxfa6OgoIyMjbNy4kaysrFkFZzyIKMTOnj3LkSNHMBgM\n7N69G61WS3R0NCaTiZSUFJKSkh4KunnSmHi9XiYmJlAoFBQUFLBkyRIp6CwuLo6Ojg4iIyNJT09n\n/fr1LFu2LOi4ABGPx8P169e5efMmsbGxVFdXk5iYSFNTE5cvX6a4uJjExMSgzM9utxun00lMTAyF\nhYWkpqZKCgGAXq9Hr9cjCAKRkZEhn9ZmZmb49ttv+fLLL+nr62Pbtm3k5uZiNBoJBAIMDg5y8uRJ\nampqWLdu3WNNj1qtltzcXLKzsx8ZOBkIBCgtLWVoaIjc3Fz27dtHY2MjWq2WwsJCMjIyHtt3lUqF\nx+OhpaWFuro6srKypG9nMBjQaDRh70Mej4fW1lZOnz7NO++8w/r168MSvuJ7Tk5O4nK5pAwRjUYj\nxR643W60Wq3Ud7vdjk6nY3p6OqxnTU9PS20qFAru3LnDuXPncDgc0vPDsc4pFAqmpqbo6+tjYGCA\n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\n",
154 | "text/plain": [
155 | ""
156 | ]
157 | },
158 | "metadata": {},
159 | "output_type": "display_data"
160 | }
161 | ],
162 | "source": [
163 | "sample = np.random.choice(X.shape[0], 20)\n",
164 | "plt.imshow(X[sample,1:].reshape(-1,20).T)\n",
165 | "plt.axis('off');"
166 | ]
167 | },
168 | {
169 | "cell_type": "markdown",
170 | "metadata": {},
171 | "source": [
172 | "### Multiclass Classification"
173 | ]
174 | },
175 | {
176 | "cell_type": "markdown",
177 | "metadata": {},
178 | "source": [
179 | "#### Logistic regression hypothesis\n",
180 | "#### $$ h_{\\theta}(x) = g(\\theta^{T}x)$$\n",
181 | "#### $$ g(z)=\\frac{1}{1+e^{−z}} $$"
182 | ]
183 | },
184 | {
185 | "cell_type": "code",
186 | "execution_count": 8,
187 | "metadata": {
188 | "collapsed": true
189 | },
190 | "outputs": [],
191 | "source": [
192 | "def sigmoid(z):\n",
193 | " return(1 / (1 + np.exp(-z)))"
194 | ]
195 | },
196 | {
197 | "cell_type": "markdown",
198 | "metadata": {},
199 | "source": [
200 | "#### Regularized Cost Function \n",
201 | "#### $$ J(\\theta) = \\frac{1}{m}\\sum_{i=1}^{m}\\big[-y^{(i)}\\, log\\,( h_\\theta\\,(x^{(i)}))-(1-y^{(i)})\\,log\\,(1-h_\\theta(x^{(i)}))\\big] + \\frac{\\lambda}{2m}\\sum_{j=1}^{n}\\theta_{j}^{2}$$\n",
202 | "#### Vectorized Cost Function\n",
203 | "#### $$ J(\\theta) = \\frac{1}{m}\\big((\\,log\\,(g(X\\theta))^Ty+(\\,log\\,(1-g(X\\theta))^T(1-y)\\big) + \\frac{\\lambda}{2m}\\sum_{j=1}^{n}\\theta_{j}^{2}$$"
204 | ]
205 | },
206 | {
207 | "cell_type": "code",
208 | "execution_count": 9,
209 | "metadata": {
210 | "collapsed": true
211 | },
212 | "outputs": [],
213 | "source": [
214 | "def lrcostFunctionReg(theta, reg, X, y):\n",
215 | " m = y.size\n",
216 | " h = sigmoid(X.dot(theta))\n",
217 | " \n",
218 | " J = -1*(1/m)*(np.log(h).T.dot(y)+np.log(1-h).T.dot(1-y)) + (reg/(2*m))*np.sum(np.square(theta[1:]))\n",
219 | " \n",
220 | " if np.isnan(J[0]):\n",
221 | " return(np.inf)\n",
222 | " return(J[0]) "
223 | ]
224 | },
225 | {
226 | "cell_type": "code",
227 | "execution_count": 10,
228 | "metadata": {
229 | "collapsed": true
230 | },
231 | "outputs": [],
232 | "source": [
233 | "def lrgradientReg(theta, reg, X,y):\n",
234 | " m = y.size\n",
235 | " h = sigmoid(X.dot(theta.reshape(-1,1)))\n",
236 | " \n",
237 | " grad = (1/m)*X.T.dot(h-y) + (reg/m)*np.r_[[[0]],theta[1:].reshape(-1,1)]\n",
238 | " \n",
239 | " return(grad.flatten())"
240 | ]
241 | },
242 | {
243 | "cell_type": "markdown",
244 | "metadata": {},
245 | "source": [
246 | "#### One-vs-all Classification"
247 | ]
248 | },
249 | {
250 | "cell_type": "code",
251 | "execution_count": 27,
252 | "metadata": {
253 | "collapsed": false
254 | },
255 | "outputs": [],
256 | "source": [
257 | "def oneVsAll(features, classes, n_labels, reg):\n",
258 | " initial_theta = np.zeros((X.shape[1],1)) # 401x1\n",
259 | " all_theta = np.zeros((n_labels, X.shape[1])) #10x401\n",
260 | "\n",
261 | " for c in np.arange(1, n_labels+1):\n",
262 | " res = minimize(lrcostFunctionReg, initial_theta, args=(reg, features, (classes == c)*1), method=None,\n",
263 | " jac=lrgradientReg, options={'maxiter':50})\n",
264 | " all_theta[c-1] = res.x\n",
265 | " return(all_theta)"
266 | ]
267 | },
268 | {
269 | "cell_type": "code",
270 | "execution_count": 12,
271 | "metadata": {
272 | "collapsed": false
273 | },
274 | "outputs": [],
275 | "source": [
276 | "theta = oneVsAll(X, y, 10, 0.1)"
277 | ]
278 | },
279 | {
280 | "cell_type": "markdown",
281 | "metadata": {},
282 | "source": [
283 | "#### One-vs-all Prediction"
284 | ]
285 | },
286 | {
287 | "cell_type": "code",
288 | "execution_count": 25,
289 | "metadata": {
290 | "collapsed": true
291 | },
292 | "outputs": [],
293 | "source": [
294 | "def predictOneVsAll(all_theta, features):\n",
295 | " probs = sigmoid(X.dot(all_theta.T))\n",
296 | " \n",
297 | " # Adding one because Python uses zero based indexing for the 10 columns (0-9),\n",
298 | " # while the 10 classes are numbered from 1 to 10.\n",
299 | " return(np.argmax(probs, axis=1)+1)"
300 | ]
301 | },
302 | {
303 | "cell_type": "code",
304 | "execution_count": 26,
305 | "metadata": {
306 | "collapsed": false
307 | },
308 | "outputs": [
309 | {
310 | "name": "stdout",
311 | "output_type": "stream",
312 | "text": [
313 | "Training set accuracy: 93.17999999999999 %\n"
314 | ]
315 | }
316 | ],
317 | "source": [
318 | "pred = predictOneVsAll(theta, X)\n",
319 | "print('Training set accuracy: {} %'.format(np.mean(pred == y.ravel())*100))"
320 | ]
321 | },
322 | {
323 | "cell_type": "markdown",
324 | "metadata": {},
325 | "source": [
326 | "#### Multiclass Logistic Regression with scikit-learn"
327 | ]
328 | },
329 | {
330 | "cell_type": "code",
331 | "execution_count": 43,
332 | "metadata": {
333 | "collapsed": false
334 | },
335 | "outputs": [
336 | {
337 | "data": {
338 | "text/plain": [
339 | "LogisticRegression(C=10, class_weight=None, dual=False, fit_intercept=True,\n",
340 | " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
341 | " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
342 | " verbose=0, warm_start=False)"
343 | ]
344 | },
345 | "execution_count": 43,
346 | "metadata": {},
347 | "output_type": "execute_result"
348 | }
349 | ],
350 | "source": [
351 | "clf = LogisticRegression(C=10, penalty='l2', solver='liblinear')\n",
352 | "# Scikit-learn fits intercept automatically, so we exclude first column with 'ones' from X when fitting.\n",
353 | "clf.fit(X[:,1:],y.ravel())"
354 | ]
355 | },
356 | {
357 | "cell_type": "code",
358 | "execution_count": 44,
359 | "metadata": {
360 | "collapsed": false
361 | },
362 | "outputs": [
363 | {
364 | "name": "stdout",
365 | "output_type": "stream",
366 | "text": [
367 | "Training set accuracy: 96.5 %\n"
368 | ]
369 | }
370 | ],
371 | "source": [
372 | "pred2 = clf.predict(X[:,1:])\n",
373 | "print('Training set accuracy: {} %'.format(np.mean(pred2 == y.ravel())*100))"
374 | ]
375 | },
376 | {
377 | "cell_type": "markdown",
378 | "metadata": {},
379 | "source": [
380 | "### Neural Networks"
381 | ]
382 | },
383 | {
384 | "cell_type": "code",
385 | "execution_count": 45,
386 | "metadata": {
387 | "collapsed": true
388 | },
389 | "outputs": [],
390 | "source": [
391 | "def predict(theta_1, theta_2, features):\n",
392 | " z2 = theta_1.dot(features.T)\n",
393 | " a2 = np.c_[np.ones((data['X'].shape[0],1)), sigmoid(z2).T]\n",
394 | " \n",
395 | " z3 = a2.dot(theta_2.T)\n",
396 | " a3 = sigmoid(z3)\n",
397 | " \n",
398 | " return(np.argmax(a3, axis=1)+1) "
399 | ]
400 | },
401 | {
402 | "cell_type": "code",
403 | "execution_count": 46,
404 | "metadata": {
405 | "collapsed": false
406 | },
407 | "outputs": [
408 | {
409 | "name": "stdout",
410 | "output_type": "stream",
411 | "text": [
412 | "Training set accuracy: 97.52 %\n"
413 | ]
414 | }
415 | ],
416 | "source": [
417 | "pred = predict(theta1, theta2, X)\n",
418 | "print('Training set accuracy: {} %'.format(np.mean(pred == y.ravel())*100))"
419 | ]
420 | }
421 | ],
422 | "metadata": {
423 | "kernelspec": {
424 | "display_name": "Python 3",
425 | "language": "python",
426 | "name": "python3"
427 | },
428 | "language_info": {
429 | "codemirror_mode": {
430 | "name": "ipython",
431 | "version": 3
432 | },
433 | "file_extension": ".py",
434 | "mimetype": "text/x-python",
435 | "name": "python",
436 | "nbconvert_exporter": "python",
437 | "pygments_lexer": "ipython3",
438 | "version": "3.4.3"
439 | }
440 | },
441 | "nbformat": 4,
442 | "nbformat_minor": 0
443 | }
444 |
--------------------------------------------------------------------------------
/notebooks/Programming Exercise 4 - Neural Networks Learning.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "## Programming Exercise 4 - Neural Networks Learning"
8 | ]
9 | },
10 | {
11 | "cell_type": "code",
12 | "execution_count": 2,
13 | "metadata": {
14 | "collapsed": false
15 | },
16 | "outputs": [],
17 | "source": [
18 | "# %load ../../../standard_import.txt\n",
19 | "import pandas as pd\n",
20 | "import numpy as np\n",
21 | "import matplotlib as mpl\n",
22 | "import matplotlib.pyplot as plt\n",
23 | "\n",
24 | "# load MATLAB files\n",
25 | "from scipy.io import loadmat\n",
26 | "\n",
27 | "pd.set_option('display.notebook_repr_html', False)\n",
28 | "pd.set_option('display.max_columns', None)\n",
29 | "pd.set_option('display.max_rows', 150)\n",
30 | "pd.set_option('display.max_seq_items', None)\n",
31 | " \n",
32 | "#%config InlineBackend.figure_formats = {'pdf',}\n",
33 | "%matplotlib inline\n",
34 | "\n",
35 | "import seaborn as sns\n",
36 | "sns.set_context('notebook')\n",
37 | "sns.set_style('darkgrid')"
38 | ]
39 | },
40 | {
41 | "cell_type": "markdown",
42 | "metadata": {},
43 | "source": [
44 | "#### Load MATLAB datafiles"
45 | ]
46 | },
47 | {
48 | "cell_type": "code",
49 | "execution_count": 3,
50 | "metadata": {
51 | "collapsed": false
52 | },
53 | "outputs": [
54 | {
55 | "data": {
56 | "text/plain": [
57 | "dict_keys(['X', '__header__', 'y', '__globals__', '__version__'])"
58 | ]
59 | },
60 | "execution_count": 3,
61 | "metadata": {},
62 | "output_type": "execute_result"
63 | }
64 | ],
65 | "source": [
66 | "data = loadmat('data/ex4data1.mat')\n",
67 | "data.keys()"
68 | ]
69 | },
70 | {
71 | "cell_type": "code",
72 | "execution_count": 4,
73 | "metadata": {
74 | "collapsed": false
75 | },
76 | "outputs": [
77 | {
78 | "name": "stdout",
79 | "output_type": "stream",
80 | "text": [
81 | "X: (5000, 401) (with intercept)\n",
82 | "y: (5000, 1)\n"
83 | ]
84 | }
85 | ],
86 | "source": [
87 | "y = data['y']\n",
88 | "# Add intercept\n",
89 | "X = np.c_[np.ones((data['X'].shape[0],1)), data['X']]\n",
90 | "\n",
91 | "print('X:',X.shape, '(with intercept)')\n",
92 | "print('y:',y.shape)"
93 | ]
94 | },
95 | {
96 | "cell_type": "code",
97 | "execution_count": 5,
98 | "metadata": {
99 | "collapsed": false
100 | },
101 | "outputs": [
102 | {
103 | "data": {
104 | "text/plain": [
105 | "dict_keys(['Theta2', '__header__', 'Theta1', '__globals__', '__version__'])"
106 | ]
107 | },
108 | "execution_count": 5,
109 | "metadata": {},
110 | "output_type": "execute_result"
111 | }
112 | ],
113 | "source": [
114 | "weights = loadmat('data/ex3weights.mat')\n",
115 | "weights.keys()"
116 | ]
117 | },
118 | {
119 | "cell_type": "code",
120 | "execution_count": 6,
121 | "metadata": {
122 | "collapsed": false
123 | },
124 | "outputs": [
125 | {
126 | "name": "stdout",
127 | "output_type": "stream",
128 | "text": [
129 | "theta1 : (25, 401)\n",
130 | "theta2 : (10, 26)\n",
131 | "params : (10285,)\n"
132 | ]
133 | }
134 | ],
135 | "source": [
136 | "theta1, theta2 = weights['Theta1'], weights['Theta2']\n",
137 | "print('theta1 :', theta1.shape)\n",
138 | "print('theta2 :', theta2.shape)\n",
139 | "params = np.r_[theta1.ravel(), theta2.ravel()]\n",
140 | "print('params :', params.shape)"
141 | ]
142 | },
143 | {
144 | "cell_type": "markdown",
145 | "metadata": {},
146 | "source": [
147 | "#### Neural Network\n",
148 | "Input layer size = 400 (20x20 pixels)
\n",
149 | "Hidden layer size = 25
\n",
150 | "Number of labels = 10"
151 | ]
152 | },
153 | {
154 | "cell_type": "markdown",
155 | "metadata": {},
156 | "source": [
157 | "### Neural Networks - Feed Forward and Cost Function"
158 | ]
159 | },
160 | {
161 | "cell_type": "code",
162 | "execution_count": 7,
163 | "metadata": {
164 | "collapsed": true
165 | },
166 | "outputs": [],
167 | "source": [
168 | "def sigmoid(z):\n",
169 | " return(1 / (1 + np.exp(-z)))"
170 | ]
171 | },
172 | {
173 | "cell_type": "markdown",
174 | "metadata": {},
175 | "source": [
176 | "#### Sigmoid gradient\n",
177 | "#### $$ g'(z) = g(z)(1 - g(z))$$\n",
178 | "where $$ g(z) = \\frac{1}{1+e^{-z}}$$"
179 | ]
180 | },
181 | {
182 | "cell_type": "code",
183 | "execution_count": 8,
184 | "metadata": {
185 | "collapsed": true
186 | },
187 | "outputs": [],
188 | "source": [
189 | "def sigmoidGradient(z):\n",
190 | " return(sigmoid(z)*(1-sigmoid(z)))"
191 | ]
192 | },
193 | {
194 | "cell_type": "markdown",
195 | "metadata": {},
196 | "source": [
197 | "#### Cost Function \n",
198 | "#### $$ J(\\theta) = \\frac{1}{m}\\sum_{i=1}^{m}\\sum_{k=1}^{K}\\big[-y^{(i)}_{k}\\, log\\,(( h_\\theta\\,(x^{(i)}))_k)-(1-y^{(i)}_k)\\,log\\,(1-h_\\theta(x^{(i)}))_k)\\big]$$\n",
199 | "\n",
200 | "#### Regularized Cost Function\n",
201 | "#### $$ J(\\theta) = \\frac{1}{m}\\sum_{i=1}^{m}\\sum_{k=1}^{K}\\bigg[-y^{(i)}_{k}\\, log\\,(( h_\\theta\\,(x^{(i)}))_k)-(1-y^{(i)}_k)\\,log\\,(1-h_\\theta(x^{(i)}))_k)\\bigg] + \\frac{\\lambda}{2m}\\bigg[\\sum_{j=1}^{25}\\sum_{k=1}^{400}(\\Theta_{j,k}^{(1)})^2+\\sum_{j=1}^{10}\\sum_{k=1}^{25}(\\Theta_{j,k}^{(2)})^2\\bigg]$$"
202 | ]
203 | },
204 | {
205 | "cell_type": "code",
206 | "execution_count": 9,
207 | "metadata": {
208 | "collapsed": false
209 | },
210 | "outputs": [],
211 | "source": [
212 | "def nnCostFunction(nn_params, input_layer_size, hidden_layer_size, num_labels, features, classes, reg):\n",
213 | " \n",
214 | " # When comparing to Octave code note that Python uses zero-indexed arrays.\n",
215 | " # But because Numpy indexing does not include the right side, the code is the same anyway.\n",
216 | " theta1 = nn_params[0:(hidden_layer_size*(input_layer_size+1))].reshape(hidden_layer_size,(input_layer_size+1))\n",
217 | " theta2 = nn_params[(hidden_layer_size*(input_layer_size+1)):].reshape(num_labels,(hidden_layer_size+1))\n",
218 | "\n",
219 | " m = features.shape[0]\n",
220 | " y_matrix = pd.get_dummies(classes.ravel()).as_matrix() \n",
221 | " \n",
222 | " # Cost\n",
223 | " a1 = features # 5000x401\n",
224 | " \n",
225 | " z2 = theta1.dot(a1.T) # 25x401 * 401x5000 = 25x5000 \n",
226 | " a2 = np.c_[np.ones((features.shape[0],1)),sigmoid(z2.T)] # 5000x26 \n",
227 | " \n",
228 | " z3 = theta2.dot(a2.T) # 10x26 * 26x5000 = 10x5000 \n",
229 | " a3 = sigmoid(z3) # 10x5000\n",
230 | " \n",
231 | " J = -1*(1/m)*np.sum((np.log(a3.T)*(y_matrix)+np.log(1-a3).T*(1-y_matrix))) + \\\n",
232 | " (reg/(2*m))*(np.sum(np.square(theta1[:,1:])) + np.sum(np.square(theta2[:,1:])))\n",
233 | "\n",
234 | " # Gradients\n",
235 | " d3 = a3.T - y_matrix # 5000x10\n",
236 | " d2 = theta2[:,1:].T.dot(d3.T)*sigmoidGradient(z2) # 25x10 *10x5000 * 25x5000 = 25x5000\n",
237 | " \n",
238 | " delta1 = d2.dot(a1) # 25x5000 * 5000x401 = 25x401\n",
239 | " delta2 = d3.T.dot(a2) # 10x5000 *5000x26 = 10x26\n",
240 | " \n",
241 | " theta1_ = np.c_[np.ones((theta1.shape[0],1)),theta1[:,1:]]\n",
242 | " theta2_ = np.c_[np.ones((theta2.shape[0],1)),theta2[:,1:]]\n",
243 | " \n",
244 | " theta1_grad = delta1/m + (theta1_*reg)/m\n",
245 | " theta2_grad = delta2/m + (theta2_*reg)/m\n",
246 | " \n",
247 | " return(J, theta1_grad, theta2_grad)"
248 | ]
249 | },
250 | {
251 | "cell_type": "code",
252 | "execution_count": 10,
253 | "metadata": {
254 | "collapsed": false
255 | },
256 | "outputs": [
257 | {
258 | "data": {
259 | "text/plain": [
260 | "0.28762916516131892"
261 | ]
262 | },
263 | "execution_count": 10,
264 | "metadata": {},
265 | "output_type": "execute_result"
266 | }
267 | ],
268 | "source": [
269 | "# Regularization parameter = 0\n",
270 | "nnCostFunction(params, 400, 25, 10, X, y, 0)[0]"
271 | ]
272 | },
273 | {
274 | "cell_type": "code",
275 | "execution_count": 11,
276 | "metadata": {
277 | "collapsed": false
278 | },
279 | "outputs": [
280 | {
281 | "data": {
282 | "text/plain": [
283 | "0.38376985909092365"
284 | ]
285 | },
286 | "execution_count": 11,
287 | "metadata": {},
288 | "output_type": "execute_result"
289 | }
290 | ],
291 | "source": [
292 | "# Regularization parameter = 1\n",
293 | "nnCostFunction(params, 400, 25, 10, X, y, 1)[0]"
294 | ]
295 | },
296 | {
297 | "cell_type": "code",
298 | "execution_count": 12,
299 | "metadata": {
300 | "collapsed": false
301 | },
302 | "outputs": [
303 | {
304 | "data": {
305 | "text/plain": [
306 | "[0.19661193324148185,\n",
307 | " 0.23500371220159449,\n",
308 | " 0.25,\n",
309 | " 0.23500371220159449,\n",
310 | " 0.19661193324148185]"
311 | ]
312 | },
313 | "execution_count": 12,
314 | "metadata": {},
315 | "output_type": "execute_result"
316 | }
317 | ],
318 | "source": [
319 | "[sigmoidGradient(z) for z in [-1, -0.5, 0, 0.5, 1]]"
320 | ]
321 | }
322 | ],
323 | "metadata": {
324 | "kernelspec": {
325 | "display_name": "Python 3",
326 | "language": "python",
327 | "name": "python3"
328 | },
329 | "language_info": {
330 | "codemirror_mode": {
331 | "name": "ipython",
332 | "version": 3
333 | },
334 | "file_extension": ".py",
335 | "mimetype": "text/x-python",
336 | "name": "python",
337 | "nbconvert_exporter": "python",
338 | "pygments_lexer": "ipython3",
339 | "version": "3.4.3"
340 | }
341 | },
342 | "nbformat": 4,
343 | "nbformat_minor": 0
344 | }
345 |
--------------------------------------------------------------------------------
/notebooks/Programming Exercise 8 - Anomaly Detection and Recommender Systems.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "## Programming Exercise 8 - Anomaly Detection and Recommender Systems"
8 | ]
9 | },
10 | {
11 | "cell_type": "markdown",
12 | "metadata": {},
13 | "source": [
14 | "- [Anomaly Detection](#Anomaly-Detection)\n",
15 | "- [Recommender Systems](#Recommender-Systems)"
16 | ]
17 | },
18 | {
19 | "cell_type": "code",
20 | "execution_count": 1,
21 | "metadata": {
22 | "collapsed": false
23 | },
24 | "outputs": [],
25 | "source": [
26 | "# %load ../../../standard_import.txt\n",
27 | "import pandas as pd\n",
28 | "import numpy as np\n",
29 | "import matplotlib.pyplot as plt\n",
30 | "\n",
31 | "from scipy.io import loadmat\n",
32 | "from sklearn.svm import OneClassSVM\n",
33 | "from sklearn.covariance import EllipticEnvelope\n",
34 | "\n",
35 | "pd.set_option('display.notebook_repr_html', False)\n",
36 | "pd.set_option('display.max_columns', None)\n",
37 | "pd.set_option('display.max_rows', 150)\n",
38 | "pd.set_option('display.max_seq_items', None)\n",
39 | " \n",
40 | "#%config InlineBackend.figure_formats = {'pdf',}\n",
41 | "%matplotlib inline\n",
42 | "\n",
43 | "import seaborn as sns\n",
44 | "sns.set_context('notebook')\n",
45 | "sns.set_style('white')"
46 | ]
47 | },
48 | {
49 | "cell_type": "markdown",
50 | "metadata": {},
51 | "source": [
52 | "### Anomaly Detection"
53 | ]
54 | },
55 | {
56 | "cell_type": "code",
57 | "execution_count": 2,
58 | "metadata": {
59 | "collapsed": false
60 | },
61 | "outputs": [
62 | {
63 | "data": {
64 | "text/plain": [
65 | "dict_keys(['__header__', 'yval', '__version__', 'Xval', 'X', '__globals__'])"
66 | ]
67 | },
68 | "execution_count": 2,
69 | "metadata": {},
70 | "output_type": "execute_result"
71 | }
72 | ],
73 | "source": [
74 | "data1 = loadmat('data/ex8data1.mat')\n",
75 | "data1.keys()"
76 | ]
77 | },
78 | {
79 | "cell_type": "code",
80 | "execution_count": 3,
81 | "metadata": {
82 | "collapsed": false
83 | },
84 | "outputs": [
85 | {
86 | "name": "stdout",
87 | "output_type": "stream",
88 | "text": [
89 | "X1: (307, 2)\n"
90 | ]
91 | }
92 | ],
93 | "source": [
94 | "X1 = data1['X']\n",
95 | "print('X1:', X1.shape)"
96 | ]
97 | },
98 | {
99 | "cell_type": "code",
100 | "execution_count": 4,
101 | "metadata": {
102 | "collapsed": false
103 | },
104 | "outputs": [
105 | {
106 | "data": {
107 | "image/png": "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\nixZ67bXX1KVLF7Vv314HDx6UJH311Vd67LHH1L59e8XGxurUqVMaNmyYPvjgg4xr9+zZU19++WWW\n8qxdu1ZhYWEqVaqUjh8/ro4dO+q5555TmzZt9Pzzz2vp0qV6/PHH9fDDD+s///mPJGnq1Knq2LGj\nHn30Uc2aNSvjXBEREdTOgatEmAMOtHv3bgUHB2vJkiVKTEzUf//7X23dulWjRo2SJC1dulRJSUl6\n5ZVXNG/ePK1YsUL333+/XnrppYxzVK5cWcuWLVNMTIzefPNNSdLQoUPVr18/rV27VpGRkZo/f746\nd+6sNWvWSJKOHz+un3/+WY0aNcpSnk2bNmVsiylJhw8fVr9+/ZSQkKB9+/bpxIkTWrJkiR5++GF9\n8MEHOnHihLZt26ZVq1ZpyZIlOnr0qFwulySpadOm2rRpk0+/P6C4KbJrswPIWdOmTVWxYkUtWrRI\n33zzjY4ePZqxy6CnWf7LL7/UyZMn1bNnT7ndbqWnp6tixYoZ53jggQckSXXq1NH69ev1888/68yZ\nM3rwwQclKWNfBEk6c+aMTpw4odWrV6tDhw5XlOe7775T9erVM55XrVpV9erVkyRdf/31uueeeyRJ\nNWrU0M6dO1W9enVdc8016tq1qx566CENHDhQwcHBGZ/57rvvCuy7AkoCwhxwoI0bN2rmzJnq3bu3\nOnXqpJ9//vmKz6SlpalJkyZ64403JFm/duZthcuUKSPJwt/tdqt06dJZjne5XDp16pRq1aqljh07\nKj4+Xv/4xz/09ttvX3GtgICALPuKX36uoKCs/6kJDAzUBx98oF27dmnLli167LHHtGjRIoWGhioo\nKIgNf4CrxP9jgCIuu72Qtm/frocfflgdO3ZU5cqVtWvXLqWlpUmSSpUqpfT0dN1xxx3as2ePvv32\nW0nS7NmzNW3atByvExISohtuuEHbt2+XJK1atUozZ86UJEVHR2vJkiW64YYbst0mNzQ0VCdOnPjV\nMmf21VdfqUePHrr77rs1bNgw3Xrrrfrmm28kSceOHdNNN930q8cDyIqaOVDEffHFF2rcuLHcbrcC\nAgL0yCOPqHv37ho8eLD+8Y9/KDg4WHfeeaeOHTsmyQa3dejQQcuXL9ekSZM0cOBApaenq3r16po+\nfbqknEfIT5s2TePGjdO0adNUqVKljPCvXr26qlevnrHX8uWaN2+uTz/9VM2aNbvi/Nld6/bbb9ed\nd96pyMhIlS1bVvXr11d4eLgkaceOHWrZsmU+vy2gZGILVAC5OnXqlHr27Kn4+PgrmtAla5Lv1q2b\nli5dmqW5PT+6deumWbNmqXLlyr/pPEBJQjM7gF+VkJCg6OhoDRkyJNsgl6Tg4GD17dtX77///m++\nVtu2bQly4CpRMwcAwOGomQMA4HCEOQAADkeYAwDgcIQ5AAAOR5gDAOBwhDkAAA73/wGAt2CUVd7j\ncgAAAABJRU5ErkJggg==\n",
108 | "text/plain": [
109 | ""
110 | ]
111 | },
112 | "metadata": {},
113 | "output_type": "display_data"
114 | }
115 | ],
116 | "source": [
117 | "plt.scatter(X1[:,0], X1[:,1], c='b', marker='x')\n",
118 | "plt.title(\"Outlier detection\")\n",
119 | "plt.xlabel('Latency (ms)')\n",
120 | "plt.ylabel('Throughput (mb/s)');"
121 | ]
122 | },
123 | {
124 | "cell_type": "code",
125 | "execution_count": 5,
126 | "metadata": {
127 | "collapsed": false
128 | },
129 | "outputs": [
130 | {
131 | "data": {
132 | "text/plain": [
133 | "EllipticEnvelope(assume_centered=False, contamination=0.1, random_state=None,\n",
134 | " store_precision=True, support_fraction=None)"
135 | ]
136 | },
137 | "execution_count": 5,
138 | "metadata": {},
139 | "output_type": "execute_result"
140 | }
141 | ],
142 | "source": [
143 | "clf = EllipticEnvelope()\n",
144 | "clf.fit(X1)"
145 | ]
146 | },
147 | {
148 | "cell_type": "code",
149 | "execution_count": 6,
150 | "metadata": {
151 | "collapsed": false
152 | },
153 | "outputs": [
154 | {
155 | "data": {
156 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzAAAAFRCAYAAACrP0jNAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4U2X7wPFv0jSle0Gh7FVkiCgiiNIyi2ypMsoooLz6\n+r6CLJUpQ4QyZMlQ0J+ogOxdeQULgsiUKkhBhgwZBUrpHjRtk98fh6QNbWmBtknK/bmuXvTkjNwn\nKTnnzvPcz6MyGAwGhBBCCCGEEMIGqC0dgBBCCCGEEEIUliQwQgghhBBCCJshCYwQQgghhBDCZkgC\nI4QQQgghhLAZksAIIYQQQgghbIYkMEIIIYQQQgib8cQkMNevX6d+/foEBQURFBREt27deP3119my\nZYtpm88++4ytW7c+8DiLFy9mz549ea7LuX/dunWJj49/qBhPnjzJpEmTAIiMjGTYsGEPtf+j0Ov1\n/Oc//6FDhw6sWrXKbN3mzZtp0qQJQUFBdO/e3fQzZswYAMaOHcvy5cuB7PPds2cP06ZNK/B5P/ro\nI06fPg3AhAkTOHToUKFjXrRoEc2bNzeLKygoiLlz5xb6GIW1efNm3nnnnSI/bkG+/vprxo4d+8j7\nBwUFkZycnO/6wr5PhfX555/TunVrxo0bV2THBEhOTmbgwIGm5YLOqzhdv36d5557ziLPLYSwHqtX\nr+bVV1+lS5cudO3aldGjR3Pjxo1C7Zvz2hcSEsKuXbuIjo6mT58+RRpjYa8hD7qnKYz169ezevVq\nANasWcOXX375yMcS4mFoLB1ASSpTpgybN282LUdFRTFo0CCcnZ0JDAzkvffeK/AYhw8fxs/PL891\nOfdXqVQPHd/58+e5desWAE8//TQLFix46GM8rJs3b3Lw4EGOHz+eZ8xNmjThiy++KPA4xn3btGlD\nmzZtCtz+wIEDBAcHA/DJJ588ZNTQuXNnJkyY8ND7PSly/p3npbDvU2Ft3LiROXPm0Lhx4yI7JkB8\nfDwnT540LRd0XsXtUf5fCyFKj5kzZ3Lu3DmWLVtG+fLlAdiyZQu9e/dm/fr1psfyk/PaZ+Tj42NK\nAkrag+5pCuP333+nTp06ALnOS4ji9EQlMPerWLEi7733Hv/3f/9HYGAgY8eOpU6dOrzxxht89tln\n7N69G3t7ezw8PAgNDWXXrl1ERkYya9Ys1Go1u3fvJj4+nmvXrtGqVStiYmJM+xsMBubOnUtkZCQG\ng4Fhw4bRqlUrNm/ezM6dO01JgXF58uTJLFy4kOTkZMaNG0f37t2ZOnUq27dvJzk5mSlTpnDmzBlU\nKhX+/v6MGjUKtVrNM888w9tvv82BAwe4ffs2ISEhZt9YGx07dozZs2dz9+5d7O3tGTZsGI0bN+at\nt94iMzOT1157jc8++4wqVao80mtpnA815/mFhIRQu3ZtIiMjiY+P59VXX2XIkCHMmzeP6Oho3n//\nfWbOnMns2bMJCQmhffv2/PzzzyxYsACDwYCjoyOTJ0+mbt26DxVLSEgIzz33HL///jtRUVG88MIL\nzJgxg/nz55OcnMxHH30EwP79+1m4cCHr1q3j999/Z86cOaSlpaFWqxk6dCgtW7Y0O+6tW7eYNGkS\n169fB6B79+4MHjyY69evExISQtOmTTlz5gygtCo1adIEgC+++IJdu3ZhMBioVKkSkyZNoly5cmbH\nzszMZOrUqRw6dAhvb2+8vb1xdXUFlFaIadOmce7cOTIzM2nevDkffvgharWaEydOMG3aNNLS0rC3\nt2f06NE0a9aMunXrcvjwYTIzMxk9ejRxcXEAtGrVivfee8/sfXrQeQ0aNIiWLVty4sQJEhMTGT58\nOB07djSLfcSIEdy8eZPx48czdOhQVq9ebXo/je+HcflBf69Lly5ly5YtaDQaqlevTmhoKOPGjePu\n3bsEBQWxceNG6tevz+HDh/Hw8GDx4sXs2LHDtP3EiRPx9vbO9f43adKEWbNmmcV8+fJlgoOD+fXX\nX9FoNOj1elq3bs3XX39NUlISn376KRkZGdy+fZuXXnopV5K9aNEi4uPjTUl0zuUHvV/3f67MmDGD\nsmXLPtTftxDCMm7dusWaNWvYv38/Li4upse7d+/OqVOnWLZsGR999BFt2rRh4cKFNGjQAMC0bGxt\nMV77jK5fv06XLl34448/gPyvGSEhIXh4eHDp0iX69OlDv379TMd42GvIBx98wJo1a8zuaVq2bMmn\nn37Kb7/9hl6vp169ekyYMAFnZ2cuX77MxIkTiY2NRa1W884776DVatmzZw8HDx7EwcGB2NhY4uLi\n+Oijjzh//jxTp04lPj4etVrNoEGD6N69O0ePHmXevHlUqVKF8+fPk5GRwcSJE2natGlJvIWiFHli\nupDlp27dupw9e9bssZs3b/Ldd9+xYcMGNmzYQIsWLfjzzz/p168fTz/9NKNHj6Zdu3YApKens337\n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\nENOnT2/WcUaOHImdO3eiqKiohSIjujomMERERERuYrFY8NJLLyExMRHx8fH405/+hIqKCrz66qsA\ngGnTpgEAvv32WyQkJOD+++/HX//6V5SUlAAARowYgb///e9ISEjA+PHjceLECQDAyZMnMXXqVIwf\nPx6zZs1CXl4eFixYgA0bNjhue/bs2fj111+d4vnqq69w8803Q6lUIisrCxMnTsSTTz6J0aNHY968\neVi/fj0SExMxduxYnDt3DgDw+uuvY+LEibj//vuxcuVKx7FGjRrFKgy5BRMYIiIiIjc5cuQINBoN\nkpOTsXPnThiNRnz77bd48cUXAQDr169HUVER3nrrLfz73//Gpk2bcMcdd+CNN95wHCMsLAyfffYZ\npk2bhvfffx8AMH/+fDz++OP46quvMG7cOKxZswZTpkzBl19+CQDIyspCcXExbrzxRqd4du/ejSFD\nhjhOnz59Go8//jh27NiBY8eOITs7G8nJyRg7diw2bNiA7OxsfPfdd/jiiy+QnJyMjIwMmEwmAMCQ\nIUOwe/dulz5+RACgkjsAIiIiIm8xZMgQhISEYN26dTh//jwyMjJgMBgAVC85+/XXX5GTk4PZs2fD\nZrPBarUiJCTEcYw777wTAHD99ddj165dKC4uRkFBAe666y4AQGJiouOyBQUFyM7OxpYtW3Dfffdd\nEc+FCxcQHR3tOB0REYFevXoBAKKionDrrbcCAGJiYnDw4EFER0fD19cX06dPx/Dhw/H0009Do9E4\nLnPhwoUWe6yIroYJDBEREZGbfPPNN3jvvffw0EMPYfLkySguLr7iMhaLBYMHD8bq1asBiD4Ve5ID\nAD4+PgBEwmOz2aBWq52ubzKZkJeXh06dOmHixInYunUrtm/fjn/9619X3JYkSVAqlY7TtY+lUjm/\nVVQoFNiwYQMOHTqEffv2YerUqVi3bh1iY2OhUqmgUHBxD7ken2VERERELmCz2a4478CBAxg7diwm\nTpyIsLAwHDp0CBaLBQCgVCphtVrRv39/HD16FOnp6QCAVatWYcWKFVe9Ha1Wi/bt2+PAgQMAgC++\n+ALvvfceAGDSpElITk5G+/btERERccV1Y2NjkZ2dfc2Yazp58iRmzpyJm266CQsWLMB1112H8+fP\nAwAyMzPRuXPna16fqCWwAkNERETkAr/88gsGDRoEm80GSZIwYcIEPPDAA5g7dy62b98OjUaDAQMG\nIDMzE4Bo0L/vvvvw+eefY/ny5Xj66adhtVoRHR2NN998E8DVJ5utWLECS5YswYoVKxAaGupIeKKj\noxEdHY1JkybVeb1hw4bhxx9/RFxc3BXHr+u2evfujQEDBmDcuHHw8/NDnz59MHToUADATz/9hLvv\nvruJjxZRw0m2+lJtIiIiIvJIeXl5mD17NrZu3XrF8jBALDebMWMG1q9f77SUrClmzJiBlStXIiws\nrFnHIaoPl5ARERERtUE7duzApEmT8Mwzz9SZvACARqPBY489hk8//bTZtzVmzBgmL+QWrMAQERER\nEZHHYAWGiIiIiIg8BhMYIiIiIiLyGExgiIiIiIjIYzCBISIiIiIij8EEhoiIiIiIPAYTGCIiIiIi\n8hj/H9YuPZWjlvWJAAAAAElFTkSuQmCC\n",
157 | "text/plain": [
158 | ""
159 | ]
160 | },
161 | "metadata": {},
162 | "output_type": "display_data"
163 | }
164 | ],
165 | "source": [
166 | "# Create the grid for plotting\n",
167 | "xx, yy = np.meshgrid(np.linspace(0, 25, 200), np.linspace(0, 30, 200))\n",
168 | "Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])\n",
169 | "Z = Z.reshape(xx.shape)\n",
170 | "\n",
171 | "# Calculate the decision function and use threshold to determine outliers\n",
172 | "y_pred = clf.decision_function(X1).ravel()\n",
173 | "percentile = 1.9\n",
174 | "threshold = np.percentile(y_pred, percentile)\n",
175 | "outliers = y_pred < threshold\n",
176 | "\n",
177 | "fig, (ax1, ax2) = plt.subplots(1,2, figsize=(14,5))\n",
178 | "\n",
179 | "# Left plot\n",
180 | "# Plot the decision function values\n",
181 | "sns.distplot(y_pred, rug=True, ax=ax1)\n",
182 | "# Plot the decision function values for the outliers in red\n",
183 | "sns.distplot(y_pred[outliers], rug=True, hist=False, kde=False, norm_hist=True, color='r', ax=ax1)\n",
184 | "ax1.vlines(threshold, 0, 0.9, colors='r', linestyles='dotted',\n",
185 | " label='Threshold for {} percentile = {}'.format(percentile, np.round(threshold, 2)))\n",
186 | "ax1.set_title('Distribution of Elliptic Envelope decision function values');\n",
187 | "ax1.legend(loc='best')\n",
188 | "\n",
189 | "# Right plot\n",
190 | "# Plot the observations\n",
191 | "ax2.scatter(X1[:,0], X1[:,1], c='b', marker='x')\n",
192 | "# Plot outliers\n",
193 | "ax2.scatter(X1[outliers][:,0], X1[outliers][:,1], c='r', marker='x', linewidths=2)\n",
194 | "# Plot decision boundary based on threshold\n",
195 | "ax2.contour(xx, yy, Z, levels=[threshold], linewidths=2, colors='red', linestyles='dotted')\n",
196 | "ax2.set_title(\"Outlier detection\")\n",
197 | "ax2.set_xlabel('Latency (ms)')\n",
198 | "ax2.set_ylabel('Throughput (mb/s)');"
199 | ]
200 | },
201 | {
202 | "cell_type": "markdown",
203 | "metadata": {
204 | "collapsed": true
205 | },
206 | "source": [
207 | "### Recommender Systems"
208 | ]
209 | },
210 | {
211 | "cell_type": "code",
212 | "execution_count": 7,
213 | "metadata": {
214 | "collapsed": false
215 | },
216 | "outputs": [
217 | {
218 | "data": {
219 | "text/plain": [
220 | "dict_keys(['__header__', '__globals__', 'R', 'Y', '__version__'])"
221 | ]
222 | },
223 | "execution_count": 7,
224 | "metadata": {},
225 | "output_type": "execute_result"
226 | }
227 | ],
228 | "source": [
229 | "data2 = loadmat('data/ex8_movies.mat')\n",
230 | "data2.keys()"
231 | ]
232 | },
233 | {
234 | "cell_type": "code",
235 | "execution_count": 8,
236 | "metadata": {
237 | "collapsed": false
238 | },
239 | "outputs": [
240 | {
241 | "name": "stdout",
242 | "output_type": "stream",
243 | "text": [
244 | "Y: (1682, 943)\n",
245 | "R: (1682, 943)\n"
246 | ]
247 | }
248 | ],
249 | "source": [
250 | "Y = data2['Y']\n",
251 | "R = data2['R']\n",
252 | "print('Y:', Y.shape)\n",
253 | "print('R:', R.shape)"
254 | ]
255 | },
256 | {
257 | "cell_type": "code",
258 | "execution_count": 9,
259 | "metadata": {
260 | "collapsed": false
261 | },
262 | "outputs": [
263 | {
264 | "data": {
265 | "text/plain": [
266 | "array([[5, 4, 0, ..., 5, 0, 0],\n",
267 | " [3, 0, 0, ..., 0, 0, 5],\n",
268 | " [4, 0, 0, ..., 0, 0, 0],\n",
269 | " ..., \n",
270 | " [0, 0, 0, ..., 0, 0, 0],\n",
271 | " [0, 0, 0, ..., 0, 0, 0],\n",
272 | " [0, 0, 0, ..., 0, 0, 0]], dtype=uint8)"
273 | ]
274 | },
275 | "execution_count": 9,
276 | "metadata": {},
277 | "output_type": "execute_result"
278 | }
279 | ],
280 | "source": [
281 | "Y"
282 | ]
283 | },
284 | {
285 | "cell_type": "code",
286 | "execution_count": 10,
287 | "metadata": {
288 | "collapsed": false
289 | },
290 | "outputs": [
291 | {
292 | "data": {
293 | "text/plain": [
294 | "array([[1, 1, 0, ..., 1, 0, 0],\n",
295 | " [1, 0, 0, ..., 0, 0, 1],\n",
296 | " [1, 0, 0, ..., 0, 0, 0],\n",
297 | " ..., \n",
298 | " [0, 0, 0, ..., 0, 0, 0],\n",
299 | " [0, 0, 0, ..., 0, 0, 0],\n",
300 | " [0, 0, 0, ..., 0, 0, 0]], dtype=uint8)"
301 | ]
302 | },
303 | "execution_count": 10,
304 | "metadata": {},
305 | "output_type": "execute_result"
306 | }
307 | ],
308 | "source": [
309 | "R"
310 | ]
311 | },
312 | {
313 | "cell_type": "code",
314 | "execution_count": 11,
315 | "metadata": {
316 | "collapsed": false
317 | },
318 | "outputs": [
319 | {
320 | "data": {
321 | "image/png": "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\n",
322 | "text/plain": [
323 | ""
324 | ]
325 | },
326 | "metadata": {},
327 | "output_type": "display_data"
328 | }
329 | ],
330 | "source": [
331 | "sns.heatmap(Y, yticklabels=False, xticklabels=False);"
332 | ]
333 | }
334 | ],
335 | "metadata": {
336 | "kernelspec": {
337 | "display_name": "Python 3",
338 | "language": "python",
339 | "name": "python3"
340 | },
341 | "language_info": {
342 | "codemirror_mode": {
343 | "name": "ipython",
344 | "version": 3
345 | },
346 | "file_extension": ".py",
347 | "mimetype": "text/x-python",
348 | "name": "python",
349 | "nbconvert_exporter": "python",
350 | "pygments_lexer": "ipython3",
351 | "version": "3.5.1"
352 | }
353 | },
354 | "nbformat": 4,
355 | "nbformat_minor": 0
356 | }
357 |
--------------------------------------------------------------------------------
/notebooks/data/bird_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/bird_small.png
--------------------------------------------------------------------------------
/notebooks/data/ex1data1.txt:
--------------------------------------------------------------------------------
1 | 6.1101,17.592
2 | 5.5277,9.1302
3 | 8.5186,13.662
4 | 7.0032,11.854
5 | 5.8598,6.8233
6 | 8.3829,11.886
7 | 7.4764,4.3483
8 | 8.5781,12
9 | 6.4862,6.5987
10 | 5.0546,3.8166
11 | 5.7107,3.2522
12 | 14.164,15.505
13 | 5.734,3.1551
14 | 8.4084,7.2258
15 | 5.6407,0.71618
16 | 5.3794,3.5129
17 | 6.3654,5.3048
18 | 5.1301,0.56077
19 | 6.4296,3.6518
20 | 7.0708,5.3893
21 | 6.1891,3.1386
22 | 20.27,21.767
23 | 5.4901,4.263
24 | 6.3261,5.1875
25 | 5.5649,3.0825
26 | 18.945,22.638
27 | 12.828,13.501
28 | 10.957,7.0467
29 | 13.176,14.692
30 | 22.203,24.147
31 | 5.2524,-1.22
32 | 6.5894,5.9966
33 | 9.2482,12.134
34 | 5.8918,1.8495
35 | 8.2111,6.5426
36 | 7.9334,4.5623
37 | 8.0959,4.1164
38 | 5.6063,3.3928
39 | 12.836,10.117
40 | 6.3534,5.4974
41 | 5.4069,0.55657
42 | 6.8825,3.9115
43 | 11.708,5.3854
44 | 5.7737,2.4406
45 | 7.8247,6.7318
46 | 7.0931,1.0463
47 | 5.0702,5.1337
48 | 5.8014,1.844
49 | 11.7,8.0043
50 | 5.5416,1.0179
51 | 7.5402,6.7504
52 | 5.3077,1.8396
53 | 7.4239,4.2885
54 | 7.6031,4.9981
55 | 6.3328,1.4233
56 | 6.3589,-1.4211
57 | 6.2742,2.4756
58 | 5.6397,4.6042
59 | 9.3102,3.9624
60 | 9.4536,5.4141
61 | 8.8254,5.1694
62 | 5.1793,-0.74279
63 | 21.279,17.929
64 | 14.908,12.054
65 | 18.959,17.054
66 | 7.2182,4.8852
67 | 8.2951,5.7442
68 | 10.236,7.7754
69 | 5.4994,1.0173
70 | 20.341,20.992
71 | 10.136,6.6799
72 | 7.3345,4.0259
73 | 6.0062,1.2784
74 | 7.2259,3.3411
75 | 5.0269,-2.6807
76 | 6.5479,0.29678
77 | 7.5386,3.8845
78 | 5.0365,5.7014
79 | 10.274,6.7526
80 | 5.1077,2.0576
81 | 5.7292,0.47953
82 | 5.1884,0.20421
83 | 6.3557,0.67861
84 | 9.7687,7.5435
85 | 6.5159,5.3436
86 | 8.5172,4.2415
87 | 9.1802,6.7981
88 | 6.002,0.92695
89 | 5.5204,0.152
90 | 5.0594,2.8214
91 | 5.7077,1.8451
92 | 7.6366,4.2959
93 | 5.8707,7.2029
94 | 5.3054,1.9869
95 | 8.2934,0.14454
96 | 13.394,9.0551
97 | 5.4369,0.61705
98 |
--------------------------------------------------------------------------------
/notebooks/data/ex2data1.txt:
--------------------------------------------------------------------------------
1 | 34.62365962451697,78.0246928153624,0
2 | 30.28671076822607,43.89499752400101,0
3 | 35.84740876993872,72.90219802708364,0
4 | 60.18259938620976,86.30855209546826,1
5 | 79.0327360507101,75.3443764369103,1
6 | 45.08327747668339,56.3163717815305,0
7 | 61.10666453684766,96.51142588489624,1
8 | 75.02474556738889,46.55401354116538,1
9 | 76.09878670226257,87.42056971926803,1
10 | 84.43281996120035,43.53339331072109,1
11 | 95.86155507093572,38.22527805795094,0
12 | 75.01365838958247,30.60326323428011,0
13 | 82.30705337399482,76.48196330235604,1
14 | 69.36458875970939,97.71869196188608,1
15 | 39.53833914367223,76.03681085115882,0
16 | 53.9710521485623,89.20735013750205,1
17 | 69.07014406283025,52.74046973016765,1
18 | 67.94685547711617,46.67857410673128,0
19 | 70.66150955499435,92.92713789364831,1
20 | 76.97878372747498,47.57596364975532,1
21 | 67.37202754570876,42.83843832029179,0
22 | 89.67677575072079,65.79936592745237,1
23 | 50.534788289883,48.85581152764205,0
24 | 34.21206097786789,44.20952859866288,0
25 | 77.9240914545704,68.9723599933059,1
26 | 62.27101367004632,69.95445795447587,1
27 | 80.1901807509566,44.82162893218353,1
28 | 93.114388797442,38.80067033713209,0
29 | 61.83020602312595,50.25610789244621,0
30 | 38.78580379679423,64.99568095539578,0
31 | 61.379289447425,72.80788731317097,1
32 | 85.40451939411645,57.05198397627122,1
33 | 52.10797973193984,63.12762376881715,0
34 | 52.04540476831827,69.43286012045222,1
35 | 40.23689373545111,71.16774802184875,0
36 | 54.63510555424817,52.21388588061123,0
37 | 33.91550010906887,98.86943574220611,0
38 | 64.17698887494485,80.90806058670817,1
39 | 74.78925295941542,41.57341522824434,0
40 | 34.1836400264419,75.2377203360134,0
41 | 83.90239366249155,56.30804621605327,1
42 | 51.54772026906181,46.85629026349976,0
43 | 94.44336776917852,65.56892160559052,1
44 | 82.36875375713919,40.61825515970618,0
45 | 51.04775177128865,45.82270145776001,0
46 | 62.22267576120188,52.06099194836679,0
47 | 77.19303492601364,70.45820000180959,1
48 | 97.77159928000232,86.7278223300282,1
49 | 62.07306379667647,96.76882412413983,1
50 | 91.56497449807442,88.69629254546599,1
51 | 79.94481794066932,74.16311935043758,1
52 | 99.2725269292572,60.99903099844988,1
53 | 90.54671411399852,43.39060180650027,1
54 | 34.52451385320009,60.39634245837173,0
55 | 50.2864961189907,49.80453881323059,0
56 | 49.58667721632031,59.80895099453265,0
57 | 97.64563396007767,68.86157272420604,1
58 | 32.57720016809309,95.59854761387875,0
59 | 74.24869136721598,69.82457122657193,1
60 | 71.79646205863379,78.45356224515052,1
61 | 75.3956114656803,85.75993667331619,1
62 | 35.28611281526193,47.02051394723416,0
63 | 56.25381749711624,39.26147251058019,0
64 | 30.05882244669796,49.59297386723685,0
65 | 44.66826172480893,66.45008614558913,0
66 | 66.56089447242954,41.09209807936973,0
67 | 40.45755098375164,97.53518548909936,1
68 | 49.07256321908844,51.88321182073966,0
69 | 80.27957401466998,92.11606081344084,1
70 | 66.74671856944039,60.99139402740988,1
71 | 32.72283304060323,43.30717306430063,0
72 | 64.0393204150601,78.03168802018232,1
73 | 72.34649422579923,96.22759296761404,1
74 | 60.45788573918959,73.09499809758037,1
75 | 58.84095621726802,75.85844831279042,1
76 | 99.82785779692128,72.36925193383885,1
77 | 47.26426910848174,88.47586499559782,1
78 | 50.45815980285988,75.80985952982456,1
79 | 60.45555629271532,42.50840943572217,0
80 | 82.22666157785568,42.71987853716458,0
81 | 88.9138964166533,69.80378889835472,1
82 | 94.83450672430196,45.69430680250754,1
83 | 67.31925746917527,66.58935317747915,1
84 | 57.23870631569862,59.51428198012956,1
85 | 80.36675600171273,90.96014789746954,1
86 | 68.46852178591112,85.59430710452014,1
87 | 42.0754545384731,78.84478600148043,0
88 | 75.47770200533905,90.42453899753964,1
89 | 78.63542434898018,96.64742716885644,1
90 | 52.34800398794107,60.76950525602592,0
91 | 94.09433112516793,77.15910509073893,1
92 | 90.44855097096364,87.50879176484702,1
93 | 55.48216114069585,35.57070347228866,0
94 | 74.49269241843041,84.84513684930135,1
95 | 89.84580670720979,45.35828361091658,1
96 | 83.48916274498238,48.38028579728175,1
97 | 42.2617008099817,87.10385094025457,1
98 | 99.31500880510394,68.77540947206617,1
99 | 55.34001756003703,64.9319380069486,1
100 | 74.77589300092767,89.52981289513276,1
101 |
--------------------------------------------------------------------------------
/notebooks/data/ex2data2.txt:
--------------------------------------------------------------------------------
1 | 0.051267,0.69956,1
2 | -0.092742,0.68494,1
3 | -0.21371,0.69225,1
4 | -0.375,0.50219,1
5 | -0.51325,0.46564,1
6 | -0.52477,0.2098,1
7 | -0.39804,0.034357,1
8 | -0.30588,-0.19225,1
9 | 0.016705,-0.40424,1
10 | 0.13191,-0.51389,1
11 | 0.38537,-0.56506,1
12 | 0.52938,-0.5212,1
13 | 0.63882,-0.24342,1
14 | 0.73675,-0.18494,1
15 | 0.54666,0.48757,1
16 | 0.322,0.5826,1
17 | 0.16647,0.53874,1
18 | -0.046659,0.81652,1
19 | -0.17339,0.69956,1
20 | -0.47869,0.63377,1
21 | -0.60541,0.59722,1
22 | -0.62846,0.33406,1
23 | -0.59389,0.005117,1
24 | -0.42108,-0.27266,1
25 | -0.11578,-0.39693,1
26 | 0.20104,-0.60161,1
27 | 0.46601,-0.53582,1
28 | 0.67339,-0.53582,1
29 | -0.13882,0.54605,1
30 | -0.29435,0.77997,1
31 | -0.26555,0.96272,1
32 | -0.16187,0.8019,1
33 | -0.17339,0.64839,1
34 | -0.28283,0.47295,1
35 | -0.36348,0.31213,1
36 | -0.30012,0.027047,1
37 | -0.23675,-0.21418,1
38 | -0.06394,-0.18494,1
39 | 0.062788,-0.16301,1
40 | 0.22984,-0.41155,1
41 | 0.2932,-0.2288,1
42 | 0.48329,-0.18494,1
43 | 0.64459,-0.14108,1
44 | 0.46025,0.012427,1
45 | 0.6273,0.15863,1
46 | 0.57546,0.26827,1
47 | 0.72523,0.44371,1
48 | 0.22408,0.52412,1
49 | 0.44297,0.67032,1
50 | 0.322,0.69225,1
51 | 0.13767,0.57529,1
52 | -0.0063364,0.39985,1
53 | -0.092742,0.55336,1
54 | -0.20795,0.35599,1
55 | -0.20795,0.17325,1
56 | -0.43836,0.21711,1
57 | -0.21947,-0.016813,1
58 | -0.13882,-0.27266,1
59 | 0.18376,0.93348,0
60 | 0.22408,0.77997,0
61 | 0.29896,0.61915,0
62 | 0.50634,0.75804,0
63 | 0.61578,0.7288,0
64 | 0.60426,0.59722,0
65 | 0.76555,0.50219,0
66 | 0.92684,0.3633,0
67 | 0.82316,0.27558,0
68 | 0.96141,0.085526,0
69 | 0.93836,0.012427,0
70 | 0.86348,-0.082602,0
71 | 0.89804,-0.20687,0
72 | 0.85196,-0.36769,0
73 | 0.82892,-0.5212,0
74 | 0.79435,-0.55775,0
75 | 0.59274,-0.7405,0
76 | 0.51786,-0.5943,0
77 | 0.46601,-0.41886,0
78 | 0.35081,-0.57968,0
79 | 0.28744,-0.76974,0
80 | 0.085829,-0.75512,0
81 | 0.14919,-0.57968,0
82 | -0.13306,-0.4481,0
83 | -0.40956,-0.41155,0
84 | -0.39228,-0.25804,0
85 | -0.74366,-0.25804,0
86 | -0.69758,0.041667,0
87 | -0.75518,0.2902,0
88 | -0.69758,0.68494,0
89 | -0.4038,0.70687,0
90 | -0.38076,0.91886,0
91 | -0.50749,0.90424,0
92 | -0.54781,0.70687,0
93 | 0.10311,0.77997,0
94 | 0.057028,0.91886,0
95 | -0.10426,0.99196,0
96 | -0.081221,1.1089,0
97 | 0.28744,1.087,0
98 | 0.39689,0.82383,0
99 | 0.63882,0.88962,0
100 | 0.82316,0.66301,0
101 | 0.67339,0.64108,0
102 | 1.0709,0.10015,0
103 | -0.046659,-0.57968,0
104 | -0.23675,-0.63816,0
105 | -0.15035,-0.36769,0
106 | -0.49021,-0.3019,0
107 | -0.46717,-0.13377,0
108 | -0.28859,-0.060673,0
109 | -0.61118,-0.067982,0
110 | -0.66302,-0.21418,0
111 | -0.59965,-0.41886,0
112 | -0.72638,-0.082602,0
113 | -0.83007,0.31213,0
114 | -0.72062,0.53874,0
115 | -0.59389,0.49488,0
116 | -0.48445,0.99927,0
117 | -0.0063364,0.99927,0
118 | 0.63265,-0.030612,0
119 |
--------------------------------------------------------------------------------
/notebooks/data/ex3data1.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex3data1.mat
--------------------------------------------------------------------------------
/notebooks/data/ex3weights.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex3weights.mat
--------------------------------------------------------------------------------
/notebooks/data/ex4data1.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex4data1.mat
--------------------------------------------------------------------------------
/notebooks/data/ex4weights.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex4weights.mat
--------------------------------------------------------------------------------
/notebooks/data/ex5data1.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex5data1.mat
--------------------------------------------------------------------------------
/notebooks/data/ex6data1.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex6data1.mat
--------------------------------------------------------------------------------
/notebooks/data/ex6data2.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex6data2.mat
--------------------------------------------------------------------------------
/notebooks/data/ex6data3.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex6data3.mat
--------------------------------------------------------------------------------
/notebooks/data/ex7data1.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex7data1.mat
--------------------------------------------------------------------------------
/notebooks/data/ex7data2.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex7data2.mat
--------------------------------------------------------------------------------
/notebooks/data/ex7faces.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex7faces.mat
--------------------------------------------------------------------------------
/notebooks/data/ex8_movies.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex8_movies.mat
--------------------------------------------------------------------------------
/notebooks/data/ex8data1.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex8data1.mat
--------------------------------------------------------------------------------
/notebooks/data/ex8data2.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex8data2.mat
--------------------------------------------------------------------------------
/notebooks/data/vocab.txt:
--------------------------------------------------------------------------------
1 | 1 aa
2 | 2 ab
3 | 3 abil
4 | 4 abl
5 | 5 about
6 | 6 abov
7 | 7 absolut
8 | 8 abus
9 | 9 ac
10 | 10 accept
11 | 11 access
12 | 12 accord
13 | 13 account
14 | 14 achiev
15 | 15 acquir
16 | 16 across
17 | 17 act
18 | 18 action
19 | 19 activ
20 | 20 actual
21 | 21 ad
22 | 22 adam
23 | 23 add
24 | 24 addit
25 | 25 address
26 | 26 administr
27 | 27 adult
28 | 28 advanc
29 | 29 advantag
30 | 30 advertis
31 | 31 advic
32 | 32 advis
33 | 33 ae
34 | 34 af
35 | 35 affect
36 | 36 affili
37 | 37 afford
38 | 38 africa
39 | 39 after
40 | 40 ag
41 | 41 again
42 | 42 against
43 | 43 agenc
44 | 44 agent
45 | 45 ago
46 | 46 agre
47 | 47 agreement
48 | 48 aid
49 | 49 air
50 | 50 al
51 | 51 alb
52 | 52 align
53 | 53 all
54 | 54 allow
55 | 55 almost
56 | 56 alon
57 | 57 along
58 | 58 alreadi
59 | 59 alsa
60 | 60 also
61 | 61 altern
62 | 62 although
63 | 63 alwai
64 | 64 am
65 | 65 amaz
66 | 66 america
67 | 67 american
68 | 68 among
69 | 69 amount
70 | 70 amp
71 | 71 an
72 | 72 analysi
73 | 73 analyst
74 | 74 and
75 | 75 ani
76 | 76 anim
77 | 77 announc
78 | 78 annual
79 | 79 annuiti
80 | 80 anoth
81 | 81 answer
82 | 82 anti
83 | 83 anumb
84 | 84 anybodi
85 | 85 anymor
86 | 86 anyon
87 | 87 anyth
88 | 88 anywai
89 | 89 anywher
90 | 90 aol
91 | 91 ap
92 | 92 apolog
93 | 93 app
94 | 94 appar
95 | 95 appear
96 | 96 appl
97 | 97 appli
98 | 98 applic
99 | 99 appreci
100 | 100 approach
101 | 101 approv
102 | 102 apt
103 | 103 ar
104 | 104 archiv
105 | 105 area
106 | 106 aren
107 | 107 argument
108 | 108 arial
109 | 109 arm
110 | 110 around
111 | 111 arrai
112 | 112 arriv
113 | 113 art
114 | 114 articl
115 | 115 artist
116 | 116 as
117 | 117 ascii
118 | 118 ask
119 | 119 asset
120 | 120 assist
121 | 121 associ
122 | 122 assum
123 | 123 assur
124 | 124 at
125 | 125 atol
126 | 126 attach
127 | 127 attack
128 | 128 attempt
129 | 129 attent
130 | 130 attornei
131 | 131 attract
132 | 132 audio
133 | 133 aug
134 | 134 august
135 | 135 author
136 | 136 auto
137 | 137 autom
138 | 138 automat
139 | 139 avail
140 | 140 averag
141 | 141 avoid
142 | 142 awai
143 | 143 awar
144 | 144 award
145 | 145 ba
146 | 146 babi
147 | 147 back
148 | 148 background
149 | 149 backup
150 | 150 bad
151 | 151 balanc
152 | 152 ban
153 | 153 bank
154 | 154 bar
155 | 155 base
156 | 156 basenumb
157 | 157 basi
158 | 158 basic
159 | 159 bb
160 | 160 bc
161 | 161 bd
162 | 162 be
163 | 163 beat
164 | 164 beberg
165 | 165 becaus
166 | 166 becom
167 | 167 been
168 | 168 befor
169 | 169 begin
170 | 170 behalf
171 | 171 behavior
172 | 172 behind
173 | 173 believ
174 | 174 below
175 | 175 benefit
176 | 176 best
177 | 177 beta
178 | 178 better
179 | 179 between
180 | 180 bf
181 | 181 big
182 | 182 bill
183 | 183 billion
184 | 184 bin
185 | 185 binari
186 | 186 bit
187 | 187 black
188 | 188 blank
189 | 189 block
190 | 190 blog
191 | 191 blood
192 | 192 blue
193 | 193 bnumber
194 | 194 board
195 | 195 bodi
196 | 196 boi
197 | 197 bonu
198 | 198 book
199 | 199 boot
200 | 200 border
201 | 201 boss
202 | 202 boston
203 | 203 botan
204 | 204 both
205 | 205 bottl
206 | 206 bottom
207 | 207 boundari
208 | 208 box
209 | 209 brain
210 | 210 brand
211 | 211 break
212 | 212 brian
213 | 213 bring
214 | 214 broadcast
215 | 215 broker
216 | 216 browser
217 | 217 bug
218 | 218 bui
219 | 219 build
220 | 220 built
221 | 221 bulk
222 | 222 burn
223 | 223 bush
224 | 224 busi
225 | 225 but
226 | 226 button
227 | 227 by
228 | 228 byte
229 | 229 ca
230 | 230 cabl
231 | 231 cach
232 | 232 calcul
233 | 233 california
234 | 234 call
235 | 235 came
236 | 236 camera
237 | 237 campaign
238 | 238 can
239 | 239 canada
240 | 240 cannot
241 | 241 canon
242 | 242 capabl
243 | 243 capillari
244 | 244 capit
245 | 245 car
246 | 246 card
247 | 247 care
248 | 248 career
249 | 249 carri
250 | 250 cartridg
251 | 251 case
252 | 252 cash
253 | 253 cat
254 | 254 catch
255 | 255 categori
256 | 256 caus
257 | 257 cb
258 | 258 cc
259 | 259 cd
260 | 260 ce
261 | 261 cell
262 | 262 cent
263 | 263 center
264 | 264 central
265 | 265 centuri
266 | 266 ceo
267 | 267 certain
268 | 268 certainli
269 | 269 cf
270 | 270 challeng
271 | 271 chanc
272 | 272 chang
273 | 273 channel
274 | 274 char
275 | 275 charact
276 | 276 charg
277 | 277 charset
278 | 278 chat
279 | 279 cheap
280 | 280 check
281 | 281 cheer
282 | 282 chief
283 | 283 children
284 | 284 china
285 | 285 chip
286 | 286 choic
287 | 287 choos
288 | 288 chri
289 | 289 citi
290 | 290 citizen
291 | 291 civil
292 | 292 claim
293 | 293 class
294 | 294 classifi
295 | 295 clean
296 | 296 clear
297 | 297 clearli
298 | 298 click
299 | 299 client
300 | 300 close
301 | 301 clue
302 | 302 cnet
303 | 303 cnumber
304 | 304 co
305 | 305 code
306 | 306 collect
307 | 307 colleg
308 | 308 color
309 | 309 com
310 | 310 combin
311 | 311 come
312 | 312 comfort
313 | 313 command
314 | 314 comment
315 | 315 commentari
316 | 316 commerci
317 | 317 commiss
318 | 318 commit
319 | 319 common
320 | 320 commun
321 | 321 compani
322 | 322 compar
323 | 323 comparison
324 | 324 compat
325 | 325 compet
326 | 326 competit
327 | 327 compil
328 | 328 complet
329 | 329 comprehens
330 | 330 comput
331 | 331 concentr
332 | 332 concept
333 | 333 concern
334 | 334 condit
335 | 335 conf
336 | 336 confer
337 | 337 confid
338 | 338 confidenti
339 | 339 config
340 | 340 configur
341 | 341 confirm
342 | 342 conflict
343 | 343 confus
344 | 344 congress
345 | 345 connect
346 | 346 consid
347 | 347 consolid
348 | 348 constitut
349 | 349 construct
350 | 350 consult
351 | 351 consum
352 | 352 contact
353 | 353 contain
354 | 354 content
355 | 355 continu
356 | 356 contract
357 | 357 contribut
358 | 358 control
359 | 359 conveni
360 | 360 convers
361 | 361 convert
362 | 362 cool
363 | 363 cooper
364 | 364 copi
365 | 365 copyright
366 | 366 core
367 | 367 corpor
368 | 368 correct
369 | 369 correspond
370 | 370 cost
371 | 371 could
372 | 372 couldn
373 | 373 count
374 | 374 countri
375 | 375 coupl
376 | 376 cours
377 | 377 court
378 | 378 cover
379 | 379 coverag
380 | 380 crash
381 | 381 creat
382 | 382 creativ
383 | 383 credit
384 | 384 critic
385 | 385 cross
386 | 386 cultur
387 | 387 current
388 | 388 custom
389 | 389 cut
390 | 390 cv
391 | 391 da
392 | 392 dagga
393 | 393 dai
394 | 394 daili
395 | 395 dan
396 | 396 danger
397 | 397 dark
398 | 398 data
399 | 399 databas
400 | 400 datapow
401 | 401 date
402 | 402 dave
403 | 403 david
404 | 404 dc
405 | 405 de
406 | 406 dead
407 | 407 deal
408 | 408 dear
409 | 409 death
410 | 410 debt
411 | 411 decad
412 | 412 decid
413 | 413 decis
414 | 414 declar
415 | 415 declin
416 | 416 decor
417 | 417 default
418 | 418 defend
419 | 419 defens
420 | 420 defin
421 | 421 definit
422 | 422 degre
423 | 423 delai
424 | 424 delet
425 | 425 deliv
426 | 426 deliveri
427 | 427 dell
428 | 428 demand
429 | 429 democrat
430 | 430 depart
431 | 431 depend
432 | 432 deposit
433 | 433 describ
434 | 434 descript
435 | 435 deserv
436 | 436 design
437 | 437 desir
438 | 438 desktop
439 | 439 despit
440 | 440 detail
441 | 441 detect
442 | 442 determin
443 | 443 dev
444 | 444 devel
445 | 445 develop
446 | 446 devic
447 | 447 di
448 | 448 dial
449 | 449 did
450 | 450 didn
451 | 451 diet
452 | 452 differ
453 | 453 difficult
454 | 454 digit
455 | 455 direct
456 | 456 directli
457 | 457 director
458 | 458 directori
459 | 459 disabl
460 | 460 discount
461 | 461 discov
462 | 462 discoveri
463 | 463 discuss
464 | 464 disk
465 | 465 displai
466 | 466 disposit
467 | 467 distanc
468 | 468 distribut
469 | 469 dn
470 | 470 dnumber
471 | 471 do
472 | 472 doc
473 | 473 document
474 | 474 doe
475 | 475 doer
476 | 476 doesn
477 | 477 dollar
478 | 478 dollarac
479 | 479 dollarnumb
480 | 480 domain
481 | 481 don
482 | 482 done
483 | 483 dont
484 | 484 doubl
485 | 485 doubt
486 | 486 down
487 | 487 download
488 | 488 dr
489 | 489 draw
490 | 490 dream
491 | 491 drive
492 | 492 driver
493 | 493 drop
494 | 494 drug
495 | 495 due
496 | 496 dure
497 | 497 dvd
498 | 498 dw
499 | 499 dynam
500 | 500 ea
501 | 501 each
502 | 502 earli
503 | 503 earlier
504 | 504 earn
505 | 505 earth
506 | 506 easi
507 | 507 easier
508 | 508 easili
509 | 509 eat
510 | 510 eb
511 | 511 ebai
512 | 512 ec
513 | 513 echo
514 | 514 econom
515 | 515 economi
516 | 516 ed
517 | 517 edg
518 | 518 edit
519 | 519 editor
520 | 520 educ
521 | 521 eff
522 | 522 effect
523 | 523 effici
524 | 524 effort
525 | 525 either
526 | 526 el
527 | 527 electron
528 | 528 elimin
529 | 529 els
530 | 530 email
531 | 531 emailaddr
532 | 532 emerg
533 | 533 empir
534 | 534 employ
535 | 535 employe
536 | 536 en
537 | 537 enabl
538 | 538 encod
539 | 539 encourag
540 | 540 end
541 | 541 enemi
542 | 542 enenkio
543 | 543 energi
544 | 544 engin
545 | 545 english
546 | 546 enhanc
547 | 547 enjoi
548 | 548 enough
549 | 549 ensur
550 | 550 enter
551 | 551 enterpris
552 | 552 entertain
553 | 553 entir
554 | 554 entri
555 | 555 enumb
556 | 556 environ
557 | 557 equal
558 | 558 equip
559 | 559 equival
560 | 560 error
561 | 561 especi
562 | 562 essenti
563 | 563 establish
564 | 564 estat
565 | 565 estim
566 | 566 et
567 | 567 etc
568 | 568 euro
569 | 569 europ
570 | 570 european
571 | 571 even
572 | 572 event
573 | 573 eventu
574 | 574 ever
575 | 575 everi
576 | 576 everyon
577 | 577 everyth
578 | 578 evid
579 | 579 evil
580 | 580 exactli
581 | 581 exampl
582 | 582 excel
583 | 583 except
584 | 584 exchang
585 | 585 excit
586 | 586 exclus
587 | 587 execut
588 | 588 exercis
589 | 589 exist
590 | 590 exmh
591 | 591 expand
592 | 592 expect
593 | 593 expens
594 | 594 experi
595 | 595 expert
596 | 596 expir
597 | 597 explain
598 | 598 explor
599 | 599 express
600 | 600 extend
601 | 601 extens
602 | 602 extra
603 | 603 extract
604 | 604 extrem
605 | 605 ey
606 | 606 fa
607 | 607 face
608 | 608 fact
609 | 609 factor
610 | 610 fail
611 | 611 fair
612 | 612 fall
613 | 613 fals
614 | 614 famili
615 | 615 faq
616 | 616 far
617 | 617 fast
618 | 618 faster
619 | 619 fastest
620 | 620 fat
621 | 621 father
622 | 622 favorit
623 | 623 fax
624 | 624 fb
625 | 625 fd
626 | 626 featur
627 | 627 feder
628 | 628 fee
629 | 629 feed
630 | 630 feedback
631 | 631 feel
632 | 632 femal
633 | 633 few
634 | 634 ffffff
635 | 635 ffnumber
636 | 636 field
637 | 637 fight
638 | 638 figur
639 | 639 file
640 | 640 fill
641 | 641 film
642 | 642 filter
643 | 643 final
644 | 644 financ
645 | 645 financi
646 | 646 find
647 | 647 fine
648 | 648 finish
649 | 649 fire
650 | 650 firewal
651 | 651 firm
652 | 652 first
653 | 653 fit
654 | 654 five
655 | 655 fix
656 | 656 flag
657 | 657 flash
658 | 658 flow
659 | 659 fnumber
660 | 660 focu
661 | 661 folder
662 | 662 folk
663 | 663 follow
664 | 664 font
665 | 665 food
666 | 666 for
667 | 667 forc
668 | 668 foreign
669 | 669 forev
670 | 670 forget
671 | 671 fork
672 | 672 form
673 | 673 format
674 | 674 former
675 | 675 fortun
676 | 676 forward
677 | 677 found
678 | 678 foundat
679 | 679 four
680 | 680 franc
681 | 681 free
682 | 682 freedom
683 | 683 french
684 | 684 freshrpm
685 | 685 fri
686 | 686 fridai
687 | 687 friend
688 | 688 from
689 | 689 front
690 | 690 ftoc
691 | 691 ftp
692 | 692 full
693 | 693 fulli
694 | 694 fun
695 | 695 function
696 | 696 fund
697 | 697 further
698 | 698 futur
699 | 699 ga
700 | 700 gain
701 | 701 game
702 | 702 gari
703 | 703 garrigu
704 | 704 gave
705 | 705 gcc
706 | 706 geek
707 | 707 gener
708 | 708 get
709 | 709 gif
710 | 710 gift
711 | 711 girl
712 | 712 give
713 | 713 given
714 | 714 global
715 | 715 gnome
716 | 716 gnu
717 | 717 gnupg
718 | 718 go
719 | 719 goal
720 | 720 god
721 | 721 goe
722 | 722 gold
723 | 723 gone
724 | 724 good
725 | 725 googl
726 | 726 got
727 | 727 govern
728 | 728 gpl
729 | 729 grand
730 | 730 grant
731 | 731 graphic
732 | 732 great
733 | 733 greater
734 | 734 ground
735 | 735 group
736 | 736 grow
737 | 737 growth
738 | 738 gt
739 | 739 guarante
740 | 740 guess
741 | 741 gui
742 | 742 guid
743 | 743 ha
744 | 744 hack
745 | 745 had
746 | 746 half
747 | 747 ham
748 | 748 hand
749 | 749 handl
750 | 750 happen
751 | 751 happi
752 | 752 hard
753 | 753 hardwar
754 | 754 hat
755 | 755 hate
756 | 756 have
757 | 757 haven
758 | 758 he
759 | 759 head
760 | 760 header
761 | 761 headlin
762 | 762 health
763 | 763 hear
764 | 764 heard
765 | 765 heart
766 | 766 heaven
767 | 767 hei
768 | 768 height
769 | 769 held
770 | 770 hello
771 | 771 help
772 | 772 helvetica
773 | 773 her
774 | 774 herba
775 | 775 here
776 | 776 hermio
777 | 777 hettinga
778 | 778 hi
779 | 779 high
780 | 780 higher
781 | 781 highli
782 | 782 highlight
783 | 783 him
784 | 784 histori
785 | 785 hit
786 | 786 hold
787 | 787 home
788 | 788 honor
789 | 789 hope
790 | 790 host
791 | 791 hot
792 | 792 hour
793 | 793 hous
794 | 794 how
795 | 795 howev
796 | 796 hp
797 | 797 html
798 | 798 http
799 | 799 httpaddr
800 | 800 huge
801 | 801 human
802 | 802 hundr
803 | 803 ibm
804 | 804 id
805 | 805 idea
806 | 806 ident
807 | 807 identifi
808 | 808 idnumb
809 | 809 ie
810 | 810 if
811 | 811 ignor
812 | 812 ii
813 | 813 iii
814 | 814 iiiiiiihnumberjnumberhnumberjnumberhnumb
815 | 815 illeg
816 | 816 im
817 | 817 imag
818 | 818 imagin
819 | 819 immedi
820 | 820 impact
821 | 821 implement
822 | 822 import
823 | 823 impress
824 | 824 improv
825 | 825 in
826 | 826 inc
827 | 827 includ
828 | 828 incom
829 | 829 increas
830 | 830 incred
831 | 831 inde
832 | 832 independ
833 | 833 index
834 | 834 india
835 | 835 indian
836 | 836 indic
837 | 837 individu
838 | 838 industri
839 | 839 info
840 | 840 inform
841 | 841 initi
842 | 842 inlin
843 | 843 innov
844 | 844 input
845 | 845 insert
846 | 846 insid
847 | 847 instal
848 | 848 instanc
849 | 849 instant
850 | 850 instead
851 | 851 institut
852 | 852 instruct
853 | 853 insur
854 | 854 int
855 | 855 integr
856 | 856 intel
857 | 857 intellig
858 | 858 intend
859 | 859 interact
860 | 860 interest
861 | 861 interfac
862 | 862 intern
863 | 863 internet
864 | 864 interview
865 | 865 into
866 | 866 intro
867 | 867 introduc
868 | 868 inumb
869 | 869 invest
870 | 870 investig
871 | 871 investor
872 | 872 invok
873 | 873 involv
874 | 874 ip
875 | 875 ireland
876 | 876 irish
877 | 877 is
878 | 878 island
879 | 879 isn
880 | 880 iso
881 | 881 isp
882 | 882 issu
883 | 883 it
884 | 884 item
885 | 885 itself
886 | 886 jabber
887 | 887 jame
888 | 888 java
889 | 889 jim
890 | 890 jnumberiiiiiiihepihepihf
891 | 891 job
892 | 892 joe
893 | 893 john
894 | 894 join
895 | 895 journal
896 | 896 judg
897 | 897 judgment
898 | 898 jul
899 | 899 juli
900 | 900 jump
901 | 901 june
902 | 902 just
903 | 903 justin
904 | 904 keep
905 | 905 kei
906 | 906 kept
907 | 907 kernel
908 | 908 kevin
909 | 909 keyboard
910 | 910 kid
911 | 911 kill
912 | 912 kind
913 | 913 king
914 | 914 kingdom
915 | 915 knew
916 | 916 know
917 | 917 knowledg
918 | 918 known
919 | 919 la
920 | 920 lack
921 | 921 land
922 | 922 languag
923 | 923 laptop
924 | 924 larg
925 | 925 larger
926 | 926 largest
927 | 927 laser
928 | 928 last
929 | 929 late
930 | 930 later
931 | 931 latest
932 | 932 launch
933 | 933 law
934 | 934 lawrenc
935 | 935 le
936 | 936 lead
937 | 937 leader
938 | 938 learn
939 | 939 least
940 | 940 leav
941 | 941 left
942 | 942 legal
943 | 943 lender
944 | 944 length
945 | 945 less
946 | 946 lesson
947 | 947 let
948 | 948 letter
949 | 949 level
950 | 950 lib
951 | 951 librari
952 | 952 licens
953 | 953 life
954 | 954 lifetim
955 | 955 light
956 | 956 like
957 | 957 limit
958 | 958 line
959 | 959 link
960 | 960 linux
961 | 961 list
962 | 962 listen
963 | 963 littl
964 | 964 live
965 | 965 ll
966 | 966 lo
967 | 967 load
968 | 968 loan
969 | 969 local
970 | 970 locat
971 | 971 lock
972 | 972 lockergnom
973 | 973 log
974 | 974 long
975 | 975 longer
976 | 976 look
977 | 977 lose
978 | 978 loss
979 | 979 lost
980 | 980 lot
981 | 981 love
982 | 982 low
983 | 983 lower
984 | 984 lowest
985 | 985 lt
986 | 986 ma
987 | 987 mac
988 | 988 machin
989 | 989 made
990 | 990 magazin
991 | 991 mai
992 | 992 mail
993 | 993 mailer
994 | 994 main
995 | 995 maintain
996 | 996 major
997 | 997 make
998 | 998 maker
999 | 999 male
1000 | 1000 man
1001 | 1001 manag
1002 | 1002 mani
1003 | 1003 manual
1004 | 1004 manufactur
1005 | 1005 map
1006 | 1006 march
1007 | 1007 margin
1008 | 1008 mark
1009 | 1009 market
1010 | 1010 marshal
1011 | 1011 mass
1012 | 1012 master
1013 | 1013 match
1014 | 1014 materi
1015 | 1015 matter
1016 | 1016 matthia
1017 | 1017 mayb
1018 | 1018 me
1019 | 1019 mean
1020 | 1020 measur
1021 | 1021 mechan
1022 | 1022 media
1023 | 1023 medic
1024 | 1024 meet
1025 | 1025 member
1026 | 1026 membership
1027 | 1027 memori
1028 | 1028 men
1029 | 1029 mention
1030 | 1030 menu
1031 | 1031 merchant
1032 | 1032 messag
1033 | 1033 method
1034 | 1034 mh
1035 | 1035 michael
1036 | 1036 microsoft
1037 | 1037 middl
1038 | 1038 might
1039 | 1039 mike
1040 | 1040 mile
1041 | 1041 militari
1042 | 1042 million
1043 | 1043 mime
1044 | 1044 mind
1045 | 1045 mine
1046 | 1046 mini
1047 | 1047 minimum
1048 | 1048 minut
1049 | 1049 miss
1050 | 1050 mistak
1051 | 1051 mobil
1052 | 1052 mode
1053 | 1053 model
1054 | 1054 modem
1055 | 1055 modifi
1056 | 1056 modul
1057 | 1057 moment
1058 | 1058 mon
1059 | 1059 mondai
1060 | 1060 monei
1061 | 1061 monitor
1062 | 1062 month
1063 | 1063 monthli
1064 | 1064 more
1065 | 1065 morn
1066 | 1066 mortgag
1067 | 1067 most
1068 | 1068 mostli
1069 | 1069 mother
1070 | 1070 motiv
1071 | 1071 move
1072 | 1072 movi
1073 | 1073 mpnumber
1074 | 1074 mr
1075 | 1075 ms
1076 | 1076 msg
1077 | 1077 much
1078 | 1078 multi
1079 | 1079 multipart
1080 | 1080 multipl
1081 | 1081 murphi
1082 | 1082 music
1083 | 1083 must
1084 | 1084 my
1085 | 1085 myself
1086 | 1086 name
1087 | 1087 nation
1088 | 1088 natur
1089 | 1089 nbsp
1090 | 1090 near
1091 | 1091 nearli
1092 | 1092 necessari
1093 | 1093 need
1094 | 1094 neg
1095 | 1095 net
1096 | 1096 netscap
1097 | 1097 network
1098 | 1098 never
1099 | 1099 new
1100 | 1100 newslett
1101 | 1101 next
1102 | 1102 nextpart
1103 | 1103 nice
1104 | 1104 nigeria
1105 | 1105 night
1106 | 1106 no
1107 | 1107 nobodi
1108 | 1108 non
1109 | 1109 none
1110 | 1110 nor
1111 | 1111 normal
1112 | 1112 north
1113 | 1113 not
1114 | 1114 note
1115 | 1115 noth
1116 | 1116 notic
1117 | 1117 now
1118 | 1118 nt
1119 | 1119 null
1120 | 1120 number
1121 | 1121 numbera
1122 | 1122 numberam
1123 | 1123 numberanumb
1124 | 1124 numberb
1125 | 1125 numberbit
1126 | 1126 numberc
1127 | 1127 numbercb
1128 | 1128 numbercbr
1129 | 1129 numbercfont
1130 | 1130 numbercli
1131 | 1131 numbercnumb
1132 | 1132 numbercp
1133 | 1133 numberctd
1134 | 1134 numberd
1135 | 1135 numberdari
1136 | 1136 numberdnumb
1137 | 1137 numberenumb
1138 | 1138 numberf
1139 | 1139 numberfb
1140 | 1140 numberff
1141 | 1141 numberffont
1142 | 1142 numberfp
1143 | 1143 numberftd
1144 | 1144 numberk
1145 | 1145 numberm
1146 | 1146 numbermb
1147 | 1147 numberp
1148 | 1148 numberpd
1149 | 1149 numberpm
1150 | 1150 numberpx
1151 | 1151 numberst
1152 | 1152 numberth
1153 | 1153 numbertnumb
1154 | 1154 numberx
1155 | 1155 object
1156 | 1156 oblig
1157 | 1157 obtain
1158 | 1158 obvious
1159 | 1159 occur
1160 | 1160 oct
1161 | 1161 octob
1162 | 1162 of
1163 | 1163 off
1164 | 1164 offer
1165 | 1165 offic
1166 | 1166 offici
1167 | 1167 often
1168 | 1168 oh
1169 | 1169 ok
1170 | 1170 old
1171 | 1171 on
1172 | 1172 onc
1173 | 1173 onli
1174 | 1174 onlin
1175 | 1175 open
1176 | 1176 oper
1177 | 1177 opinion
1178 | 1178 opportun
1179 | 1179 opt
1180 | 1180 optim
1181 | 1181 option
1182 | 1182 or
1183 | 1183 order
1184 | 1184 org
1185 | 1185 organ
1186 | 1186 origin
1187 | 1187 os
1188 | 1188 osdn
1189 | 1189 other
1190 | 1190 otherwis
1191 | 1191 our
1192 | 1192 out
1193 | 1193 outlook
1194 | 1194 output
1195 | 1195 outsid
1196 | 1196 over
1197 | 1197 own
1198 | 1198 owner
1199 | 1199 oz
1200 | 1200 pacif
1201 | 1201 pack
1202 | 1202 packag
1203 | 1203 page
1204 | 1204 pai
1205 | 1205 paid
1206 | 1206 pain
1207 | 1207 palm
1208 | 1208 panel
1209 | 1209 paper
1210 | 1210 paragraph
1211 | 1211 parent
1212 | 1212 part
1213 | 1213 parti
1214 | 1214 particip
1215 | 1215 particular
1216 | 1216 particularli
1217 | 1217 partit
1218 | 1218 partner
1219 | 1219 pass
1220 | 1220 password
1221 | 1221 past
1222 | 1222 patch
1223 | 1223 patent
1224 | 1224 path
1225 | 1225 pattern
1226 | 1226 paul
1227 | 1227 payment
1228 | 1228 pc
1229 | 1229 peac
1230 | 1230 peopl
1231 | 1231 per
1232 | 1232 percent
1233 | 1233 percentag
1234 | 1234 perfect
1235 | 1235 perfectli
1236 | 1236 perform
1237 | 1237 perhap
1238 | 1238 period
1239 | 1239 perl
1240 | 1240 perman
1241 | 1241 permiss
1242 | 1242 person
1243 | 1243 pgp
1244 | 1244 phone
1245 | 1245 photo
1246 | 1246 php
1247 | 1247 phrase
1248 | 1248 physic
1249 | 1249 pick
1250 | 1250 pictur
1251 | 1251 piec
1252 | 1252 piiiiiiii
1253 | 1253 pipe
1254 | 1254 pjnumber
1255 | 1255 place
1256 | 1256 plai
1257 | 1257 plain
1258 | 1258 plan
1259 | 1259 planet
1260 | 1260 plant
1261 | 1261 planta
1262 | 1262 platform
1263 | 1263 player
1264 | 1264 pleas
1265 | 1265 plu
1266 | 1266 plug
1267 | 1267 pm
1268 | 1268 pocket
1269 | 1269 point
1270 | 1270 polic
1271 | 1271 polici
1272 | 1272 polit
1273 | 1273 poor
1274 | 1274 pop
1275 | 1275 popul
1276 | 1276 popular
1277 | 1277 port
1278 | 1278 posit
1279 | 1279 possibl
1280 | 1280 post
1281 | 1281 potenti
1282 | 1282 pound
1283 | 1283 powel
1284 | 1284 power
1285 | 1285 powershot
1286 | 1286 practic
1287 | 1287 pre
1288 | 1288 predict
1289 | 1289 prefer
1290 | 1290 premium
1291 | 1291 prepar
1292 | 1292 present
1293 | 1293 presid
1294 | 1294 press
1295 | 1295 pretti
1296 | 1296 prevent
1297 | 1297 previou
1298 | 1298 previous
1299 | 1299 price
1300 | 1300 principl
1301 | 1301 print
1302 | 1302 printabl
1303 | 1303 printer
1304 | 1304 privaci
1305 | 1305 privat
1306 | 1306 prize
1307 | 1307 pro
1308 | 1308 probabl
1309 | 1309 problem
1310 | 1310 procedur
1311 | 1311 process
1312 | 1312 processor
1313 | 1313 procmail
1314 | 1314 produc
1315 | 1315 product
1316 | 1316 profession
1317 | 1317 profil
1318 | 1318 profit
1319 | 1319 program
1320 | 1320 programm
1321 | 1321 progress
1322 | 1322 project
1323 | 1323 promis
1324 | 1324 promot
1325 | 1325 prompt
1326 | 1326 properti
1327 | 1327 propos
1328 | 1328 proprietari
1329 | 1329 prospect
1330 | 1330 protect
1331 | 1331 protocol
1332 | 1332 prove
1333 | 1333 proven
1334 | 1334 provid
1335 | 1335 proxi
1336 | 1336 pub
1337 | 1337 public
1338 | 1338 publish
1339 | 1339 pudg
1340 | 1340 pull
1341 | 1341 purchas
1342 | 1342 purpos
1343 | 1343 put
1344 | 1344 python
1345 | 1345 qnumber
1346 | 1346 qualifi
1347 | 1347 qualiti
1348 | 1348 quarter
1349 | 1349 question
1350 | 1350 quick
1351 | 1351 quickli
1352 | 1352 quit
1353 | 1353 quot
1354 | 1354 radio
1355 | 1355 ragga
1356 | 1356 rais
1357 | 1357 random
1358 | 1358 rang
1359 | 1359 rate
1360 | 1360 rather
1361 | 1361 ratio
1362 | 1362 razor
1363 | 1363 razornumb
1364 | 1364 re
1365 | 1365 reach
1366 | 1366 read
1367 | 1367 reader
1368 | 1368 readi
1369 | 1369 real
1370 | 1370 realiz
1371 | 1371 realli
1372 | 1372 reason
1373 | 1373 receiv
1374 | 1374 recent
1375 | 1375 recipi
1376 | 1376 recommend
1377 | 1377 record
1378 | 1378 red
1379 | 1379 redhat
1380 | 1380 reduc
1381 | 1381 refer
1382 | 1382 refin
1383 | 1383 reg
1384 | 1384 regard
1385 | 1385 region
1386 | 1386 regist
1387 | 1387 regul
1388 | 1388 regular
1389 | 1389 rel
1390 | 1390 relat
1391 | 1391 relationship
1392 | 1392 releas
1393 | 1393 relev
1394 | 1394 reliabl
1395 | 1395 remain
1396 | 1396 rememb
1397 | 1397 remot
1398 | 1398 remov
1399 | 1399 replac
1400 | 1400 repli
1401 | 1401 report
1402 | 1402 repositori
1403 | 1403 repres
1404 | 1404 republ
1405 | 1405 request
1406 | 1406 requir
1407 | 1407 research
1408 | 1408 reserv
1409 | 1409 resid
1410 | 1410 resourc
1411 | 1411 respect
1412 | 1412 respond
1413 | 1413 respons
1414 | 1414 rest
1415 | 1415 result
1416 | 1416 retail
1417 | 1417 return
1418 | 1418 reveal
1419 | 1419 revenu
1420 | 1420 revers
1421 | 1421 review
1422 | 1422 revok
1423 | 1423 rh
1424 | 1424 rich
1425 | 1425 right
1426 | 1426 risk
1427 | 1427 road
1428 | 1428 robert
1429 | 1429 rock
1430 | 1430 role
1431 | 1431 roll
1432 | 1432 rom
1433 | 1433 roman
1434 | 1434 room
1435 | 1435 root
1436 | 1436 round
1437 | 1437 rpm
1438 | 1438 rss
1439 | 1439 rule
1440 | 1440 run
1441 | 1441 sa
1442 | 1442 safe
1443 | 1443 sai
1444 | 1444 said
1445 | 1445 sale
1446 | 1446 same
1447 | 1447 sampl
1448 | 1448 san
1449 | 1449 saou
1450 | 1450 sat
1451 | 1451 satellit
1452 | 1452 save
1453 | 1453 saw
1454 | 1454 scan
1455 | 1455 schedul
1456 | 1456 school
1457 | 1457 scienc
1458 | 1458 score
1459 | 1459 screen
1460 | 1460 script
1461 | 1461 se
1462 | 1462 search
1463 | 1463 season
1464 | 1464 second
1465 | 1465 secret
1466 | 1466 section
1467 | 1467 secur
1468 | 1468 see
1469 | 1469 seed
1470 | 1470 seek
1471 | 1471 seem
1472 | 1472 seen
1473 | 1473 select
1474 | 1474 self
1475 | 1475 sell
1476 | 1476 seminar
1477 | 1477 send
1478 | 1478 sender
1479 | 1479 sendmail
1480 | 1480 senior
1481 | 1481 sens
1482 | 1482 sensit
1483 | 1483 sent
1484 | 1484 sep
1485 | 1485 separ
1486 | 1486 septemb
1487 | 1487 sequenc
1488 | 1488 seri
1489 | 1489 serif
1490 | 1490 seriou
1491 | 1491 serv
1492 | 1492 server
1493 | 1493 servic
1494 | 1494 set
1495 | 1495 setup
1496 | 1496 seven
1497 | 1497 seventh
1498 | 1498 sever
1499 | 1499 sex
1500 | 1500 sexual
1501 | 1501 sf
1502 | 1502 shape
1503 | 1503 share
1504 | 1504 she
1505 | 1505 shell
1506 | 1506 ship
1507 | 1507 shop
1508 | 1508 short
1509 | 1509 shot
1510 | 1510 should
1511 | 1511 show
1512 | 1512 side
1513 | 1513 sign
1514 | 1514 signatur
1515 | 1515 signific
1516 | 1516 similar
1517 | 1517 simpl
1518 | 1518 simpli
1519 | 1519 sinc
1520 | 1520 sincer
1521 | 1521 singl
1522 | 1522 sit
1523 | 1523 site
1524 | 1524 situat
1525 | 1525 six
1526 | 1526 size
1527 | 1527 skeptic
1528 | 1528 skill
1529 | 1529 skin
1530 | 1530 skip
1531 | 1531 sleep
1532 | 1532 slow
1533 | 1533 small
1534 | 1534 smart
1535 | 1535 smoke
1536 | 1536 smtp
1537 | 1537 snumber
1538 | 1538 so
1539 | 1539 social
1540 | 1540 societi
1541 | 1541 softwar
1542 | 1542 sold
1543 | 1543 solut
1544 | 1544 solv
1545 | 1545 some
1546 | 1546 someon
1547 | 1547 someth
1548 | 1548 sometim
1549 | 1549 son
1550 | 1550 song
1551 | 1551 soni
1552 | 1552 soon
1553 | 1553 sorri
1554 | 1554 sort
1555 | 1555 sound
1556 | 1556 sourc
1557 | 1557 south
1558 | 1558 space
1559 | 1559 spain
1560 | 1560 spam
1561 | 1561 spamassassin
1562 | 1562 spamd
1563 | 1563 spammer
1564 | 1564 speak
1565 | 1565 spec
1566 | 1566 special
1567 | 1567 specif
1568 | 1568 specifi
1569 | 1569 speech
1570 | 1570 speed
1571 | 1571 spend
1572 | 1572 sponsor
1573 | 1573 sport
1574 | 1574 spot
1575 | 1575 src
1576 | 1576 ssh
1577 | 1577 st
1578 | 1578 stabl
1579 | 1579 staff
1580 | 1580 stai
1581 | 1581 stand
1582 | 1582 standard
1583 | 1583 star
1584 | 1584 start
1585 | 1585 state
1586 | 1586 statement
1587 | 1587 statu
1588 | 1588 step
1589 | 1589 steve
1590 | 1590 still
1591 | 1591 stock
1592 | 1592 stop
1593 | 1593 storag
1594 | 1594 store
1595 | 1595 stori
1596 | 1596 strategi
1597 | 1597 stream
1598 | 1598 street
1599 | 1599 string
1600 | 1600 strip
1601 | 1601 strong
1602 | 1602 structur
1603 | 1603 studi
1604 | 1604 stuff
1605 | 1605 stupid
1606 | 1606 style
1607 | 1607 subject
1608 | 1608 submit
1609 | 1609 subscrib
1610 | 1610 subscript
1611 | 1611 substanti
1612 | 1612 success
1613 | 1613 such
1614 | 1614 suffer
1615 | 1615 suggest
1616 | 1616 suit
1617 | 1617 sum
1618 | 1618 summari
1619 | 1619 summer
1620 | 1620 sun
1621 | 1621 super
1622 | 1622 suppli
1623 | 1623 support
1624 | 1624 suppos
1625 | 1625 sure
1626 | 1626 surpris
1627 | 1627 suse
1628 | 1628 suspect
1629 | 1629 sweet
1630 | 1630 switch
1631 | 1631 system
1632 | 1632 tab
1633 | 1633 tabl
1634 | 1634 tablet
1635 | 1635 tag
1636 | 1636 take
1637 | 1637 taken
1638 | 1638 talk
1639 | 1639 tape
1640 | 1640 target
1641 | 1641 task
1642 | 1642 tax
1643 | 1643 teach
1644 | 1644 team
1645 | 1645 tech
1646 | 1646 technic
1647 | 1647 techniqu
1648 | 1648 technolog
1649 | 1649 tel
1650 | 1650 telecom
1651 | 1651 telephon
1652 | 1652 tell
1653 | 1653 temperatur
1654 | 1654 templ
1655 | 1655 ten
1656 | 1656 term
1657 | 1657 termin
1658 | 1658 terror
1659 | 1659 terrorist
1660 | 1660 test
1661 | 1661 texa
1662 | 1662 text
1663 | 1663 than
1664 | 1664 thank
1665 | 1665 that
1666 | 1666 the
1667 | 1667 thei
1668 | 1668 their
1669 | 1669 them
1670 | 1670 themselv
1671 | 1671 then
1672 | 1672 theori
1673 | 1673 there
1674 | 1674 therefor
1675 | 1675 these
1676 | 1676 thi
1677 | 1677 thing
1678 | 1678 think
1679 | 1679 thinkgeek
1680 | 1680 third
1681 | 1681 those
1682 | 1682 though
1683 | 1683 thought
1684 | 1684 thousand
1685 | 1685 thread
1686 | 1686 threat
1687 | 1687 three
1688 | 1688 through
1689 | 1689 thu
1690 | 1690 thursdai
1691 | 1691 ti
1692 | 1692 ticket
1693 | 1693 tim
1694 | 1694 time
1695 | 1695 tip
1696 | 1696 tire
1697 | 1697 titl
1698 | 1698 tm
1699 | 1699 to
1700 | 1700 todai
1701 | 1701 togeth
1702 | 1702 token
1703 | 1703 told
1704 | 1704 toll
1705 | 1705 tom
1706 | 1706 toner
1707 | 1707 toni
1708 | 1708 too
1709 | 1709 took
1710 | 1710 tool
1711 | 1711 top
1712 | 1712 topic
1713 | 1713 total
1714 | 1714 touch
1715 | 1715 toward
1716 | 1716 track
1717 | 1717 trade
1718 | 1718 tradit
1719 | 1719 traffic
1720 | 1720 train
1721 | 1721 transact
1722 | 1722 transfer
1723 | 1723 travel
1724 | 1724 treat
1725 | 1725 tree
1726 | 1726 tri
1727 | 1727 trial
1728 | 1728 trick
1729 | 1729 trip
1730 | 1730 troubl
1731 | 1731 true
1732 | 1732 truli
1733 | 1733 trust
1734 | 1734 truth
1735 | 1735 try
1736 | 1736 tue
1737 | 1737 tuesdai
1738 | 1738 turn
1739 | 1739 tv
1740 | 1740 two
1741 | 1741 type
1742 | 1742 uk
1743 | 1743 ultim
1744 | 1744 un
1745 | 1745 under
1746 | 1746 understand
1747 | 1747 unfortun
1748 | 1748 uniqu
1749 | 1749 unison
1750 | 1750 unit
1751 | 1751 univers
1752 | 1752 unix
1753 | 1753 unless
1754 | 1754 unlik
1755 | 1755 unlimit
1756 | 1756 unseen
1757 | 1757 unsolicit
1758 | 1758 unsubscrib
1759 | 1759 until
1760 | 1760 up
1761 | 1761 updat
1762 | 1762 upgrad
1763 | 1763 upon
1764 | 1764 urgent
1765 | 1765 url
1766 | 1766 us
1767 | 1767 usa
1768 | 1768 usag
1769 | 1769 usb
1770 | 1770 usd
1771 | 1771 usdollarnumb
1772 | 1772 useless
1773 | 1773 user
1774 | 1774 usr
1775 | 1775 usual
1776 | 1776 util
1777 | 1777 vacat
1778 | 1778 valid
1779 | 1779 valu
1780 | 1780 valuabl
1781 | 1781 var
1782 | 1782 variabl
1783 | 1783 varieti
1784 | 1784 variou
1785 | 1785 ve
1786 | 1786 vendor
1787 | 1787 ventur
1788 | 1788 veri
1789 | 1789 verifi
1790 | 1790 version
1791 | 1791 via
1792 | 1792 video
1793 | 1793 view
1794 | 1794 virtual
1795 | 1795 visa
1796 | 1796 visit
1797 | 1797 visual
1798 | 1798 vnumber
1799 | 1799 voic
1800 | 1800 vote
1801 | 1801 vs
1802 | 1802 vulner
1803 | 1803 wa
1804 | 1804 wai
1805 | 1805 wait
1806 | 1806 wake
1807 | 1807 walk
1808 | 1808 wall
1809 | 1809 want
1810 | 1810 war
1811 | 1811 warm
1812 | 1812 warn
1813 | 1813 warranti
1814 | 1814 washington
1815 | 1815 wasn
1816 | 1816 wast
1817 | 1817 watch
1818 | 1818 water
1819 | 1819 we
1820 | 1820 wealth
1821 | 1821 weapon
1822 | 1822 web
1823 | 1823 weblog
1824 | 1824 websit
1825 | 1825 wed
1826 | 1826 wednesdai
1827 | 1827 week
1828 | 1828 weekli
1829 | 1829 weight
1830 | 1830 welcom
1831 | 1831 well
1832 | 1832 went
1833 | 1833 were
1834 | 1834 west
1835 | 1835 what
1836 | 1836 whatev
1837 | 1837 when
1838 | 1838 where
1839 | 1839 whether
1840 | 1840 which
1841 | 1841 while
1842 | 1842 white
1843 | 1843 whitelist
1844 | 1844 who
1845 | 1845 whole
1846 | 1846 whose
1847 | 1847 why
1848 | 1848 wi
1849 | 1849 wide
1850 | 1850 width
1851 | 1851 wife
1852 | 1852 will
1853 | 1853 william
1854 | 1854 win
1855 | 1855 window
1856 | 1856 wing
1857 | 1857 winner
1858 | 1858 wireless
1859 | 1859 wish
1860 | 1860 with
1861 | 1861 within
1862 | 1862 without
1863 | 1863 wnumberp
1864 | 1864 woman
1865 | 1865 women
1866 | 1866 won
1867 | 1867 wonder
1868 | 1868 word
1869 | 1869 work
1870 | 1870 worker
1871 | 1871 world
1872 | 1872 worldwid
1873 | 1873 worri
1874 | 1874 worst
1875 | 1875 worth
1876 | 1876 would
1877 | 1877 wouldn
1878 | 1878 write
1879 | 1879 written
1880 | 1880 wrong
1881 | 1881 wrote
1882 | 1882 www
1883 | 1883 ximian
1884 | 1884 xml
1885 | 1885 xp
1886 | 1886 yahoo
1887 | 1887 ye
1888 | 1888 yeah
1889 | 1889 year
1890 | 1890 yesterdai
1891 | 1891 yet
1892 | 1892 york
1893 | 1893 you
1894 | 1894 young
1895 | 1895 your
1896 | 1896 yourself
1897 | 1897 zdnet
1898 | 1898 zero
1899 | 1899 zip
1900 |
--------------------------------------------------------------------------------