-
Notifications
You must be signed in to change notification settings - Fork 167
/
machine-learning.atom.xml
7977 lines (7102 loc) · 609 KB
/
machine-learning.atom.xml
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
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Raul E. Lopez Briega</title><link href="http://relopezbriega.github.io/" rel="alternate"></link><link href="/feeds/machine-learning.atom.xml" rel="self"></link><id>http://relopezbriega.github.io/</id><updated>2016-05-29T00:00:00-03:00</updated><entry><title>Machine Learning con Python - Sobreajuste</title><link href="http://relopezbriega.github.io/blog/2016/05/29/machine-learning-con-python-sobreajuste/" rel="alternate"></link><published>2016-05-29T00:00:00-03:00</published><author><name>Raul E. Lopez Briega</name></author><id>tag:relopezbriega.github.io,2016-05-29:blog/2016/05/29/machine-learning-con-python-sobreajuste/</id><summary type="html"><p>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p><img alt="Machine Learning" title="Machine Learning" src="http://relopezbriega.github.io/images/machine-learning.jpg"></p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Introducci&#243;n">Introducci&#243;n<a class="anchor-link" href="#Introducci&#243;n">&#182;</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Uno de los conceptos más importantes en <a href="http://relopezbriega.github.io/tag/machine-learning.html">Machine Learning</a> es el <strong><em><a href="https://en.wikipedia.org/wiki/Overfitting">overfitting</a> o <a href="https://es.wikipedia.org/wiki/Sobreajuste">sobreajuste</a></em></strong> del modelo. Comprender como un modelo se <em>ajusta</em> a los datos es muy importante para entender las causas de baja precisión en las predicciones. Un modelo va a estar <em><a href="https://es.wikipedia.org/wiki/Sobreajuste">sobreajustado</a></em> cuando vemos que se desempeña bien con los datos de entrenamiento, pero su precisión es notablemente más baja con los datos de evaluación; esto se debe a que el modelo ha memorizado los datos que ha visto y no pudo <em>generalizar</em> las reglas para predecir los datos que no ha visto. De aquí también la importancia de siempre contar con dos <a href="https://es.wikipedia.org/wiki/Conjunto_de_datos">conjuntos de datos</a> distintos, uno para entrenar el modelo y otro para evaluar su precisión; ya que si utilizamos el mismo <a href="https://es.wikipedia.org/wiki/Conjunto_de_datos">dataset</a> para las dos tareas, no tendríamos forma de determinar como el modelo se comporta con datos que nunca ha visto.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="&#191;C&#243;mo-reconocer-el-sobreajuste?">&#191;C&#243;mo reconocer el sobreajuste?<a class="anchor-link" href="#&#191;C&#243;mo-reconocer-el-sobreajuste?">&#182;</a></h2><p>En líneas generales el <a href="https://es.wikipedia.org/wiki/Sobreajuste">sobreajuste</a> va a estar relacionado con la complejidad del modelo, mientras más complejidad le agreguemos, mayor va a ser la tendencia a <em><a href="https://es.wikipedia.org/wiki/Sobreajuste">sobreajustarse</a></em> a los datos, ya que va a contar con mayor flexibilidad para realizar las predicciones y puede ser que los patrones que encuentre estén relacionados con el <em>ruido</em> (pequeños errores aleatorios) en los datos y no con la verdadera señal o relación subyacente.</p>
<p>No existe una regla general para establecer cual es el nivel ideal de complejidad que le podemos otorgar a nuestro modelo sin caer en el <a href="https://es.wikipedia.org/wiki/Sobreajuste">sobreajuste</a>; pero podemos valernos de algunas herramientas analíticas para intentar entender como el modelo se ajusta a los datos y reconocer el <a href="https://es.wikipedia.org/wiki/Sobreajuste">sobreajuste</a>. Veamos un ejemplo.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="&#193;rboles-de-Decisi&#243;n-y-sobreajuste">&#193;rboles de Decisi&#243;n y sobreajuste<a class="anchor-link" href="#&#193;rboles-de-Decisi&#243;n-y-sobreajuste">&#182;</a></h3><p>Los <a href="https://es.wikipedia.org/wiki/%C3%81rbol_de_decisi%C3%B3n">Árboles de Decisión</a> pueden ser muchas veces una herramienta muy precisa, pero también con mucha tendencia al <a href="https://es.wikipedia.org/wiki/Sobreajuste">sobreajuste</a>. Para construir estos modelos aplicamos un procedimiento recursivo para encontrar los atributos que nos proporcionan más información sobre distintos subconjuntos de datos, cada vez más pequeños. Si aplicamos este procedimiento en forma reiterada, eventualmente podemos llegar a un árbol en el que cada <em>hoja</em> tenga una sola instancia de nuestra variable objetivo a clasificar. En este caso extremo, el <a href="https://es.wikipedia.org/wiki/%C3%81rbol_de_decisi%C3%B3n">Árbol de Decisión</a> va a tener una pobre <em>generalización</em> y estar bastante <a href="https://es.wikipedia.org/wiki/Sobreajuste">sobreajustado</a>; ya que cada instancia de los datos de entrenamiento va a encontrar el camino que lo lleve eventualmente a la hoja que lo contiene, alcanzando así una precisión del 100% con los datos de entrenamiento. Veamos un ejemplo sencillo con la ayuda de <a href="http://python.org/">Python</a>.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[1]:</div>
<div class="collapseheader inner_cell"><span style="font-weight: bold;">Ver Código</span>
<div class="input_area" style="display:none">
<div class="highlight-ipynb"><pre class="ipynb"><span></span><span class="c1"># Importando las librerías que vamos a utilizar</span>
<span class="kn">import</span> <span class="nn">pandas</span> <span class="kn">as</span> <span class="nn">pd</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>
<span class="kn">import</span> <span class="nn">seaborn</span> <span class="kn">as</span> <span class="nn">sns</span>
<span class="kn">from</span> <span class="nn">sklearn.cross_validation</span> <span class="kn">import</span> <span class="n">train_test_split</span>
<span class="kn">from</span> <span class="nn">sklearn.datasets</span> <span class="kn">import</span> <span class="n">make_classification</span>
<span class="kn">from</span> <span class="nn">sklearn.svm</span> <span class="kn">import</span> <span class="n">SVC</span>
<span class="kn">from</span> <span class="nn">sklearn.tree</span> <span class="kn">import</span> <span class="n">DecisionTreeClassifier</span>
<span class="kn">import</span> <span class="nn">random</span><span class="p">;</span> <span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="mi">1982</span><span class="p">)</span>
<span class="c1"># graficos incrustados</span>
<span class="o">%</span><span class="k">matplotlib</span> inline
<span class="c1"># parametros esteticos de seaborn</span>
<span class="n">sns</span><span class="o">.</span><span class="n">set_palette</span><span class="p">(</span><span class="s2">&quot;deep&quot;</span><span class="p">,</span> <span class="n">desat</span><span class="o">=.</span><span class="mi">6</span><span class="p">)</span>
<span class="n">sns</span><span class="o">.</span><span class="n">set_context</span><span class="p">(</span><span class="n">rc</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;figure.figsize&quot;</span><span class="p">:</span> <span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">4</span><span class="p">)})</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[2]:</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight-ipynb"><pre class="ipynb"><span></span><span class="c1"># Ejemplo en python - árboles de decisión</span>
<span class="c1"># dummy data con 100 atributos y 2 clases</span>
<span class="n">X</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">make_classification</span><span class="p">(</span><span class="mi">10000</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="n">n_informative</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">n_classes</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">random_state</span><span class="o">=</span><span class="mi">1982</span><span class="p">)</span>
<span class="c1"># separ los datos en train y eval</span>
<span class="n">x_train</span><span class="p">,</span> <span class="n">x_eval</span><span class="p">,</span> <span class="n">y_train</span><span class="p">,</span> <span class="n">y_eval</span> <span class="o">=</span> <span class="n">train_test_split</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">test_size</span><span class="o">=</span><span class="mf">0.35</span><span class="p">,</span>
<span class="n">train_size</span><span class="o">=</span><span class="mf">0.65</span><span class="p">,</span>
<span class="n">random_state</span><span class="o">=</span><span class="mi">1982</span><span class="p">)</span>
<span class="c1"># creando el modelo sin control de profundidad, va a continuar hasta</span>
<span class="c1"># que todas las hojas sean puras</span>
<span class="n">arbol</span> <span class="o">=</span> <span class="n">DecisionTreeClassifier</span><span class="p">(</span><span class="n">criterion</span><span class="o">=</span><span class="s1">&#39;entropy&#39;</span><span class="p">)</span>
<span class="c1"># Ajustando el modelo</span>
<span class="n">arbol</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">x_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[2]:</div>
<div class="output_text output_subarea output_execute_result">
<pre class="ipynb">DecisionTreeClassifier(class_weight=None, criterion=&#39;entropy&#39;, max_depth=None,
max_features=None, max_leaf_nodes=None, min_samples_leaf=1,
min_samples_split=2, min_weight_fraction_leaf=0.0,
presort=False, random_state=None, splitter=&#39;best&#39;)</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[3]:</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight-ipynb"><pre class="ipynb"><span></span><span class="c1"># precisión del modelo en datos de entrenamiento.</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;precisión entranamiento: </span><span class="si">{0: .2f}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">arbol</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">x_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">)))</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre class="ipynb">precisión entranamiento: 1.00
</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Logramos una precisión del 100 %, increíble, este modelo no se equivoca! deberíamos utilizarlo para jugar a la lotería y ver si ganamos algunos millones; o tal vez, no?. Veamos como se comporta con los datos de evaluación.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[4]:</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight-ipynb"><pre class="ipynb"><span></span><span class="c1"># precisión del modelo en datos de evaluación.</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;precisión evaluación: </span><span class="si">{0: .2f}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">arbol</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">x_eval</span><span class="p">,</span> <span class="n">y_eval</span><span class="p">)))</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre class="ipynb">precisión evaluación: 0.87
</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Ah, ahora nuestro modelo ya no se muestra tan preciso, esto se debe a que seguramente esta <a href="https://es.wikipedia.org/wiki/Sobreajuste">sobreajustado</a>, ya que dejamos crecer el árbol hasta que cada hoja estuviera pura (es decir que solo contenga datos de una sola de las clases a predecir). Una alternativa para reducir el <a href="https://es.wikipedia.org/wiki/Sobreajuste">sobreajuste</a> y ver si podemos lograr que <em>generalice</em> mejor y por tanto tenga más precisión para datos nunca vistos, es tratar de reducir la complejidad del modelo por medio de controlar la profundidad que puede alcanzar el <a href="https://es.wikipedia.org/wiki/%C3%81rbol_de_decisi%C3%B3n">Árbol de Decisión</a>.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[5]:</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight-ipynb"><pre class="ipynb"><span></span><span class="c1"># profundidad del arbol de decisión.</span>
<span class="n">arbol</span><span class="o">.</span><span class="n">tree_</span><span class="o">.</span><span class="n">max_depth</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[5]:</div>
<div class="output_text output_subarea output_execute_result">
<pre class="ipynb">22</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Este caso nuestro modelo tiene una profundidad de 22 nodos; veamos si reduciendo esa cantidad podemos mejorar la precisión en los datos de evaluación. Por ejemplo, pongamos un máximo de profundidad de tan solo 5 nodos.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[6]:</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight-ipynb"><pre class="ipynb"><span></span><span class="c1"># modelo dos, con control de profundiad de 5 nodos</span>
<span class="n">arbol2</span> <span class="o">=</span> <span class="n">DecisionTreeClassifier</span><span class="p">(</span><span class="n">criterion</span><span class="o">=</span><span class="s1">&#39;entropy&#39;</span><span class="p">,</span> <span class="n">max_depth</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
<span class="c1"># Ajustando el modelo</span>
<span class="n">arbol2</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">x_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[6]:</div>
<div class="output_text output_subarea output_execute_result">
<pre class="ipynb">DecisionTreeClassifier(class_weight=None, criterion=&#39;entropy&#39;, max_depth=5,
max_features=None, max_leaf_nodes=None, min_samples_leaf=1,
min_samples_split=2, min_weight_fraction_leaf=0.0,
presort=False, random_state=None, splitter=&#39;best&#39;)</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[7]:</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight-ipynb"><pre class="ipynb"><span></span><span class="c1"># precisión del modelo en datos de entrenamiento.</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;precisión entranamiento: </span><span class="si">{0: .2f}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">arbol2</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">x_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">)))</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre class="ipynb">precisión entranamiento: 0.92
</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Ahora podemos ver que ya no tenemos un modelo con 100% de precisión en los datos de entrenamiento, sino que la precisión es bastante inferior, 92%, sin embargo si ahora medimos la precisión con los datos de evaluación vemos que la precisión es del 90%, 3 puntos por arriba de lo que habíamos conseguido con el primer modelo que nunca se equivocaba en los datos de entrenamiento.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[9]:</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight-ipynb"><pre class="ipynb"><span></span><span class="c1"># precisión del modelo en datos de evaluación.</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;precisión evaluación: </span><span class="si">{0: .2f}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">arbol2</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">x_eval</span><span class="p">,</span> <span class="n">y_eval</span><span class="p">)))</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre class="ipynb">precisión evaluación: 0.90
</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Esta diferencia se debe a que reducimos la complejidad del modelo para intentar ganar en generalización. También debemos tener en cuenta que si seguimos reduciendo la complejidad, podemos crear un modelo demasiado simple que en vez de estar <a href="https://es.wikipedia.org/wiki/Sobreajuste">sobreajustado</a> puede tener un desempeño muy por debajo del que podría tener; podríamos decir que el modelo estaría <em>infraajustado</em> y tendría un alto nivel de <em>sesgo</em>. Para ayudarnos a encontrar el término medio entre la complejidad del modelo y su <em>ajuste</em> a los datos, podemos ayudarnos de herramientas gráficas. Por ejemplo podríamos crear diferentes modelos, con distintos grados de complejidad y luego graficar la precisión en función de la complejidad.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[10]:</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight-ipynb"><pre class="ipynb"><span></span><span class="c1"># Grafico de ajuste del árbol de decisión</span>
<span class="n">train_prec</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">eval_prec</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">max_deep_list</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">23</span><span class="p">))</span>
<span class="k">for</span> <span class="n">deep</span> <span class="ow">in</span> <span class="n">max_deep_list</span><span class="p">:</span>
<span class="n">arbol3</span> <span class="o">=</span> <span class="n">DecisionTreeClassifier</span><span class="p">(</span><span class="n">criterion</span><span class="o">=</span><span class="s1">&#39;entropy&#39;</span><span class="p">,</span> <span class="n">max_depth</span><span class="o">=</span><span class="n">deep</span><span class="p">)</span>
<span class="n">arbol3</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">x_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">)</span>
<span class="n">train_prec</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arbol3</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">x_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">))</span>
<span class="n">eval_prec</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arbol3</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">x_eval</span><span class="p">,</span> <span class="n">y_eval</span><span class="p">))</span>
<span class="c1"># graficar los resultados.</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">max_deep_list</span><span class="p">,</span> <span class="n">train_prec</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">&#39;r&#39;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;entrenamiento&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">max_deep_list</span><span class="p">,</span> <span class="n">eval_prec</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">&#39;b&#39;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;evaluacion&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s1">&#39;Grafico de ajuste arbol de decision&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">&#39;precision&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">&#39;cant de nodos&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
RU5ErkJggg==
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>El gráfico que acabamos de construir se llama <em>gráfico de ajuste</em> y muestra la precisión del modelo en función de su complejidad. En nuestro ejemplo, podemos ver que el punto con mayor precisión, en los datos de evaluación, lo obtenemos con un nivel de profundidad de aproximadamente 5 nodos; a partir de allí el modelo pierde en <em>generalización</em> y comienza a estar <a href="https://es.wikipedia.org/wiki/Sobreajuste">sobreajustado</a>. También podemos crear un gráfico similar con la ayuda de <a href="http://scikit-learn.org/stable/">Scikit-learn</a>, utilizando <code>validation_curve</code>.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[11]:</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight-ipynb"><pre class="ipynb"><span></span><span class="c1"># utilizando validation curve de sklearn</span>
<span class="kn">from</span> <span class="nn">sklearn.learning_curve</span> <span class="k">import</span> <span class="n">validation_curve</span>
<span class="n">train_prec</span><span class="p">,</span> <span class="n">eval_prec</span> <span class="o">=</span> <span class="n">validation_curve</span><span class="p">(</span><span class="n">estimator</span><span class="o">=</span><span class="n">arbol</span><span class="p">,</span> <span class="n">X</span><span class="o">=</span><span class="n">x_train</span><span class="p">,</span>
<span class="n">y</span><span class="o">=</span><span class="n">y_train</span><span class="p">,</span> <span class="n">param_name</span><span class="o">=</span><span class="s1">&#39;max_depth&#39;</span><span class="p">,</span>
<span class="n">param_range</span><span class="o">=</span><span class="n">max_deep_list</span><span class="p">,</span> <span class="n">cv</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
<span class="n">train_mean</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">train_prec</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">train_std</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">std</span><span class="p">(</span><span class="n">train_prec</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">test_mean</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">eval_prec</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">test_std</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">std</span><span class="p">(</span><span class="n">eval_prec</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[12]:</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight-ipynb"><pre class="ipynb"><span></span><span class="c1"># graficando las curvas</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">max_deep_list</span><span class="p">,</span> <span class="n">train_mean</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">&#39;r&#39;</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s1">&#39;o&#39;</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="s1">&#39;entrenamiento&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span><span class="n">max_deep_list</span><span class="p">,</span> <span class="n">train_mean</span> <span class="o">+</span> <span class="n">train_std</span><span class="p">,</span>
<span class="n">train_mean</span> <span class="o">-</span> <span class="n">train_std</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.15</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">&#39;r&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">max_deep_list</span><span class="p">,</span> <span class="n">test_mean</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">&#39;b&#39;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s1">&#39;--&#39;</span><span class="p">,</span>
<span class="n">marker</span><span class="o">=</span><span class="s1">&#39;s&#39;</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;evaluacion&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span><span class="n">max_deep_list</span><span class="p">,</span> <span class="n">test_mean</span> <span class="o">+</span> <span class="n">test_std</span><span class="p">,</span>
<span class="n">test_mean</span> <span class="o">-</span> <span class="n">test_std</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.15</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">&#39;b&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="s1">&#39;center right&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">&#39;Cant de nodos&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">&#39;Precision&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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