Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
{
"cells": [
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"application/javascript": [
"// avoids scrollboxes for plots\n",
"IPython.OutputArea.prototype._should_scroll = function(lines) {\n",
" return false;\n",
"}"
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%javascript\n",
"// avoids scrollboxes for plots\n",
"IPython.OutputArea.prototype._should_scroll = function(lines) {\n",
" return false;\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def plot_decision_surface(model, marker=\".\", N=400):\n",
" x, y = np.linspace(-1, 1, N), np.linspace(-1, 1, N)\n",
" points = np.array(np.meshgrid(x, y)).T.reshape(-1, 2)\n",
" classes = np.array(model(points)) \n",
" plt.figure(figsize=(6, 6))\n",
" plt.plot(points[classes][:, 0], points[classes][:, 1], \"g\" + marker, markersize=1, alpha=.05);\n",
" plt.plot(points[~classes][:, 0], points[~classes][:, 1], \"r\" + marker, markersize=1, alpha=.05);\n",
"\n",
"\n",
"def plot_classifier_surface(clf, points=None, marker=\"x\", N=200):\n",
" if points is None:\n",
" x, y = np.linspace(-1, 1, N), np.linspace(-1, 1, N)\n",
" points = np.array(np.meshgrid(x, y)).T.reshape(-1, 2)\n",
" \n",
" classes = np.array(clf.predict(points)).astype(float) \n",
" levels = sorted(set(classes))\n",
" print(\"levels in contour plot:\", levels)\n",
" \n",
" plt.contour(points[:, 0].reshape(N, N), points[:, 1].reshape(N, N), classes.reshape(N, N), levels=levels, alpha=.5)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# some functions for creating labels\n",
"\n",
"def np_array_adapter(function):\n",
" def wrapped(p):\n",
" assert p.shape[1] == 2, \"matrix must have two columns\"\n",
" x, y = p[:, 0], p[:, 1]\n",
" return function(x, y)\n",
" return wrapped\n",
"\n",
"@np_array_adapter\n",
"def xor(x, y):\n",
" return x * y > 0\n",
"\n",
"@np_array_adapter\n",
"def circle(x, y):\n",
" return x ** 2 + y ** 2 > .7\n",
"\n",
"@np_array_adapter\n",
"def ellipsis(x, y):\n",
" return 3 * x ** 2 + .7 * y ** 2 + 2 * x * y < .3\n",
"\n",
"@np_array_adapter\n",
"def two_circles(x, y):\n",
" return np.logical_or((x-.3) ** 2 + (y - .3) ** 2 <.15, (x+.4) ** 2 + (y + .4) ** 2 < .25)\n",
"\n",
"plot_decision_surface(xor)"
]
},
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(40000, 2)\n",
"196 out of 200 classified correctly\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.svm import LinearSVC, SVC\n",
"from sklearn.preprocessing import PolynomialFeatures\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.pipeline import Pipeline\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"def plot_classifier_surface(clf, features, marker=\"x\", N=200):\n",
" features = np.array(features)\n",
" xmin, ymin = features.min(axis=0)\n",
" xmax, ymax = features.max(axis=0)\n",
" \n",
" x = np.linspace(xmin, xmax, N)\n",
" y = np.linspace(ymin, ymax, N) \n",
" \n",
" points = np.array(np.meshgrid(x, y)).T.reshape(-1, 2)\n",
" print(points.shape)\n",
" \n",
" classes = np.array(clf.predict(points)).astype(float) \n",
" levels = sorted(set(classes))\n",
" levels = [0, .5, 1]\n",
" # print(\"levels in contour plot:\", levels)\n",
" \n",
" plt.contour(points[:, 0].reshape(N, N), \n",
" points[:, 1].reshape(N, N), \n",
" classes.reshape(N, N), \n",
" levels=levels, \n",
" alpha=.5)\n",
"\n",
"\n",
"df = pd.read_csv(\"2d_points.csv\")\n",
"# df = pd.read_csv(\"xor.csv\")\n",
"\n",
"features = df.iloc[:, :-1]\n",
"labels = df.iloc[:, -1]\n",
"\n",
"plt.figure(figsize=(6, 6))\n",
"\n",
"colors = [\"rg\"[i] for i in labels]\n",
"plt.scatter(features.iloc[:, 0], features.iloc[:, 1], color=colors, marker='.')\n",
"\n",
"\n",
"# Pipeline(...) below creates a processing pipeline, which \n",
"# - first adds extra features x * y, x * x and y * y\n",
"# - then uses the specified classifier\n",
"#\n",
"# more about pipelines later...\n",
"\n",
"clf = Pipeline(steps=[(\"feature_engineering\", PolynomialFeatures(degree=2, include_bias=False)), \n",
" (\"classifier\", LinearSVC())])\n",
"\n",
"# clf = SVC(gamma=.1)\n",
"# clf = DecisionTreeClassifier(max_depth=7)\n",
"\n",
"clf.fit(features, labels)\n",
"\n",
"plot_classifier_surface(clf, features) \n",
"\n",
"predicted = clf.predict(features)\n",
"print(sum(predicted == labels), \"out of\", len(labels), \"classified correctly\")\n",
"plt.show()"
]
},
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.svm import SVC\n",
"from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.naive_bayes import GaussianNB, MultinomialNB, BernoulliNB\n",
"from sklearn.metrics import accuracy_score\n",
"from sklearn.model_selection import cross_val_score"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"accuracy is 0.985\n",
"crossval mean score is 0.8249921862791062\n",
"levels in contour plot: [0.0, 1.0]\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/uweschmitt/Projects/machinelearning-introduction-workshop/venv3.6/lib/python3.6/site-packages/matplotlib/contour.py:1230: UserWarning: No contour levels were found within the data range.\n",
" warnings.warn(\"No contour levels were found\"\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"clf = LogisticRegression()\n",
"clf = SVC(C=10, gamma=10) \n",
"# clf = RandomForestClassifier()\n",
"# clf = DecisionTreeClassifier(max_depth=19)\n",
"# clf = GradientBoostingClassifier()\n",
"\n",
"\n",
"\n",
"N = 20\n",
"x, y = np.linspace(-1, 1, N), np.linspace(-1, 1, N)\n",
"points = np.array(np.meshgrid(x, y)).T.reshape(-1, 2)\n",
"points.shape\n",
"\n",
"model = two_circles\n",
"classes = np.array(model(points))\n",
" \n",
"clf.fit(points, classes)\n",
"\n",
"\n",
"print(\"accuracy is\", accuracy_score(classes, clf.predict(points)))\n",
"scores = cross_val_score(clf, points, classes, cv=5)\n",
"print(\"crossval mean score is\", np.mean(scores))\n",
"\n",
"plot_decision_surface(model)\n",
"\n",
"plt.plot(points[:, 0], points[:, 1], \"k.\", markersize=2)\n",
"plt.title(\"dots are feature points\\nbg color is exact decision surface\\nlines are decision lines from clf\")\n",
"\n",
"plot_classifier_surface(clf)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}