-
Notifications
You must be signed in to change notification settings - Fork 9
/
Logistic_Regression.ipynb_bak
627 lines (627 loc) · 57.9 KB
/
Logistic_Regression.ipynb_bak
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
{
"metadata": {
"name": "",
"signature": "sha256:e50c6fc671171bd606a1d703570f063822ec06b7823ea4a06218ff12a913ef99"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"from sklearn.linear_model import LinearRegression as lr\n",
"import numpy as np\n",
"import random\n",
"'''\n",
"training:\n",
"banner_pos: 7\n",
"site_category: 24\n",
"app_category: 35\n",
"device_model: 7291 -- skip due to memory limited\n",
"device_type: 4\n",
"'''\n",
"\n",
"'''\n",
"target\n",
"2. banner_pos 4 7\n",
"3. site_category 7 24\n",
"4. app_domain 9 440 -- skip\n",
"5. app_category 10 35\n",
"6. device_type 14 4\n",
"7. device_conn_type 15 4\n",
"8. C15 17 8\n",
"9. C16 18 9\n",
"10. C18 20 4\n",
"11. C19 21 55\n",
"'''\n",
"\n",
"\n",
"pos = [0,7,7+24,7+24+35,7+24+35+4,7+24+35+4+4,7+24+35+4+4+8,7+24+35+4+4+8+9,7+24+35+4+4+8+9+4]\n",
"all_number = 7+24+35+4+4+8+9+4+55\n",
"\n",
"#pos = [0,7,7+24,7+24+35]\n",
"#all_number = 7+24+35+4\n",
"\n",
"data = []\n",
"label = []\n",
"count = 1\n",
"input_train_file = 'Data/train_1234_new_rehashed.txt'\n",
"with open(input_train_file,'r') as infile:\n",
" for line in infile:\n",
" \n",
" k = random.randint(1,10)\n",
" if k > 2:\n",
" continue\n",
" \n",
" if count % 100000 == 0:\n",
" print count\n",
" count += 1\n",
" \n",
" li = list(map(int, line.split(',')))\n",
"\n",
" data.append([0 for b in xrange(all_number)])\n",
" \n",
" for i in range(1,len(li)):\n",
" if i == 3:\n",
" continue\n",
" elif i > 3:\n",
" data[len(data) - 1][pos[i-2] + li[i]] = 1\n",
" else:\n",
" data[len(data) - 1][pos[i-1] + li[i]] = 1\n",
"\n",
" \n",
" label.append(li[0])\n",
" \n",
"print \"Done\"\n",
"\n",
"X = np.array(data)\n",
"Y = np.array(label)\n",
"lr_instance = lr()\n",
"lr_instance.fit(X, Y)\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"100000\n",
"200000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"300000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"400000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"500000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"600000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"700000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"800000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"900000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1000000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1100000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1200000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1300000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1400000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1500000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1600000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1700000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1800000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1900000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"2000000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"2100000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"2200000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"2300000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"2400000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"2500000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"2600000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"2700000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"2800000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"2900000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"3000000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"3100000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"3200000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"3300000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"Done"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
"LinearRegression(copy_X=True, fit_intercept=True, normalize=False)"
]
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"del data\n",
"del label"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#Validation\n",
"\n",
"validation_data = []\n",
"validation_label = []\n",
"input_validation_file = 'Data/validation_5_new_rehashed.txt'\n",
"with open(input_validation_file,'r') as infile:\n",
" for line in infile:\n",
" \n",
" k = random.randint(1,10)\n",
" if k > 5:\n",
" continue\n",
" \n",
" li = list(map(int, line.split(',')))\n",
"\n",
" validation_data.append([0 for b in xrange(all_number)])\n",
"\n",
" for i in range(1,len(li)):\n",
" if i == 3:\n",
" continue\n",
" elif i > 3:\n",
" validation_data[len(validation_data) - 1][pos[i-2] + li[i]] = 1\n",
" else:\n",
" validation_data[len(validation_data) - 1][pos[i-1] + li[i]] = 1\n",
" \n",
" validation_label.append(li[0])\n",
" \n",
"X_validation = np.array(validation_data)\n",
"Y_validation = np.array(validation_label)\n",
"result = lr_instance.predict(X_validation)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 17
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def ROC(label,result):\n",
" %matplotlib inline\n",
" from sklearn.utils import shuffle\n",
" from sklearn.metrics import roc_curve, auc\n",
" import pylab as pl\n",
" # Compute ROC curve and area the curve\n",
" Y = np.array(label)\n",
" fpr, tpr, thresholds = roc_curve(Y, result)\n",
" roc_auc = auc(fpr, tpr)\n",
" print \"Area under the ROC curve : %f\" % roc_auc\n",
"\n",
" # Plot ROC curve\n",
" #pl.clf()\n",
" pl.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)\n",
" pl.plot([0, 1], [0, 1], 'k--')\n",
" pl.xlim([0.0, 1.0])\n",
" pl.ylim([0.0, 1.0])\n",
" pl.xlabel('False Positive Rate')\n",
" pl.ylabel('True Positive Rate')\n",
" pl.title('Receiver operating characteristic')\n",
" pl.legend(loc=\"lower right\")\n",
" pl.show()"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#new test data\n",
"ROC(Y_validation,result)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Area under the ROC curve : 0.682719\n"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nxhl699136+HDh1VVdc+ePdqxY0etUqWKli9fXjt16qSbNm0K+pwF47ffftOSJUumSW4tWrTQsWPH\nZrj9wIED9ZZbbsl0f+XKldNFixalLrdr105HjBiRujx79my95JJLMnxvfieGiK9KGj4c+vWDYiG4\nI6NChQr5v1NTqKnXpTAhIYHPP/+cq6++GoDk5GTmzZvHDTfccMp7unfvzrfffgvAd999R4cOHShd\nunRQx0tMTKRNmza0bduWLVu2sG7dOlq3bg24roxZVY2KCK+//jovvPACu3fv5qabbmLWrFkcOHAA\ngBMnTjB16lR6euPP9OnTh0OHDvHDDz8wa9YsPv74Y95+++0M971mzRrOPvvsNK+dffbZfP/992zf\nvp2///3v9OzZk23btqWuX7RoEceOHWP58uU88cQTPPbYYyQkJDBr1izmz5/PmjVrePbZZ1PP5x13\n3MEff/zBkiVLOHbsGPfff3+mn7VTp05UqFAhw0fnzp0zfM/PP/9MvXr1KFOmTOprDRo0YM2aNRlu\nv3DhQipUqEDr1q2pVq0anTt3ZuPGjanru3TpwpgxY9i9ezfz5s1jyZIldAi4Meuss85i7dq1mX6G\nfJWbbFLQDzLJhuvWqVaurJpJyS1oO3fuzNsOTFjI7HuSdpv8eeRGnTp1tGzZslq2bFkVkdRSgKqr\nWhERXbt27Snvmz17tpYuXVpVXelh4MCBQR9z0qRJWqlSpQx/uffp0yfLEkPdunX12WefTfOe5s2b\n64QJE1RV9YsvvtCzzjpLVVW3bt2qxYoV0z/++CN125dffllbtWqVYVz33nuvDhgwINO4k5OTtXbt\n2qlVKePGjdNSpUrp0aNHU9eXKVNG582bl/qejz76SOvVq5fh/r788kutUKFCpsfLjffee08vv/zy\nNK89+eSTescdd2S4/V/+8hctVaqUzpw5U//880/t2bOnNmvWLHX9/v37tWHDhlqkSBEVEX3vvffS\nvP/QoUMqIqnVioEy++5TGEsML78Md90FZcvm7v0pPY4aNmzIoUOH8jc4E5byKzXkhojwySefsG/f\nPj7++GMmTpxIQkICAJUrV6ZkyZJs2bLllPdt2bKF2NhYAGJjY/nzzz+DPubGjRtp0qQJRXLZM6Np\n06Zplnv06MHkyZMBmDRpUmpp4ffffyc5OZn69eun/tIeNGgQO3bsyHC/derUOeVzTJgwgUsuuYQK\nFSpQsWJFtmzZws6dO1PXN2jQIHUq3B07dnDo0CE6duyYerw+ffqkbn/o0CH69u1L3bp1KVeuHNdf\nfz379u1LLbHlh0qVKp3SeWDv3r1Urlw50+1bt25Np06dqF69Ok8//TTz588nMTERVaVJkybcdNNN\n7Nmzh6VLlzJkyJA0IzVv2rSJkiVLUrVq1Xz7DJmJ2MSwaxdMmgRZlA6zFNjjaMGCBUEXzY3JqyJF\nitC5c2cefPBB+vfvn/pas2bNmDJlyinbT5kyhRYtWgDQokUL5syZE/QPmdjYWBYtWsSJEydOWVem\nTJk0VTXx8fGnbFMsXR1tt27diIuLY/PmzXz88cf06NEDgNq1a1OkSBFWrVrFnj172LNnD/v27WNF\nJpOinH/++fz666+py7///ju33347Q4cOZffu3ezevZuaNWumuZAHxlK5cmVKlSrFnDlzUo+3d+/e\n1Av18OHDWbBgAQsXLmTfvn1Mnz49sAbiFB06dCAmJibDR8eOHTN8z7nnnsv69etTq9YAfvzxR847\n77wMtz/vvPPSJOjAWFasWMGGDRt45JFHOP3002nYsCE33HADHwTMNLZu3TrOPffcDPed73JTzCjo\nBxkUk55/XvW22zIsPWXp6NGj+swzz1iPoyiU0fcknKRvfN6xY4eWLl1aFyxYoKquV1JMTIy++uqr\nun//ft29e7c++eSTWqlSJd2yZUvq+6666ipt3769rlmzRk+cOKG///67Dhw4MMNeSYmJiVq9enUd\nMGCAbt68Wffv368LFy5UVdUxY8Zo3bp19eeff9bFixdrgwYNTqlKCow3RYcOHbRNmzbaqFGjNK93\n6dJFe/furatWrdITJ07ounXr9Ntvv83wXGzfvl3POOOM1IbbLVu2aOnSpXXhwoW6Z88eHTJkiBYv\nXlzfeecdVXVVSc2bN0+zj4ceekjbtWunS5cu1RMnTuimTZt0zpw5qqr60ksvaYsWLXTPnj36008/\naZs2bVREMm0Mz63WrVvrgAED9PDhwzp9+nStVKlSpj2tFixYoKVLl9ZZs2bptm3btHfv3tqiRQtV\ndR1dSpcurcOHD9f9+/fr8uXL9YILLtAnn3wy9f3WKymbxHD4sGq1aqorV2Z4LrK0YcMG7d69u27e\nvDnnbzZhLdISg6rqPffco9dee23q8ooVK7RDhw5atWpVrVmzpt5www1p6u1V3Y+bJ598Ui+66CKN\n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\n",
"text": [
"<matplotlib.figure.Figure at 0x1b12acc10>"
]
}
],
"prompt_number": 14
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"k = np.array([1,2,3])\n",
"k = list(k)\n",
"k"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"text": [
"[1, 2, 3]"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#old data\n",
"ROC(Y_validation,result)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Area under the ROC curve : 0.618585\n"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAEZCAYAAACTsIJzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd4VGX2wPHvoYlApAsIBFhsWEBQwIKRthQBBRtKUUR/\nKmsXWBcsIC6rriCuXVSwy8IiCgiiokFAikAioKCiSG9SQw0k5/fHe5NMwiRMysydJOfzPPMkM7ed\nuZnMue99m6gqxhhjTJoSfgdgjDEmulhiMMYYk4klBmOMMZlYYjDGGJOJJQZjjDGZWGIwxhiTiSUG\nEzIRWSkicX7H4TcReVVEHo3wMd8WkScjecxwEZHeIjIrj9vaZzACxPoxFE4i8gdwKpAKHAC+AO5W\n1X1+xlXUiEg/4DZVvdznOMYDG1T1cZ/jGA40VNW+ETjW27j3/Fi4j2UysxJD4aVAV1WtALQDWgER\nvYotCCJSqjge208iUrI4HtuEzhJDEaCqK4FZwOlpr4nIxSLynYjsEZFEEbkiYFkVERkvIptEZJeI\nTAlY1tVbf6+IzBeR8wOW/SEibUXkNBE5KCKVA5Y1FZEdaf/4ItJfRFZ5x/9cRGID1k0VkZtFJAFY\nHew9ichVIvKjiOwWkW9E5OwscdwjIgtF5E8RGSciJ+XiPfxNRL4D9ohISRH5h4isEZEk75jdvXUb\nAa8Cl3jLdnmvp9/WEZHWIrJRRO4Qkd9FZLNXykg7XlURmSYiO0Xka+9Yc7P7W4pIK+/vtltE1ovI\nzQGLy4vIBO9vtlBE/hKw3X+89feJyBIRaRWwbLiIfOTdAtsC3CIizUVkgff32SIiL4pI6YBtzhWR\nL724t4rIEBHpCAwBenrnI8Fbt6KIvOXtZ5OIPCkiJbxl/URknoiMEJF1wHDvtbkBx/pHwN9ruXfs\nO4BewN+9Y30a8Pdr5/1eUkSGen+7tPddJ7tza3JBVe1RCB/AWqCd9/sFwB/Avd7z2sBeoB8QA9wM\n7AGqess/AyYBFYFSwOXe60297a4GTsF9CawFSgccs633+2zg9oB4ngVe8X6/GtgAtAcqAy8A8wPW\nTQW+BZoAJwV5b2cCh3AloZLAP4BfgVLe8j+Ald77rAwsAJ7MxXv4Ebg87djAdUBN4GTgQdytuRre\nsluAuVniGw+M8H5vDSQDrwDVgdu97St6yycAE4GyQCNgM/BtNn/TesBB4EbvfVcBmnjL3vbeVw+g\nGjAN+Chg297euagE/BvYApTxlg33YrzXi6Ms0Axo4R3nUu+c3u+tH+NtPxgoA1QAWnjLhgHvZol7\nCvARUN/7m64A7vCW9fOO/S/c562s99pcb/m5uIuD07znZwE1s57nLJ/7tM/gYGAVcIb3/Hygit//\nm0Xh4XsA9sjjH879Iyd5j1Tg9YBlDwNfZFk/AZcgannrXxBkn68CYwOelwR2kJE4Av8pbwNme78L\nsB5o5T2fCQwN2E9V4ChQ13ueCvTN4b09BnwX8LwccBiIC4hjRMDyO4A1uXgPj+Vw7LT30s17nv4l\nFrDOeDISUWvgGFDNe17K+5ukfekmp50zb/m7WfcXsGwIkJjNsreBqQHPbwRWZbNuDC7BnO89Hw78\ndoLP0z+Bj73fbwL+BEoEWW848F7A8xqBf1vvtQeArwPO30G8JJX1nAKNcZ/lK7IeL/A8B7wW+Bn8\nGXjA7//FoviwW0mFl+KuiisC3YG+InKBt6wecLl3O2K3iOzG3WaqCdQFDqpqYpB91gN6B2zzJ+4q\n+rQg636Mu8VSE4gDUlV1XsB+hgTsZw3uC7J2wPaLcnhvtYBl6W9U9SDuqjJw+8D4EwJiDOU9ZDq2\nd1sr0Vt/l3f8ajnEl9UWVf3Ti/WYd8wKuBJEKS++NMuO3zxdHeC7bJYpmd/zVu8Yae9hkIj8JCJ7\ncIntpCzvIet7PlNEpnu3f/biSkpVvcV1gcWqmppDrGnq4W5JLw8450/g3nuaH1Q1OeibUl0OPAI8\nDWwTkddFpHwIxwV3vuaHuK7JBUsMhZyqpqrqVNztmtHey+uBeFWtHPCIUdV/427xlBORpkF2tx53\nmyBwuwqq+t8gx92NawnVE3cv+KMs+3kyy37Kq+rCgHWO5fC2NgMXpj3xvijOBjYFrBMYf7OAZaG8\nh/Rji0g9YBzuar2K99iEKzmA+0IWjhdKc74d3rGyxpqdDcBlOSwPFgcicjnuy7iPqlYCYnG34gLX\nT8my2au45HK6qlYExpDxfbABaCHBK4qzno8NuBLgOQHnu6Kqnh+wTk5/a1T1A1W9BDgHV4Lol82x\nstqAa3RhCpglhqJjFHCxiLQE3sddzd8sIpVFpKxXSVpbVbcAM4B/isgFIlJaMtqFvwHcICLdRaS8\n9+giIhWyOeaHuHvw13q/p3kNGCAiHUSkjFc5eX0u3stE4AJxFd2lgXuAjWRcTQvQXURqi0gV3BdJ\n2hd/bt/DEe+xE1f6GkLm0sU24Iws2ws5f2EBoKopuJLVQBGpJyJX4upNsksqHwANvav/Kl7FdZOA\nY2bnIK5EtldEauDu55+Uw/oA+4HdQKqItMHdZkwz3dvf0+IaGsSISAtv2VbgHPEq+73P02fAMyLS\nSERKiEhDCbGvgYhcJCItvb+z4BJYWklnG9BYsm899iZwp4h0FpFSItLY+zyYfLLEUER4tzLeAR5W\n1Y1AB6A/8BvuKnogGX/vvrir2Vm4f777vH0sxV39D8VdNf+K+8LI7otsKu4W1RZVXREQyye4eoJR\nuNsqK4COgeGe4L38grvP/aIXZyfcPf+0K0/FJZ+PvRhX4+6R5/o9qOpWXDJ4D/gBV9k6L2CV2cD3\nwEYR2R5w/MD95fR+7iHjNtAgXOkku9sqG7z3eh3uvnsC7go62DHTj+u951eAr3GV+itxV9PksO1w\nXKOFjbhK3JcC9pcE/BVX0vkR+AVXlwKu0cIBYLuILPFeuxmXaL7AJZtJuNuWOcWd9topwFjcLbxv\ncOf6WW/ZW7jbWjtF5GOO9xzu7/ayd9w3cJXbJp/C2sFNRMYBXYDtWYqWges85a1zEOinqkGbLxqT\nRkTW4jqdfe13LLklIpOA/ap6q9+xGJOdcJcYxuOugILyitZNVLUxcD+u5YUxRYaInOXd4jhJRHrj\nrsSnnGg7Y/wU1p6fqjpXROrnsMpVuNsfqOoiEakkIjVUdVs44zImgmJwFfO1cX0DnvIaCxgTtfwe\nEqA2me+FbsQ1QbPEYLKlqg38jiFUqroEOMPvOIzJjWiofM7a2iJ8lR7GGGNOyO8SwyZcq4M0dcjc\nVh0AEbFkYYwxeaCqJ2xanZXfJYapeO2nReRiYE929Qt+dxGPlsewYcN8jyFaHnYu7FwUp3Px00/K\n668r/fopZ52lxMQobdsqjzyiTJ+uzJmzjMaNG9OlSxc2bdqEat6vp8NaYhCRj3BjoFQTkQ24AbhK\nA6jq66o6Q0TiRGQFrm20NeEzxhhPUhK88w68+y5s2QJt28Ill8ADD8B550FJr2/6mDFjeOqppxg1\nahR9+/ZFJNeFhEzC3SrpphDW+Qdu9ExjjDHAH3/Aiy/C22+7ZPDEE9ChQ0YiyKp58+YkJiZy2mnB\nhjXLPb/rGEwutW7d2u8Qooadiwx2LjIU1nOhCvPmwfPPQ3w89O8Py5ZBvXon3rZVq4IdMqpQTO0p\nIloY4jTGmNw6fBgmTXIJISkJ7r8fbrkFKmQ3ulcuiAiah8pnSwzGGBNhv/8OM2e6x7ffQsuWrt6g\nc2cokU2ToOTkZEaOHEmlSpV48MEHQzpOXhOD3UoyxpgwO3QI5szJSAb79kGnTtC3r6tYrnKCMWET\nEhLo168fdevWZezYsWGP10oMxhgTBmvWZCSCefOgSRNXIujc2f2eXckgUFop4dVXX81TiyMrMRhj\njI8OHnSVxmnJ4OBBVyq49Vb44AOoXDn3+3zggQdYv359gbY4CoWVGIwxJg9U4ddfMxLB/PnQrJkr\nEXTq5EoF+exOQFJSEhUqVMhzvwSrfDbGmDA7cAC++SYjGSQnuyTQuTO0bw8VK/odYWZ2K8kYYwqY\nKvz8c0YiWLAALrrIJYJPP3W9j/NbKgBXl5CUlETVqlXzv7MCYCUGY4wJsH8/fP21SwSffw7HjmVU\nGrdrB6ecUrDHS2txdN111/HYY48V6L6txGCMMXmgCqtWZZQKFi2CFi1cIpg+Hc45p2BKBVkFa3EU\nLSwxGGOKnaQkmD07o1QALhHcey9MmQIxMeE9fmC/hEi3OAqF3UoyxhR5qvDjjxmlgu+/h4svzrhF\ndPbZ4SkVZOe5556jWrVqBTISak6sVZIxxgTYtw+++iqjVFCqVEYiaNOmYMYiinaWGIwxxZoqrFiR\nUSpYuhQuvTQjGZx5ZmRLBdHAEoMxptjZuxe+/DKjVFC2bEYiaN0aypf3N76EhAT27NlDmzZtfDl+\nXhOD31N7GmNMyFQhMRGeegri4qBOHXjrLdfLOD4efvsNXnoJunTxNykkJyczbNgwOnbsyM6dO/0L\nJI+sVZIxJqrt3p25VBAT43obDxniSgUnn+x3hJlFe4ujUNitJGNMVElNdaWCtLqC5cvh8sszbhE1\nbOh3hNl76aWXGDFiRIHNvZxfVsdgjCm0du2CL75wJYLPP4dKlTLGIIqLi75SQXaWLl1KrVq1oqaU\nYInBGFNopKa6+YzTSgUrV8IVV2SMTPqXv/gdYdFgicEYE9X+/DOjVDBrFlStmpEILr/ctSgyBcsS\ngzEmqqSmwpIlGaWCVatcZXFaMqhf3+8I8yZtjKMSJUowbNgwv8PJkSUGY4yvVN10lt9951oRzZoF\nNWpkJIJWreCkk/yOMn+yzr0cLXUJ2bHEYIyJqD17YPFiWLjQPRYtck1JW7Z0w1N36gSxsX5HWTDy\nO/eyXywxGGPCavdu+N//3GQ1CxfChg1w4YVuMLqLL3YJoVYtv6MMj8GDB7Nq1apCUUoIZInBGBMW\ne/bAhAkwejQ0agRXXukSwXnnuYHpioNDhw5RtmzZQlFKCGSJwRhTYFTdLGbvvANTp0KHDnDbbe5n\nIftuLNYsMRhjCsSCBTB4sOt0dsstLiFUq+Z3VJGRnJzMrl27qFmzpt+hFAgbRM8Yky8//wzXXgs9\ne8Ltt7shrB9+uPgkhYSEBJo3b84LL7zgdyi+s8RgTDG3dSsMGOCak7Zo4RJEv35QsqTfkUVG4Eio\nAwcOZOTIkX6H5LtiUnVkjMlq/34YNQpefNElgtWrXW/k4qQojIQaDlbHYEwxc/QovPkmPPkktG0L\n//xn4e2FnF9vvvkmZcqUKTT9EnLLKp+NMTlShSlT3DwGsbHwzDPQrJnfUZlwymtisFtJxhQD8+bB\n3/8OBw+6W0cdOvgdkYlmVvlsTBG2ahV07w69e7sK5mXLimdSSEhIYPr06X6HUWiENTGISJyILBOR\n5SJyb5DlJ4vIOyKSICJzROTqcMZjTHGxZQvceaeb5KZVK9fSqG9fKFHMLgUDWxwdOHDA73AKjbDd\nShKRksA4oD2wCfheRL5S1VUBq90CHFDVpiJSD/haRKZahYIxeZOUBM8+Cy+/DP37u4RQpYrfUfnD\nWhzlXTivH1oAa1T1D1U9CkwAspYI9gIxIlIaqAIctKRgTO4lJ8NLL8EZZ8C6dZCQ4BJEcU0KY8eO\nTe+XMG3aNEsKuRTOyufawIaA5xuBloErqOpHItIN+NOL5ZIwxmNMkaPqRjwdOhQaNnRzIDRp4ndU\n/mvVqpWVEvIhnInhhFf+InIPcAyoBZwPfCYi9VQ1Neu6w4cPT/+9devWtG7dusACNaYwmjPHtTQ6\nehRefRXat/c7ouhxzjnn+B2CL+Lj44mPj8/3fsLWj0FELgaGq2on7/kQIFVVnwlYZyLwlqrO8p4v\nAm5R1dVZ9mV3mIzx/Pgj/OMfsHIljBwJN95Y/CqVA6lqkeycVhCicRC9JcAZIlJfRMoAPYGpWdaZ\nDXQTkRIi8hegStakYIxxtm93g9u1aeN6LK9eDb16Fd+kkNbiaODAgX6HUuSE7VaSqh4Tkf7AFO84\nb6jqKhG501v+Oq5C+hxcEtkB3B+ueIwpzFauhG7dXJ+EX36BSpX8jshfWedeNgXLhsQwJsrNmOEG\nuRszxnVUK84K69zLfrEhMYwpYlTh+edds9NPP4VLrM0e//rXv1i6dKm1OAozKzEYE4WOHoW774aF\nC2HaNKhXz++IokNycjKlS5e2UkKIrMRgTBGxaxdcdx2ULw/z50NMjN8RRY8yZcr4HUKxUEzbMxgT\nnX75BS6+2A2H/cknxTcpJCcns379er/DKLYsMRgTJb7+Gi6/3M2zPGpU8ZlaM6u0uZeff/55v0Mp\ntiwxGBMFxo51fRL++1+47Ta/o/FH1rmXR48e7XdIxZbVMRjjo5QUGDgQPv/cTaZz+ul+R+QPGwk1\nulirJGN8sm+fG87i6FGYOBEqV/Y7Iv9MnDiRw4cPW7+EAmZzPhtTiKxd63oyx8XBf/4DpUv7HZEp\niqJxrCRjTBDz58Oll7oZ1l5+2ZKCiT6WGIyJoPfegx49YPx4uPdeKG53TRISEpgwYYLfYZgTsMRg\nTASkprrJdIYPh/h46NTJ74giK7DFUWrqcdOtmChjrZKMCbMDB+Dmm92w2QsXQvXqfkcUWdbiqPCx\nEoMxYbRpk6tgjomBr74qfknh7bfftrmXCyFrlWRMmCxZ4uZPuPdeNwVncatPAPj9998pW7asJQSf\nWHNVY6LI//4HAwbAG2+45GCMH2x0VWOigKqbh3nsWPjiC2ja1O+IIsfmXi46LDEYU0AOH3bjHP36\nKyxaBLVq+R1RZKTNqrZp0ybefPNNv8MxBcAqn40pANu2Qdu2cOwYzJlTfJJC2kioS5cuZcSIEX6H\nYwpIyIlBRMqGMxBjCqsVK6BlS/jrX+Gjj+Dkk/2OKPyyjoRqLY6KlhPeShKRFsAw4ByggYhcANyh\nqn8Ld3DGRLvp06F/fzfe0U03+R1N5Lz44os293IRdsJWSSLyA9AbeE9Vm3qv/aiq50YgvrQYrFWS\niSqqMGaMm1Dn44/drGvFybFjxyhZsqRVNke5cLZKKq2qK9M+ACJyElAMCsvGBJecDHffDYsXu57M\nsbF+RxR5pUpZu5WiLJQ6hl9E5GoAEYkF/gl8H9aojIlSO3dCx46usnnevKKfFJKTk/n111/9DsNE\nWCiJ4f+AnkAdYBlwGmD1C6bYWb3a3TJq3hymTHHDXBRlaS2OxowZ43coJsJCKQ+eqaq9Al8QkcuA\n+eEJyZjo89VX0Ls3PPWUq2wuypKTk/nnP//Ja6+9xujRo+nTp4/fIZkICyUxvARk7b8Z7DVjiqTX\nXnPDZU+cCFdc4Xc04ZWQkMAtt9xCvXr1rMVRMZZtYhCRS4BLgeoi8hCQVrNdHdgZgdiM8dWxYzBw\noBvaYt48OP10vyMKv61btzJ48GD69OljLY6KsZxKDGWAGKCk9zPNduCucAZljN/27oUbb4SUFFiw\nACpV8juiyOjcubPfIZgoEEo/hvqq+kdkwsk2BuvHYCLm99+hWzdo3dp1XLOWmaawyms/hlBaJR0U\nkVEiMkNEvvEeX+chRmOi3ty5cNll8Le/wcsvF92ksGzZMhvwzmQrlMQwHHf76C/Af4A9wJwwxmSM\nL955B6691v28+26/owmP5ORkHn/8cTp16sTJxWFQJ5MnodxKSlDVpiKyAmgClAXmquqFkQjQi8Fu\nJZmwSU2FoUPd5DrTpkGjRn5HFB7Lli2jX79+1KtXj9dff91aHBUD4RwS44j3cyHQD1hDRgslYwq1\nAwegTx/Xo3nhQqhWze+IwuODDz7gwQcfTO+XYC2OTE5CKTF0A+bimqk+AtQG/qWq34Q/vPQYrMRg\nCtzGja6S+YILXF+Fk07yO6Lw2bx5M4CVEoqZiM75LCItVHVxCOvFAc/jSiZvqOqLQdZpDozBNYnd\nraqtg6xjicEUqO+/hx494P77YdAgsAtoUxSFJTGIyHlAGyBRVeeKSBPgWeBUVb3gBAGVBH4G2gOb\ncAPv3aSqqwLWqYQbWqOjqm4UkWqq+meQfVliMAVm4kRXufzmm3D11X5HU/BSU1MpUcImZzRhaK4q\nIsOBt4EzgFdE5HVgCvAKoQ2H0QJYo6p/qOpRYAKQ9d+wFzBZVTcCBEsKxhQUVRgxAgYPhi+/LHpJ\nIa3FUa9evU68sjE5yKnyuQtwuaoeEpFTgfVAA1XdEuK+awMbAp5vBFpmWecMoLSIzAUqAKNU9YMQ\n929MyA4dgttug99+g0WLoGZNvyMqWGktjmJjYxk7dqzf4ZhCLqfyZilVPQSgqtuBVblICgCh3Psp\nDbQGrgeuBUaIiDWuNgVq61Zo08aVGOLji1ZSSJt7uVOnTgwaNMjmXjYFIqcSw9le34U0DQOeq6o2\nPsG+NwF1A57XxZUaAm0AZqrqVgARWQLEAbOy7mz48OHpv7du3ZrWrVuf4PDGwA8/wFVXuaGyH3+8\n6FUyjxs3zuZeNuni4+OJj4/P936yrXwWkfo5bXii8ZNEpBSu8rkdsBlYzPGVz2cD7+JKDWVxfSWa\nqer+LPuyymeTa9OmuYTw4otuQLyiKDU1FRGxfgkmqALv4JbfgfNU9ZiI9MdVWKc1V10lInd6y19X\n1dUiMh5YgksMo7ImBWNySxVGj4YxY2D6dGiZtWarCLHWRyYc8tSPIdKsxGBClZwMAwbA0qWuxFC3\n7om3KQzS5l4+99xz/Q7FFCLhHF3VmEJh507o0MH9nDev6CSFxMREWrRowXPPPed3KKaYCDkxiEiD\ncAZiTH6sXu1uGbVsCR9/DBUq+B1R/qW1OOrQoQMPPfSQDZNtIuaEiUFEuojIIuAb73lTEZka9siM\nCdEXX0BcHDz6KDzzDBSF2+7Lly+nRYsW6S2Obr75ZqtgNhETyiB6q4ErgM9Vtan32kpVPS8C8aXF\nYHUMJqiXX4Ynn3TDXMTF+R1NwZk7dy5r166lb9++lhBMnoVtED0R+UlVzwmYlyEGWK6qEbu1ZInB\nZHXsGDz4IMye7SqZGzb0OyJjok8452NYJCL3AaW80VLvJEgHNGMiZe9e6NnTNUtdsAAqVvQ7ImOK\nllDuxt4D1MRN2PMc8AfwQBhjMiZbv/0Gl1wCZ5wBn31W+JNCYmIizz//vN9hGJNJKInhLFUdqqoX\neY9HVPVw2CMzJotvv4XLLoN77nG9mUuFUt6NUoEtjqpWrep3OMZkEsq/1nMiUhOYBPxXVVeGOSZj\njjN+PDz8MHzwAfz1r35Hkz+JiYn069ePOnXq2BhHJiqF1PNZRGoBN3iPU4CJqvpkmGMLPL5VPhdT\nKSkwZIjrmzB9Opx9tt8R5c/kyZMZMGAAo0aNshZHJuwiMrWniJwPPAz0VNXSuT1YXlliKJ7274fe\nvWHPHpcYisIdl507d3LkyBErJZiICNuQGCJyjogMF5GVwEvAd7hJeIwJm/XroVUrqFbNzbZWFJIC\nQNWqVS0pmKgXSuXzOGAPbl7mK1T1FW/iHmPCYtEi1/KoTx83L3OZMn5HlDcpKSl+h2BMntjoqiaq\nTJgA994Lb73lJtgpjJKTkxk5ciRLlizhs88+8zscU4wVeAc3EZmkqtdnmcUtTSgzuBkTMlV44gnX\n+uirr6BJE78jypvAFkdvvPGG3+EYkyc5NVe93/vZFciacezy3RSYQ4fg1lth3Tp3G6kwzsmcVkp4\n9dVXrcWRKfRymsFts/fr31T14cBlIvIMrnWSMfmyZQt07+7GOvrmGyhb1u+I8mbSpEk297IpMkIZ\nRC8hbVTVgNeWqWqzsEaW+XhWx1AEJSbC1VfD7be7IbML8wV22ufTSgkmmoSjjmEA8DegYZZ6hurA\n/3IfojEZfv7ZDZP95ptwww1+R5N/lhBMUZJtiUFEKgKVgadxt43SPvlJqrozMuGlx2IlhiIkMRG6\ndYPBg+G++/yOJneSk5NZuXIlzZpFrMBsTJ6Fo4ObquofwN1AErDPe6iIVMlTlKbYmzHDjXX03HOF\nLynY3MumuMipVdJHQBdgKcFbIdkc0CZXXnnFzbY2darrwFZYBGtxZExRllOrpC7ez/oRi8YUSSkp\n7rbRzJkwfz785S9+RxS6FStW0LdvXxsJ1RQrobRKugz4QVX3i0hXoDHwmqruikSAXgxWx1BIHTjg\nBsLbu9cNhFe5st8R5U5iYiLLly+3fgmmUArnnM8rcMmgPjAV+ABorqrX5iHOPLHEUDht3eoqmc89\nF8aOLbxjHhlTWIVtdFXgmPetfCvwiqo+jUsSxmRr5Uq4+GI33tH48ZYUjClMQkkMf4jIk7hJej4U\nkZKA/ZubbH3xBbRtCyNHwmOPFY6Oa4mJiTz5ZMTmnjImqoWSGPoAvwM3qepe3FwMz4Y1KlNovfEG\n3HwzTJ7s6haiXeDcy/Xq1fM7HGOiwgnnfFbVAyIyE2guIrWBxar6bvhDM4VJaioMHeoSwrffwpln\n+h3Ridncy8YEF8oMbjcAy4G7gAHAShG5PtyBmcLj0CG48UaYNw8WLCgcSeGzzz6jQ4cOPPTQQ0yb\nNs2SgjEBQmmVtAbooqo/e8/PBGao6ukRiC8tBmuVFKW2b3cD4TVoAOPGFZ7RUZOSkkhKSrKEYIq0\ncLZKKgFsDXi+LcTtTBG3erXrwdy+Pbz/fuFJCgAxMTGWFIzJxgnrGIDJwEwR+R9uIL0e2OiqxV58\nPPTsCU8/7SbZiWZHjx6ldOnSfodhTKER0pzPItIYN5ObAtNVNdh0n2Fjt5KiyzvvuCEuJkxwzVKj\nVdoYR/Hx8cTHx1vPZVPshGM+hnrAvUArYBauc9u2vIdoCjtVGD4c3nsP5syBRo38jih7gS2OPvro\nI0sKxuRCTnUFI4DdwD1AOeDBiERkotKRI9CnD8ya5VoeRWtSCOyXYC2OjMmbnOoYLlDVWwBE5Afg\nu9zuXETigOe947yhqi9ms15zYAFwg6p+nNvjmPDauRN69IBTT3XzMp98st8RZW/WrFk297Ix+ZTT\nDG6rgV5pT3GD5/XyfldVXZbjjt3QGT8D7YFNwPe43tOrgqz3JXAQGK+qk4Psy+oYfLJmDVx5JXTv\n7iqaS0TE5ktGAAAfNUlEQVR5ezSbe9mYDAVex4Brojo6h+dtTrDvFsAabxY4RGQCcDWwKst69+Ja\nOTUPIV4TQfPmwXXXwRNPwJ13+h1NaCwhGJN/OU3U0zqf+64NbAh4vhFoGbiCN8TG1UBbXGKwYkGU\n+OgjuP9+V9HcsaPf0RwvOTmZJUuWcOmll/odijFFTij9GPIqlC/554F/qKqKu9Szyz2fqcK//uXm\nT5g9G84/3++IjpfW4uiMM87gkksusVKCMQUsnIlhE1A34HldXKkh0IXABO8fuxrQWUSOqurUrDsb\nPnx4+u+tW7emdevWBRyuSU52t4yWL3ctj6Kt7jbY3MuWFIzJkNZnJ79C6uCWpx2LlMJVPrcDNgOL\nCVL5HLD+eGBasFZJVvkcfnv2wLXXQoUK8OGHUL683xFl9tNPP9GrVy/q1KnD2LFjrcWRMSEI51hJ\niEhLEfmH93usiLQ40TaqegzoD0wBlgLjVHWViNwpIoWkKrN4WLsWLr3U3Tb6+OPoSwoAZcqUsX4J\nxkRIKKOrvgpUBJqqaiMRqQJ8oaoXRSJALwYrMYTJokWuj8KQIXDvvX5HY4wpSOForpqmPXAW7qof\nVd0lIlHcxcmEavJkuOsuNydz165+R2OMiRah3Eo6AqQPTSkijYCSYYvIhJ0qPPusa446a1Z0JYXE\nxEQGDx6MlRCN8U8oieFpXM/kU70K4q+Ax8MalQmbo0ddKeH9913Lo2bN/I7ICRzj6PxobCNrTDES\nypzP74vIUlzrIoB/Z9eyyES3ffvg+uvdsBbz5kFMjN8ROTb3sjHRJZQ5n2OBA8A073HAe80UIuvX\nQ6tW8Je/wLRp0ZMUZs+ebSOhGhNlQmmVtJKMXsyVgdOAn1T1vDDHFhiDtUrKh6VL4aqrYOBAePBB\niKY+YUeOHGHnzp2WEIwJg7y2Ssp1BzcR6QxcpaoDcnuwvLLEkHdTp8Jtt7khLnr08DsaY0wkRTIx\nCPCjqp6T24PllSWGvHnhBTdU9iefQIsTdkkMv8OHD1O2bFm/wzCm2AhbPwYRGRjw9CTcVJ9zc3sg\nEzkpKe6W0ezZ8N13UL++v/GkjXH02Wef8f3339v4RsZEuVA6uFUI+P0wrvnqgvCEY/Jr/3646SY4\nfBjmz4dKlfyNJ7DF0dSpUy0pGFMI5JgYvNnVYlR1UITiMfmwebPrrNa0Kbz2GpQufeJtwsVGQjWm\n8Mo2MYhIKVU9JiKXi0iMqiZFMjCTOz/8AN26wYAB8I9/+N/yaMGCBSxbtsz6JRhTCOU05/MyVW0m\nIs8BzXDTb27xFmuw4bHDxSqfczZzJtx8M7z0EvTs6Xc0xphoEY7K57SdVQHW4ibVCRSxxGCy9+qr\nMGIEfPqpGzrbGGPyK6fEUF1EHgJWRCoYE7rUVPj7310v5nnzoGFDf+JITk5m7ty5tGvX7sQrG2MK\nhZwSQ0kgSgZOMIEOHoQ+fWDnTjcQXpUq/sSR1uKoQYMGtGnThhIlQpr3yRgT5XKqY0hQ1aYRjico\nq2PIsHWrG97i7LPhjTfgpJMiH4O1ODKmcAjnRD0mSvz4o2uO2q8fPP64Py2PVq9ezY033mgjoRpT\nhOVUYqiqqjsjHE9QVmKAr76CXr1g9Gjo29e/ODZv3szs2bPp06ePlRKMiXIRGyvJD8U9MYwb5+Zk\nnjgRrrjC72iMMYWF3UoqglJT4dFHXUL49ls46yy/IzLGFAfWjCRKHT7sbh3NmeNaHkU6KSQmJnLX\nXXeRmpoa2QMbY3xniSEK7dgBad0CZs+G6tUjd+zAuZcvvfRSq0cwphiyW0lR5uefoUsXN7TFk0+6\n+ZkjxeZeNsaAlRiiypw5EBcHQ4fCyJGRTQrfffedzb1sjAGsVVLUeO89Nyfzhx9C+/aRP35KSgo7\nduygZs2akT+4MSYsrLlqIaUKTzwBb78Nn30G557rd0TGmKLCmqsWQkeOwO23u3qFhQshUhfrBw4c\noHz58pE5mDGm0LE6Bp/s2gUdOsCBAxAfH5mkkNbiqEWLFqSkpIT/gMaYQskSgw9++w0uuQSaN4dJ\nk6BcufAfMzExkRYtWrB06VK+/PJLSpYsGf6DGmMKJUsMEfb119CqFTzwAIwaBeH+fg7sl2Atjowx\nobA6hghRhWefhTFj4P33MzqwhduKFStITEy0fgnGmJBZq6QI2LcPbr0VNmyA//0PYmP9jsgYUxzk\ntVWS3UoKs59+ghYt3LAWc+daUjDGRD9LDGGUNkz2ww/Da6+Fd7a15ORkpk+fHr4DGGOKDatjCIPF\ni2HECFi1CmbNgmbNwnu8tDGOYmNj6dSpE6VK2Z/VGJN3YS8xiEiciCwTkeUicm+Q5b1F5Afv8aGI\nnBfumMIlJQX++U/o1s3Ny7xiRXiTQtYWR59++qklBWNMvoX1W0RESgLjgPbAJuB7EflKVVcFrPY7\nEKeqe0XkFuBN4OJwxhUO69ZBnz5QpgwsXQp16oT3eGvWrOG6666zkVCNMQUu3CWGFsAaVf1DVY8C\nE4CrA1dQ1QWqutd7+hkQ5q/Ugjdhguus1q0bfPll+JMCQNWqVfn73/9u/RKMMQUu3PcdagMbAp5v\nBFrmsP4dwKdhjagA7dsH997rxjmaORMuvDByx65cuTK9evWK3AGNMcVGuBNDyJ0PRKQN0Ae4NNjy\n4cOHp//eunVrWrdunc/Q8mfhQujd23VUW7YMbEw6Y4zf4uPjiY+Pz/d+wtrBTUQuBoaraifv+RAg\nVVWfybJeY2Ay0FlV1wTZT9R0cEtJgX/9C156yTVB7dEjvMdLTExk1KhRjB8/ntKlS4f3YMaYIiVa\nO7gtAc4QkfoiUgboCUwNXEFEYnFJoU+wpBBN1q2D1q3daKjLloU3KQS2OOrQoYO1NjLGRExYv21U\n9ZiI9AemeMd6Q1VXicid3vLXgceBKsBr3sTzR1W1RTjjyosJE+C++2DwYDfTWjin3bS5l40xfrKx\nkk5g3z645x5YtMhNuxnuCuaEhAQ6duzIqFGj6Nu3L16yNMaYXLOpPcNgwQJXwfzXv8Jzz0WmgllV\n+fPPP6levXr4D2aMKdIsMRSgY8dcBfPLL0emgtkYY8LB5nwuIH/84Xowly3rKphr1w7fsfbu3UvF\nihXDdwBjjMkDG101wIIFrgdz9+7wxRfhSwppLY6aNWtGcnJyeA5ijDF5ZCUGz5Ej0L8/vPIKXH99\n+I6TkJBAv379qFu3LnPnzqVMmTLhO5gxxuSBlRg8zz4Lp58O110Xnv2nlRI6duzIoEGDbIwjY0zU\nshIDsGYNPP+8GxU1XK1Df/vtN1auXGn9EowxUa/Yt0pShY4doUMHGDQoLIcwxhhfROuQGFFvwgTY\ntg3uv9/vSIwxJjoU68Swe7cb3uL116GgxqdLTk5m0qRJBbMzY4zxQbFODEOGwNVXw8UFNF9cQkIC\nzZs359133+XIkSMFs1NjjImwYlv5vGABTJ0KP/2U/30lJyczcuRIXn31VUaPHk2fPn1sjCMf2Dk3\nxVlB1sMWy8Rw9CjceSeMHg2VKuVvX2vXrqV79+7ExsZai6MoUBgaUxhT0Ar6oqhYtkp69lk3N/Os\nWflvnnrgwAGmT5/ODTfcYFesPvNaYPgdhjERl91n3wbRC9G6dW7o7IULXYc2U3RYYjDFVUEnhmJV\n+azq5lZ44AFLCsYYk51ilRimTHG9nAcPzv22CQkJXHPNNRw+fLjgAzPGmChSbBJDUpLrxPb663DS\nSaFvFzjGUY8ePTgpNxsbY7K1du1aGjdu7HcYhcLEiRO59dZbI3a8YpMYHnvMzcQWFxf6Nmn9EpYt\nW0ZiYqJNtWnypX79+pQrV44KFSpQo0YN+vbty759+zKt8+OPP3LllVdSq1Yt6tatyw033MDGjRsz\nrXPkyBEeffRRGjduTMWKFTn99NN58MEH2blzZyTfTr79+9//ZsCAAX6HkS/bt2+na9euVK1alYsu\nuojFixfnuP6aNWvo1KkT1atXp2bNmrzwwgvp+7npppuoXbs2FStWpFWrVpn2dc011xAfH3/cZyFs\nVDXqHy7MvFu6VLVGDdUdO0LfZvXq1Vq9enV99913NTU1NV/HN5GR389JuNWvX19nz56tqqorVqzQ\n+vXr6+DBg9OXJyYm6imnnKIvvPCC7t+/X3ft2qWPPvqoVqtWTbdu3aqqqqmpqdqqVSvt0KGDrlq1\nSlNTU/X333/Xhx9+WKdPnx622I8ePVqg+9u2bZtWq1ZN9+/fn6ftjx07VqDx5FXbtm114MCBevjw\nYZ08ebJWqVJFk5KSgq67Y8cOrVGjhn744YeanJys+/fv11WrVqmq6u+//65jxozRrVu3alJSkj7x\nxBPHnZ9hw4bpQw89FHTf2X32vddz/52bl40i/cjPP/yxY6oXXaQ6fnzut921a1eej2sirzAlBlXV\nO++8U7t3757+vH379nr33Xcft13nzp31jjvuUFXV999/X2vUqKEHDhwI+bgrV67U9u3ba5UqVbRG\njRr61FNPqarqLbfcoo8++mj6et98843WqVMn/Xm9evX05Zdf1ksuuUTLlSunzzzzjF533XWZ9n3f\nfffpfffdp6qqe/bs0f79+2vNmjX1tNNO00cffVRTUlKCxvTxxx9ry5YtM7321FNPacOGDbVChQp6\nzjnn6JQpU9KXjR8/Xi+77DJ9/PHHNTY2Vh977DE9cuSIDhw4UGNjY/XUU0/Vu+66Sw8dOqSqqrt3\n79YuXbpo9erVtVKlStq1a1fduHFjyOcsFL///ruWLVs205d3XFycjhs3Luj6Q4YM0ZtvvjmkfR89\nelTLlSuny5YtS39t5syZesEFFwRdv6ATQ5G/lfTKK1C+PNxyS+63rVy5csEHZIo19ZoUJiYm8vnn\nn9O2bVsAUlNTmT9/PtcHmSXqhhtuYM6cOQB8++23dO7cmXLlyoV0vKSkJNq3b0+HDh3YsmULa9as\noV27doBrypjTrVER4eWXX+aZZ55h165d3HjjjcyYMYP9+/cDkJKSwqRJk+jduzcA/fr14+DBgyxY\nsIAZM2bwySef8Oabbwbd9+rVqzk9S9PA008/nXnz5rF9+3Zuv/12evfuzbZt29KXL168mKNHj7J8\n+XKGDh3Kww8/TGJiIjNmzOC7775j9erVjBgxIv183nbbbaxfv54lS5Zw9OhR7rnnnmzfa9euXalc\nuXLQx1VXXRV0m19++YUGDRpQvnz59NeaNGnC6tWrg66/aNEiKleuTLt27ahZsyZXXXUVGzZsCLpu\nYmJi+jlJ07BhQ37++eds30OByks2ifSDPF4JbtyoWq2aqlday9aff/6Zp/2b6BLK58Q1Ws7/Iy/q\n1aunFSpU0AoVKqiIpJcCVN2tFRHRn3/++bjtZs6cqeXKlVNVV3oYMmRIyMf88MMPtWrVqkGv3Pv1\n65djiaF+/fo6YsSITNu0atVK3333XVVV/eKLL7Rhw4aqqrp161YtVaqUrl+/Pn3dMWPGaJs2bYLG\n9be//U0HDRqUbdypqalat25dnTp1qqq6EsPJJ5+sR44cSV9evnx5nT9/fvo2U6ZM0QYNGgTd35df\nfqmVK1fO9nh58cEHH+jFF1+c6bVHHnlEb7vttqDrn3XWWXryySfrtGnTdPPmzdq7d2+97LLLjltv\n79692qhRI33uuecyvX7w4EEVkfTbioGy++xjJYbjPfAA3HUXnH128OVpLY6aNm3KwYMHIxuc8UVB\npYa8EBE+/fRT9u7dyyeffMJ7772XfmVYrVo1ypYty5YtW47bbsuWLcTGxgIQGxvL5s2bQz7mhg0b\naNGiBSVK5O1fvWXLlpme9+rVi48++giADz/8ML20sG7dOlJTU2ncuHH6lfawYcPYsWNH0P3Wq1fv\nuPfx7rvvcsEFF1C5cmWqVKnCli1b+PPPP9OXN2nSJH0q3B07dnDw4EG6dOmSfrx+/fqlr3/w4EHu\nvPNO6tevT8WKFbn22mvZu3dveomtIFStWvW4xgN79uyhWrVq2a7frl07unbtSq1atXjsscf47rvv\nSEpKSl/n0KFDdOvWjbi4OB588MFM22/cuJGyZctSo0aNAnsP2SmyiWHGDEhIgKFDgy8PbHG0cOHC\nkIvmxuRXiRIluOqqq7jvvvsYOHBg+muXXXYZEydOPG79iRMnEuc1p4uLi2PWrFkhX8jExsayePFi\nUlJSjltWvnz5TLdqEhISjlunVKnMw6ldd911xMfHs2nTJj755BN69eoFQN26dSlRogQ//fQTu3fv\nZvfu3ezdu5cVK1YEjatRo0b89ttv6c/XrVtH//79eeqpp9i1axe7du2idu3amb7IA2OpVq0aJ598\nMrNmzUo/3p49e9K/qEePHs3ChQtZtGgRe/fuZfLkyYF3II7TuXNnYmJigj66dOkSdJszzzyTtWvX\npt9aA/jhhx84O5sr0bPPPjtTgs4ay5EjR9LHXXvttdeO237NmjWceeaZQfdd4PJSzIj0g1yW3ffv\nV61fX/WLL45fduTIEX388cetxVERlNvPSaRlrXzesWOHlitXThcuXKiqrlVSTEyMvvDCC7pv3z7d\ntWuXPvLII1q1alXdsmVL+naXX365durUSVevXq0pKSm6bt06HTJkSNBWSUlJSVqrVi0dNGiQbtq0\nSfft26eLFi1SVdU33nhD69evr7/88ot+//332qRJk+NuJQXGm6Zz587avn17bdasWabXr776au3b\nt6/+9NNPmpKSomvWrNE5c+YEPRfbt2/XU089Nb3idsuWLVquXDldtGiR7t69W0eOHKmlS5fWt956\nS1XdraRWrVpl2sf999+vHTt21KVLl2pKSopu3LhRZ82apaqqzz33nMbFxenu3bv1xx9/1Pbt26uI\nZFsZnlft2rXTQYMG6aFDh3Ty5MlatWrVbFtaLVy4UMuVK6czZszQbdu2ad++fTUuLk5VVZOTk7Vr\n167avXv3bFtcWaukfCaGv/9d9aabgi/7448/9IYbbtBNmzblap8m+hW2xKCqOmDAAO3Ro0f68xUr\nVmjnzp21Ro0aWrt2bb3++usz3bdXdRc3jzzyiJ533nkaExOjDRs21IEDB2bbim7lypXarl07rVSp\nktasWVOfeeYZVVU9fPiw9uzZUytWrKiXXnqpjh07VuvWrZtjvKqq7733noqIjho1KtPre/fu1QED\nBmidOnX0lFNO0aZNm+p///vfbM/H3XffrS+//HL68//85z965plnamxsrA4bNkzbtGmTnhjefvtt\n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\n",
"text": [
"<matplotlib.figure.Figure at 0x1a45470d0>"
]
}
],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#get the submission data\n",
"\n",
"#predict exist id\n",
"pos = [0,7,7+24,7+24+35,7+24+35+4,7+24+35+4+4,7+24+35+4+4+8,7+24+35+4+4+8+9,7+24+35+4+4+8+9+4]\n",
"all_number = 7+24+35+4+4+8+9+4+55\n",
"submission_data = []\n",
"submission_ids = []\n",
"input_sub_file = 'Data/sub_rehashed_new.txt'\n",
"with open(input_sub_file,'r') as infile:\n",
" for line in infile:\n",
"\n",
" submission_data.append([0 for b in xrange(all_number)])\n",
"\n",
" li = line.split(',')\n",
" \n",
" for i in range(1,len(li)):\n",
" if i == 3:\n",
" continue\n",
" elif i > 3:\n",
" submission_data[len(submission_data) - 1][pos[i-2] + int(li[i])] = 1\n",
" else:\n",
" submission_data[len(submission_data) - 1][pos[i-1] + int(li[i])] = 1\n",
" \n",
" submission_ids.append(li[0])\n",
" \n",
"X_sub = np.array(submission_data)\n",
"result = lr_instance.predict(X_sub)\n",
"result = list(result)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#del X_sub\n",
"#del submission_data\n",
"\n",
"has_id = {}\n",
"for i in range(len(submission_ids)):\n",
" has_id[submission_ids[i]] = result[i]\n",
"\n",
"input_file = \"Data/sampleSubmission\"\n",
"output_file = \"Data/My_submission.txt\"\n",
"\n",
"\n",
"with open(output_file,'a') as outfile:\n",
" outfile.write('id')\n",
" outfile.write(',')\n",
" outfile.write('click')\n",
" outfile.write('\\n')\n",
"\n",
"count = 0\n",
"file = open(input_file)\n",
"for line in file:\n",
" if count == 0:\n",
" count += 1\n",
" continue\n",
" count += 1\n",
" li = line.split(',')\n",
" \n",
" with open(output_file,'a') as outfile:\n",
" outfile.write(str(li[0]))\n",
" outfile.write(',')\n",
" if li[0] in has_id:\n",
" outfile.write(str(has_id[li[0]]))\n",
" else:\n",
" outfile.write(str(0))\n",
" outfile.write('\\n')\n",
" \n",
"print count \n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"4577465\n"
]
}
],
"prompt_number": 27
}
],
"metadata": {}
}
]
}