Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 6a1474a

Browse files
committedFeb 27, 2018
Logistic Regression minor update
1 parent 05eaf92 commit 6a1474a

4 files changed

+55140
-126
lines changed
 

‎LogisticRegression.ipynb

+284-71
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
"source": [
77
"# Logistic Regression\n",
88
"\n",
9-
"Logistic regression is a classification method. The main goal is learning a function that returns a yes or no answer\n",
10-
"when presented as input a so-called feature vector. \n",
9+
"Logistic regression is a classification method. Its main goal is learning a function that __returns a yes or no answer__\n",
10+
"when presented as input a so-called __feature__ vector. \n",
1111
"\n",
1212
"As an example, suppose we are given a dataset, such as the one below:\n",
1313
"\n",
@@ -94,21 +94,6 @@
9494
"\\end{eqnarray}"
9595
]
9696
},
97-
{
98-
"cell_type": "code",
99-
"execution_count": 1,
100-
"metadata": {
101-
"collapsed": true,
102-
"scrolled": true
103-
},
104-
"outputs": [],
105-
"source": [
106-
"%matplotlib inline\n",
107-
"import numpy as np\n",
108-
"import matplotlib as mpl\n",
109-
"import matplotlib.pylab as plt\n"
110-
]
111-
},
11297
{
11398
"cell_type": "markdown",
11499
"metadata": {},
@@ -184,6 +169,232 @@
184169
"\n"
185170
]
186171
},
172+
{
173+
"cell_type": "code",
174+
"execution_count": 153,
175+
"metadata": {
176+
"collapsed": true
177+
},
178+
"outputs": [],
179+
"source": [
180+
"%matplotlib inline\n",
181+
"import numpy as np\n",
182+
"import matplotlib as mpl\n",
183+
"import matplotlib.pylab as plt\n",
184+
"\n",
185+
"from ipywidgets import interact, interactive, fixed\n",
186+
"import ipywidgets as widgets\n",
187+
"from IPython.display import clear_output, display, HTML\n",
188+
"from matplotlib import rc\n",
189+
"\n",
190+
"import scipy as sc\n",
191+
"import scipy.optimize as opt\n",
192+
"\n",
193+
"mpl.rc('font',**{'size': 26, 'family':'sans-serif','sans-serif':['Helvetica']})\n",
194+
"mpl.rc('text', usetex=True)\n"
195+
]
196+
},
197+
{
198+
"cell_type": "code",
199+
"execution_count": 155,
200+
"metadata": {},
201+
"outputs": [],
202+
"source": [
203+
"\n",
204+
"def sigmoid(x):\n",
205+
" return 1/(1+np.exp(-x))\n",
206+
"\n",
207+
"def dsigmoid(x):\n",
208+
" s = sigmoid(x)\n",
209+
" return s*(1-s)\n",
210+
"\n",
211+
"def inv_sigmoid(p=0.5):\n",
212+
" xs = opt.bisect(lambda x: sigmoid(x)-p, a=-100, b=100)\n",
213+
" return xs\n",
214+
"\n",
215+
"def inv_sigmoid1D(w, b, p=0.5):\n",
216+
" xs = opt.bisect(lambda x: sigmoid(w*x+b)-p, a=-100, b=100)\n",
217+
" return xs\n",
218+
" "
219+
]
220+
},
221+
{
222+
"cell_type": "markdown",
223+
"metadata": {},
224+
"source": [
225+
"### Plotting the Sigmoid"
226+
]
227+
},
228+
{
229+
"cell_type": "code",
230+
"execution_count": 158,
231+
"metadata": {},
232+
"outputs": [
233+
{
234+
"data": {
235+
"application/vnd.jupyter.widget-view+json": {
236+
"model_id": "60ca092bd27947bb9d636bedf46d5c61",
237+
"version_major": 2,
238+
"version_minor": 0
239+
},
240+
"text/html": [
241+
"<p>Failed to display Jupyter Widget of type <code>interactive</code>.</p>\n",
242+
"<p>\n",
243+
" If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n",
244+
" that the widgets JavaScript is still loading. If this message persists, it\n",
245+
" likely means that the widgets JavaScript library is either not installed or\n",
246+
" not enabled. See the <a href=\"https://ipywidgets.readthedocs.io/en/stable/user_install.html\">Jupyter\n",
247+
" Widgets Documentation</a> for setup instructions.\n",
248+
"</p>\n",
249+
"<p>\n",
250+
" If you're reading this message in another notebook frontend (for example, a static\n",
251+
" rendering on GitHub or <a href=\"https://nbviewer.jupyter.org/\">NBViewer</a>),\n",
252+
" it may mean that your frontend doesn't currently support widgets.\n",
253+
"</p>\n"
254+
],
255+
"text/plain": [
256+
"interactive(children=(FloatSlider(value=0.0, description='w', max=3.0, min=-3.0), FloatSlider(value=0.0, description='b', max=10.0, min=-10.0), Output()), _dom_classes=('widget-interact',))"
257+
]
258+
},
259+
"metadata": {},
260+
"output_type": "display_data"
261+
}
262+
],
263+
"source": [
264+
" \n",
265+
"fig = plt.figure(figsize=(10,6))\n",
266+
"ax = fig.gca()\n",
267+
"ax.set_ylim([-0.1,1.1])\n",
268+
"x = np.linspace(-10,10,100)\n",
269+
"ax.set_xlim([-10,10])\n",
270+
"\n",
271+
"ln = plt.Line2D(x, sigmoid(x))\n",
272+
"ln2 = plt.axvline([0], ls= ':', color='k')\n",
273+
"ln_left = plt.axvline([0], ls= ':', color='b')\n",
274+
"ln_right = plt.axvline([0], ls= ':', color='r')\n",
275+
"\n",
276+
"ax.add_line(ln)\n",
277+
"plt.close(fig)\n",
278+
"ax.set_xlabel('$x$')\n",
279+
"ax.set_ylabel('$\\sigma(wx + b)$')\n",
280+
"\n",
281+
"def plot_fun(w, b):\n",
282+
" ln.set_ydata(sigmoid(w*x+b))\n",
283+
" if np.abs(w)>0.00001:\n",
284+
" ln2.set_xdata(inv_sigmoid1D(w,b,0.5))\n",
285+
" ln_left.set_xdata(inv_sigmoid1D(w,b,0.25))\n",
286+
" ln_right.set_xdata(inv_sigmoid1D(w,b,0.75))\n",
287+
" display(fig)\n",
288+
" \n",
289+
"res = interact(plot_fun, w=(-3, 3, 0.1), b=(-10.0,10.0,0.1)) "
290+
]
291+
},
292+
{
293+
"cell_type": "code",
294+
"execution_count": 157,
295+
"metadata": {
296+
"scrolled": true
297+
},
298+
"outputs": [
299+
{
300+
"data": {
301+
"application/vnd.jupyter.widget-view+json": {
302+
"model_id": "338bb9459a3a4a5993f8821def86ef1e",
303+
"version_major": 2,
304+
"version_minor": 0
305+
},
306+
"text/html": [
307+
"<p>Failed to display Jupyter Widget of type <code>interactive</code>.</p>\n",
308+
"<p>\n",
309+
" If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n",
310+
" that the widgets JavaScript is still loading. If this message persists, it\n",
311+
" likely means that the widgets JavaScript library is either not installed or\n",
312+
" not enabled. See the <a href=\"https://ipywidgets.readthedocs.io/en/stable/user_install.html\">Jupyter\n",
313+
" Widgets Documentation</a> for setup instructions.\n",
314+
"</p>\n",
315+
"<p>\n",
316+
" If you're reading this message in another notebook frontend (for example, a static\n",
317+
" rendering on GitHub or <a href=\"https://nbviewer.jupyter.org/\">NBViewer</a>),\n",
318+
" it may mean that your frontend doesn't currently support widgets.\n",
319+
"</p>\n"
320+
],
321+
"text/plain": [
322+
"interactive(children=(FloatSlider(value=-0.2999999999999998, description='w0', max=3.0, min=-3.5), FloatSlider(value=0.5, description='w1', max=4.0, min=-3.0), FloatSlider(value=0.5, description='w2', max=4.0, min=-3.0), Output()), _dom_classes=('widget-interact',))"
323+
]
324+
},
325+
"metadata": {},
326+
"output_type": "display_data"
327+
}
328+
],
329+
"source": [
330+
"xl = -5.\n",
331+
"xr = 5.\n",
332+
"yl = -5.\n",
333+
"yr = 5.\n",
334+
"\n",
335+
"w = np.array([0.5, 2, 3])\n",
336+
"\n",
337+
"fig = plt.figure(figsize=(5,5))\n",
338+
"ax = fig.gca()\n",
339+
"ax.set_ylim([yl, yr])\n",
340+
"ax.set_xlim([xl, xr])\n",
341+
"ln = plt.Line2D([],[],color='k')\n",
342+
"ln_left = plt.Line2D([],[],ls= ':', color='b')\n",
343+
"ln_right = plt.Line2D([],[],ls= ':', color='r')\n",
344+
"\n",
345+
"ax.add_line(ln)\n",
346+
"ax.add_line(ln_left)\n",
347+
"ax.add_line(ln_right)\n",
348+
"plt.close(fig)\n",
349+
"ax.set_xlabel('$x_1$')\n",
350+
"#ax.grid(xdata=np.linspace(xl,xr,0.1))\n",
351+
"#ax.grid(ydata=np.linspace(yl,yr,0.1))\n",
352+
"ax.set_ylabel('$x_2$')\n",
353+
"\n",
354+
"ax.grid(True)\n",
355+
"def plot_boundry(w0,w1,w2):\n",
356+
" if w1 != 0:\n",
357+
" xa = -(w0+w2*yl)/w1\n",
358+
" xb = -(w0+w2*yr)/w1\n",
359+
" ln.set_xdata([xa, xb])\n",
360+
" ln.set_ydata([yl, yr])\n",
361+
"\n",
362+
" xa = -(-inv_sigmoid(0.25) + w0+w2*yl)/w1\n",
363+
" xb = -(-inv_sigmoid(0.25) + w0+w2*yr)/w1\n",
364+
" ln_left.set_xdata([xa, xb])\n",
365+
" ln_left.set_ydata([yl, yr])\n",
366+
"\n",
367+
" xa = -(-inv_sigmoid(0.75) + w0+w2*yl)/w1\n",
368+
" xb = -(-inv_sigmoid(0.75) + w0+w2*yr)/w1\n",
369+
" ln_right.set_xdata([xa, xb])\n",
370+
" ln_right.set_ydata([yl, yr])\n",
371+
" \n",
372+
" \n",
373+
" elif w2!=0:\n",
374+
" ya = -(w0+w1*xl)/w2\n",
375+
" yb = -(w0+w1*xr)/w2\n",
376+
" ln.set_xdata([xl, xr])\n",
377+
" ln.set_ydata([ya, yb])\n",
378+
"\n",
379+
" ya = -(-inv_sigmoid(0.25) + w0+w1*xl)/w2\n",
380+
" yb = -(-inv_sigmoid(0.25) + w0+w1*xr)/w2\n",
381+
" ln_left.set_xdata([xl, xr])\n",
382+
" ln_left.set_ydata([ya, yb])\n",
383+
"\n",
384+
" ya = -(-inv_sigmoid(0.75) + w0+w1*xl)/w2\n",
385+
" yb = -(-inv_sigmoid(0.75) + w0+w1*xr)/w2\n",
386+
" ln_right.set_xdata([xl, xr])\n",
387+
" ln_right.set_ydata([ya, yb]) \n",
388+
" \n",
389+
" else:\n",
390+
" ln.set_xdata([])\n",
391+
" ln.set_ydata([])\n",
392+
" \n",
393+
" display(fig)\n",
394+
"\n",
395+
"res = interact(plot_boundry, w0=(-3.5, 3, 0.1), w1=(-3.,4,0.1), w2=(-3.,4,0.1)) "
396+
]
397+
},
187398
{
188399
"cell_type": "markdown",
189400
"metadata": {},
@@ -483,7 +694,7 @@
483694
},
484695
{
485696
"cell_type": "code",
486-
"execution_count": 52,
697+
"execution_count": 165,
487698
"metadata": {
488699
"collapsed": true
489700
},
@@ -494,18 +705,44 @@
494705
"def sigmoid(t):\n",
495706
" return np.exp(t)/(1+np.exp(t))\n",
496707
"\n",
497-
"D = 5\n",
498-
"N = 200\n",
708+
"D = 3\n",
709+
"N = 100\n",
499710
"\n",
500711
"# Some random features\n",
501712
"X = np.random.randn(N,D)\n",
713+
"X[:,0] = 1\n",
502714
"\n",
503715
"# Generate a random paramater vector\n",
504716
"w_true = np.random.randn(D,1)\n",
505717
"\n",
506718
"# Generate class labels\n",
507719
"pi = sigmoid(np.dot(X, w_true))\n",
508-
"y = np.array([1 if u else 0 for u in np.random.rand(N,1) < pi]).reshape((N,1))\n"
720+
"y = np.array([1 if u else 0 for u in np.random.rand(N,1) < pi]).reshape((N))\n"
721+
]
722+
},
723+
{
724+
"cell_type": "code",
725+
"execution_count": 168,
726+
"metadata": {
727+
"scrolled": true
728+
},
729+
"outputs": [
730+
{
731+
"data": {
732+
"image/png": "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\nxBbhUivRL14AAAAASUVORK5CYII=\n",
733+
"text/plain": [
734+
"<matplotlib.figure.Figure at 0x11d3cf518>"
735+
]
736+
},
737+
"metadata": {},
738+
"output_type": "display_data"
739+
}
740+
],
741+
"source": [
742+
"plt.plot(X[y==1,1],X[y==1,2],'xb')\n",
743+
"plt.plot(X[y==0,1],X[y==0,2],'or')\n",
744+
"plt.show()\n",
745+
"\n"
509746
]
510747
},
511748
{
@@ -573,6 +810,8 @@
573810
}
574811
],
575812
"source": [
813+
"\n",
814+
"\n",
576815
"# Implement Gradient Descent\n",
577816
"w = np.random.randn(D,1)\n",
578817
"\n",
@@ -588,45 +827,6 @@
588827
"print(w_true.T)\n"
589828
]
590829
},
591-
{
592-
"cell_type": "code",
593-
"execution_count": 34,
594-
"metadata": {},
595-
"outputs": [
596-
{
597-
"data": {
598-
"text/plain": [
599-
"array([[1],\n",
600-
" [1],\n",
601-
" [0],\n",
602-
" [1],\n",
603-
" [1],\n",
604-
" [1],\n",
605-
" [1],\n",
606-
" [0],\n",
607-
" [1],\n",
608-
" [0],\n",
609-
" [1],\n",
610-
" [1],\n",
611-
" [0],\n",
612-
" [0],\n",
613-
" [0],\n",
614-
" [1],\n",
615-
" [1],\n",
616-
" [1],\n",
617-
" [0],\n",
618-
" [0]])"
619-
]
620-
},
621-
"execution_count": 34,
622-
"metadata": {},
623-
"output_type": "execute_result"
624-
}
625-
],
626-
"source": [
627-
"y.reshape((N,1))"
628-
]
629-
},
630830
{
631831
"cell_type": "markdown",
632832
"metadata": {},
@@ -656,15 +856,18 @@
656856
},
657857
{
658858
"cell_type": "code",
659-
"execution_count": 1,
859+
"execution_count": 152,
660860
"metadata": {},
661861
"outputs": [
662862
{
663-
"name": "stderr",
664-
"output_type": "stream",
665-
"text": [
666-
"/Users/cemgil/anaconda/lib/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.\n",
667-
" warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')\n"
863+
"ename": "ModuleNotFoundError",
864+
"evalue": "No module named 'cvxpy'",
865+
"output_type": "error",
866+
"traceback": [
867+
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
868+
"\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)",
869+
"\u001b[0;32m<ipython-input-152-53c98774130d>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmagic\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'matplotlib inline'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mcvxpy\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mmpl\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpylab\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
870+
"\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'cvxpy'"
668871
]
669872
}
670873
],
@@ -1486,21 +1689,31 @@
14861689
],
14871690
"metadata": {
14881691
"kernelspec": {
1489-
"display_name": "Python 2",
1692+
"display_name": "Python [conda root]",
14901693
"language": "python",
1491-
"name": "python2"
1694+
"name": "conda-root-py"
14921695
},
14931696
"language_info": {
14941697
"codemirror_mode": {
14951698
"name": "ipython",
1496-
"version": 2
1699+
"version": 3
14971700
},
14981701
"file_extension": ".py",
14991702
"mimetype": "text/x-python",
15001703
"name": "python",
15011704
"nbconvert_exporter": "python",
1502-
"pygments_lexer": "ipython2",
1503-
"version": "2.7.13"
1705+
"pygments_lexer": "ipython3",
1706+
"version": "3.6.1"
1707+
},
1708+
"toc": {
1709+
"nav_menu": {},
1710+
"number_sections": true,
1711+
"sideBar": true,
1712+
"skip_h1_title": false,
1713+
"toc_cell": false,
1714+
"toc_position": {},
1715+
"toc_section_display": "block",
1716+
"toc_window_display": false
15041717
}
15051718
},
15061719
"nbformat": 4,

‎Regression.ipynb

+3-1
Original file line numberDiff line numberDiff line change
@@ -1649,7 +1649,9 @@
16491649
{
16501650
"cell_type": "code",
16511651
"execution_count": 54,
1652-
"metadata": {},
1652+
"metadata": {
1653+
"collapsed": true
1654+
},
16531655
"outputs": [],
16541656
"source": [
16551657
"sg = np.argsort(x)\n"

‎Visualizations.ipynb

+54,772-54
Large diffs are not rendered by default.

‎bouncing_ball_animation_01.py

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
Created on Sun Feb 7 01:30:34 2016
4+
5+
@author: cemgil
6+
7+
Bouncing Ball with x and y coordinates
8+
9+
10+
"""
11+
12+
import numpy as np
13+
import matplotlib.pyplot as plt
14+
from matplotlib.animation import FuncAnimation
15+
16+
17+
# Create new Figure and an Axes which fills it.
18+
fig = plt.figure(figsize=(7, 7))
19+
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], frameon=True)
20+
ax.set_xlim(0, 1), ax.set_xticks([])
21+
ax.set_ylim(0, 1), ax.set_yticks([])
22+
23+
global x
24+
global y
25+
global N
26+
27+
# Number of particles to simulate
28+
N = 1
29+
x = np.zeros((2,N))
30+
x[0,:] = np.random.rand(1,N)
31+
x[1,:] = np.random.randn(1,N)/10
32+
y = np.zeros((2,N))
33+
y[0,:] = 0.9
34+
y[1,:] = 0
35+
ln, = plt.plot(x[0,:], y[0,:], 'go')
36+
ln2, = plt.plot([x[0,0], 0], [y[0,0], 0], '--')
37+
38+
lnx, = plt.plot([x[0,0], x[0,0]], [y[0,0], 0], 'b--')
39+
lny, = plt.plot([x[0,0], 0], [y[0,0], y[0,0]], 'r--')
40+
41+
global A
42+
A = np.matrix('[1,0.05;0,1]')
43+
44+
45+
def update(frame_number):
46+
global A
47+
global x
48+
global y
49+
global N
50+
#e = np.matrix('[0;1]')*0.002*np.random.randn(1,N)
51+
#e = 0
52+
x = A*x
53+
y = A*y + np.matrix('[0;-1]')*0.005
54+
for i in range(N):
55+
if x[0,i]<0:
56+
x[0,i]=0
57+
x[1,i]=-1.0*x[1,i]
58+
if x[0,i]>1:
59+
x[0,i] = 1
60+
x[1,i]=-1.0*x[1,i]
61+
if y[0,i]<0:
62+
y[0,i]=0
63+
y[1,i]=-1.05*y[1,i]
64+
if y[0,i]>1:
65+
y[0,i] = 1
66+
y[1,i]=-0.2*y[1,i]
67+
68+
ln.set_xdata(x[0,:].tolist()[0])
69+
ln2.set_xdata([x[0,0], 0])
70+
lnx.set_xdata([x[0,0], x[0,0]])
71+
lny.set_xdata([0, x[0,0]])
72+
# ln.set_ydata(y[0,:])
73+
ln.set_ydata(y[0,:].tolist()[0])
74+
ln2.set_ydata([y[0,0], 0])
75+
lnx.set_ydata([0, y[0,0]])
76+
lny.set_ydata([y[0,0], y[0,0]])
77+
fig.gca().set_title(frame_number)
78+
return ln
79+
80+
animation = FuncAnimation(fig, update, interval=5)
81+
plt.show()

0 commit comments

Comments
 (0)
Please sign in to comment.