From b919ebfe0c23dbb1dc5a9ad2f76ebdbf10911061 Mon Sep 17 00:00:00 2001 From: jasonfan1997 Date: Tue, 29 Oct 2024 14:38:58 -0400 Subject: [PATCH] Adding reference --- docs/build/doctrees/environment.pickle | Bin 156578 -> 156974 bytes .../nbsphinx/notebooks/validation.ipynb | 50 ++++++++---- .../doctrees/notebooks/validation.doctree | Bin 32088 -> 33416 bytes .../_sources/notebooks/validation.ipynb.txt | 50 ++++++++---- docs/build/html/index.html | 1 + docs/build/html/notebooks/validation.html | 48 ++++++----- docs/build/html/notebooks/validation.ipynb | 50 ++++++++---- docs/build/html/objects.inv | Bin 3039 -> 3050 bytes docs/build/html/searchindex.js | 2 +- docs/build/latex/calzone.aux | 2 + docs/build/latex/calzone.fdb_latexmk | 54 ++++++------- docs/build/latex/calzone.log | 76 +++++++++--------- docs/build/latex/calzone.out | 19 ++--- docs/build/latex/calzone.pdf | Bin 1447119 -> 1448130 bytes docs/build/latex/calzone.tex | 49 +++++++---- docs/build/latex/calzone.toc | 1 + docs/source/notebooks/validation.ipynb | 50 ++++++++---- 17 files changed, 279 insertions(+), 173 deletions(-) diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index 3b8646bb8e028a05da06e75e7af13ca70de4902b..223f5107e39c348dadd378bb41742df24b1fc131 100644 GIT binary patch literal 156974 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 literal 156578 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 Qo^cl^+NTfC&TbC=7cQ3(MgRZ+ diff --git a/docs/build/doctrees/nbsphinx/notebooks/validation.ipynb b/docs/build/doctrees/nbsphinx/notebooks/validation.ipynb index 20b05f7..0aa6e96 100644 --- a/docs/build/doctrees/nbsphinx/notebooks/validation.ipynb +++ b/docs/build/doctrees/nbsphinx/notebooks/validation.ipynb @@ -24,22 +24,20 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Difference for uniform/histogram binning:\n", + "Difference for equal-width binning:\n", "Reliability difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", "Confidence difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", "\n", - "Difference for quantile/equal frequency binning:\n", - "Reliability difference: [1.e-05 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00\n", - " 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00]\n", - "Confidence difference: [1.e-05 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00\n", - " 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00]\n" + "Difference for equal-count binning:\n", + "Reliability difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", + "Confidence difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n" ] } ], @@ -51,17 +49,21 @@ "### loading the data\n", "wellcal_dataloader = data_loader(data_path=\"../../../example_data/simulated_welldata.csv\")\n", "\n", + "###scikit-learn implementation\n", "scikit_reliability_H,scikit_confidence_H = calibration_curve(wellcal_dataloader.labels,wellcal_dataloader.probs[:,1],n_bins=15,strategy='uniform',pos_label=1)\n", "scikit_reliability_C,scikit_confidence_C = calibration_curve(wellcal_dataloader.labels,wellcal_dataloader.probs[:,1],n_bins=15,strategy='quantile',pos_label=1)\n", + "\n", + "### calzone implementation\n", "calzone_reliability_H,calzone_confindence_H,bin_edge_H,bin_count_H = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=1, is_equal_freq=False)\n", "calzone_reliability_C,calzone_confindence_C,bin_edge_C,bin_count_C = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=1, is_equal_freq=True)\n", "\n", - "print(\"Difference for uniform/histogram binning:\")\n", - "print(\"Reliability difference:\", np.round(np.abs(scikit_reliability_H - calzone_reliability_H), 5))\n", - "print(\"Confidence difference:\", np.round(np.abs(scikit_confidence_H - calzone_confindence_H), 5))\n", - "print(\"\\nDifference for quantile/equal frequency binning:\")\n", - "print(\"Reliability difference:\", np.round(np.abs(scikit_reliability_C - calzone_reliability_C), 5))\n", - "print(\"Confidence difference:\", np.round(np.abs(scikit_confidence_C - calzone_confindence_C), 5))" + "###showing the difference between the two implementations\n", + "print(\"Difference for equal-width binning:\")\n", + "print(\"Reliability difference:\", np.round(np.abs(scikit_reliability_H - calzone_reliability_H), 4))\n", + "print(\"Confidence difference:\", np.round(np.abs(scikit_confidence_H - calzone_confindence_H), 4))\n", + "print(\"\\nDifference for equal-count binning:\")\n", + "print(\"Reliability difference:\", np.round(np.abs(scikit_reliability_C - calzone_reliability_C), 4))\n", + "print(\"Confidence difference:\", np.round(np.abs(scikit_confidence_C - calzone_confindence_C), 4))" ] }, { @@ -82,7 +84,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -100,13 +102,14 @@ "calzone_reliability_topclass_H,calzone_confindence_topclass_H,bin_edge_topclass_H,bin_count_topclass_H = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=None, is_equal_freq=False)\n", "calzone_reliability_topclass_C,calzone_confindence_topclass_C,bin_edge_topclass_C,bin_count_topclass_C = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=None, is_equal_freq=True)\n", "\n", + "### compare MAPIE and calzone equal-width binning\n", "print(\"MAPIE topclass ECE-H:\",top_label_ece(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins = 15,split_strategy='uniform'))\n", "print(\"calzone topclass ECE-H:\",calculate_ece_mce(calzone_reliability_topclass_H,calzone_confindence_topclass_H,bin_count_topclass_H)[0])\n" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -119,6 +122,7 @@ } ], "source": [ + "### compare MAPIE and calzone equal-count binning\n", "print(\"MAPIE topclass ECE-C:\",top_label_ece(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins = 15,split_strategy='quantile'))\n", "print(\"calzone topclass ECE-C:\",calculate_ece_mce(calzone_reliability_topclass_C,calzone_confindence_topclass_C,bin_count_topclass_C)[0])\n" ] @@ -132,7 +136,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -145,6 +149,7 @@ } ], "source": [ + "### compare the Z statistics\n", "print(\"MAPIE Z statistic\", spiegelhalter_statistic(wellcal_dataloader.labels,wellcal_dataloader.probs[:,1]))\n", "print(\"calzone Z statistic\", spiegelhalter_z_test(wellcal_dataloader.labels,wellcal_dataloader.probs)[0])" ] @@ -233,6 +238,19 @@ "source": [ "We see that the test statistics are the same. The R package doesn't allow user input degree of freedom so the p-value is different as expected." ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## reference\n", + "\n", + "Taquet, V., Blot, V., Morzadec, T., Lacombe, L., & Brunel, N. (2022). MAPIE: an open-source library for distribution-free uncertainty quantification. arXiv preprint arXiv:2207.12274.\n", + "\n", + "Pedregosa, F., Varoquaux, Ga\"el, Gramfort, A., Michel, V., Thirion, B., Grisel, O., … others. (2011). Scikit-learn: Machine learning in Python. Journal of Machine Learning Research, 12(Oct), 2825–2830.\n", + "\n", + "Lele, S. R., Keim, J. L., & Solymos, P. (2017). Resource selection (probability) functions for use-availability data. Package ‘ResourceSelection’, Version 0.3-2." + ] } ], "metadata": { diff --git a/docs/build/doctrees/notebooks/validation.doctree b/docs/build/doctrees/notebooks/validation.doctree index 0f72e5028b117b238dd9eb7100ef2065b1210e17..cb0e3f9f90f235337c31f8ac4cb8512272944b9c 100644 GIT binary patch delta 3152 zcmds3Uu+ab81Hwz_DZp|wgqa%>p-=%c)hmEl|pF|O0iH{di@Jh3+&y^v3uRyJ$Cn6 zuh3jEqL7@Dbc%opf#0Q8$6QeOECK4Y6sy<;%#23IAow@6^R}v6fo_yJz z`R1FM@Av)Y_sv|s4g2?*Qif6v4Ze6b<-BDM*Hb+rSb9c;RS|PHN4~OLFg2wbk+e#% z78Vw2Zn0O?OC`*!G7|j(3H!0E^SY?W#)Vm{VL>`|LT+9fP-J|ELpu2*C)Y@S)CVir zN`lfa$~%!RVB`_KUaVr-jgbrM{TRzpv)-@Vv4lnjADKTJ?+Wr#X}{>v1#&FMNv>xv z00&9WT}PU8Sj(65__&W-3CcS4k)q>#hNGlp9Nd=w4JdFJQtmu}T2j!xmV7aHKPaSS zUfz@}?L~#;>cW?%WF=Z$1f0N#xpc8@ZXEdB0ne z?^@=PzZY1hJK0L=3hJSS?QeC_{p%->kylYs;xV~<0<@wy^yx2QL<&0q1moJ1M@=by zp+M*(*Vb2)PZwu^W_-E$34oCCYcVpzZt~;$R@h6fth8sEyO$gdMajmrnQVbw(=63VGy&--Ht?v z4pLC_=CXRq)cpXAYIg#lK>@<_=jMQMW0jCjlU|t^5$WA<-1=u?G^`wLMH(wMEKC0B#r`Y)k0f4M%y$xxGqwQxCWRSeh*C0fG zH(SZ2P7h=mOS+x{$R^IsZKgb+sVg_W-@G9i78%y=uK|jU>(B22uoGe1ElVZPOq){( z%k<&xmrN^}zuk!Jm}`OOh_!p$IiUuCH)_R3dL&7$m`6_dMj=2p_5KBY%)xk1dK+NR za3IgX@*4pA&IQT<4wCX+x8aEKv>F09#zKLU$t)F**Xa25kYL$2vUg-~ zq?krFoJuYh*}_${c`!98NkBrfuuxbe6gHoRpi5{hi8-c3KI!0h1+i{JU3MF)la%pR zv!V|09_+TE4r*`W-HP9ZX@ho(P@Ni-v1CJ=?5LP4=eQDkOdi!#A4mycxl~hvD!oO* zlIT)-HH26l@K7dI(G_HuRH;|R7zOD~qw2gU>mfw%5?L3$qC0wt*%7a95&IA=i2;?4 z$GX)VS6*eW;J7M>J&yjK@rP#$V21G*-wVJbStp`ok<8At@cZmo#TlDI)HhD-QSnYi z<8A0!N<$Z~Dl}=q7i_43U&QEWP>>(k$PhbxN*(9-N zCW#%rE3xl1VTnqs-HzHQBO9^kx1mP+xYXJeDdbl)8*;`7s-pbR%*NzJX~b?OCsZ6z z6&LRkB~cHRATJdbGiy=Z1vOmChx>R@8h1b*Ugzz|$-8^`otU11Bk>j6;|q=r9i>dr zW5E_Lw=XT_CJ38exM5Zf9w6SChdar_XS4v4&x@8YfmuF`@j$MuudR*iY`ijlOe-T6 z=CA^q)iV-FsH?n?O<&@5y!N@F` z_hUU2z#6O1zN^&XfbS!E10V1WnAtZHwXlf?fR@?eMj+U!Sj?{(R@@1YZYh d4bn-zPS#==f{_fbqUf@s9y4R`nDZ+BxzI*m(FtN&I6{()g%bj-y*QZ86yODga9 z#mhT1nr~iuw51)cS|cXGYmP?ir zyBa@dUzEscqLartG4OL1t!)hoqfpHpC|)iYgy&eZ>y>YOK{5*E0PlTAUoL6^m>_Yw z(*R#EP8WsucYgp8-YA&_hFmRuBZd{&v#%Fg@uMUTv-a0Q2pQO)2uv8z;&Vx`V`DD1 z>q8(4&*&2cD#(uVVn2u{XY@}1HV{K)8$c==Dp~wg^_s~P%p_9umZ&hGdK7YI&AwMh zGEhO)YT__y0cyx_T_Hdn4%e|Lx7?&*cxd?sP9GxX$Q2-Ce&kQ|ZEyX+gL&OrLNYqa;0Ns3 B^-ll* diff --git a/docs/build/html/_sources/notebooks/validation.ipynb.txt b/docs/build/html/_sources/notebooks/validation.ipynb.txt index 20b05f7..0aa6e96 100644 --- a/docs/build/html/_sources/notebooks/validation.ipynb.txt +++ b/docs/build/html/_sources/notebooks/validation.ipynb.txt @@ -24,22 +24,20 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Difference for uniform/histogram binning:\n", + "Difference for equal-width binning:\n", "Reliability difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", "Confidence difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", "\n", - "Difference for quantile/equal frequency binning:\n", - "Reliability difference: [1.e-05 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00\n", - " 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00]\n", - "Confidence difference: [1.e-05 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00\n", - " 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00]\n" + "Difference for equal-count binning:\n", + "Reliability difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", + "Confidence difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n" ] } ], @@ -51,17 +49,21 @@ "### loading the data\n", "wellcal_dataloader = data_loader(data_path=\"../../../example_data/simulated_welldata.csv\")\n", "\n", + "###scikit-learn implementation\n", "scikit_reliability_H,scikit_confidence_H = calibration_curve(wellcal_dataloader.labels,wellcal_dataloader.probs[:,1],n_bins=15,strategy='uniform',pos_label=1)\n", "scikit_reliability_C,scikit_confidence_C = calibration_curve(wellcal_dataloader.labels,wellcal_dataloader.probs[:,1],n_bins=15,strategy='quantile',pos_label=1)\n", + "\n", + "### calzone implementation\n", "calzone_reliability_H,calzone_confindence_H,bin_edge_H,bin_count_H = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=1, is_equal_freq=False)\n", "calzone_reliability_C,calzone_confindence_C,bin_edge_C,bin_count_C = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=1, is_equal_freq=True)\n", "\n", - "print(\"Difference for uniform/histogram binning:\")\n", - "print(\"Reliability difference:\", np.round(np.abs(scikit_reliability_H - calzone_reliability_H), 5))\n", - "print(\"Confidence difference:\", np.round(np.abs(scikit_confidence_H - calzone_confindence_H), 5))\n", - "print(\"\\nDifference for quantile/equal frequency binning:\")\n", - "print(\"Reliability difference:\", np.round(np.abs(scikit_reliability_C - calzone_reliability_C), 5))\n", - "print(\"Confidence difference:\", np.round(np.abs(scikit_confidence_C - calzone_confindence_C), 5))" + "###showing the difference between the two implementations\n", + "print(\"Difference for equal-width binning:\")\n", + "print(\"Reliability difference:\", np.round(np.abs(scikit_reliability_H - calzone_reliability_H), 4))\n", + "print(\"Confidence difference:\", np.round(np.abs(scikit_confidence_H - calzone_confindence_H), 4))\n", + "print(\"\\nDifference for equal-count binning:\")\n", + "print(\"Reliability difference:\", np.round(np.abs(scikit_reliability_C - calzone_reliability_C), 4))\n", + "print(\"Confidence difference:\", np.round(np.abs(scikit_confidence_C - calzone_confindence_C), 4))" ] }, { @@ -82,7 +84,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -100,13 +102,14 @@ "calzone_reliability_topclass_H,calzone_confindence_topclass_H,bin_edge_topclass_H,bin_count_topclass_H = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=None, is_equal_freq=False)\n", "calzone_reliability_topclass_C,calzone_confindence_topclass_C,bin_edge_topclass_C,bin_count_topclass_C = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=None, is_equal_freq=True)\n", "\n", + "### compare MAPIE and calzone equal-width binning\n", "print(\"MAPIE topclass ECE-H:\",top_label_ece(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins = 15,split_strategy='uniform'))\n", "print(\"calzone topclass ECE-H:\",calculate_ece_mce(calzone_reliability_topclass_H,calzone_confindence_topclass_H,bin_count_topclass_H)[0])\n" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -119,6 +122,7 @@ } ], "source": [ + "### compare MAPIE and calzone equal-count binning\n", "print(\"MAPIE topclass ECE-C:\",top_label_ece(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins = 15,split_strategy='quantile'))\n", "print(\"calzone topclass ECE-C:\",calculate_ece_mce(calzone_reliability_topclass_C,calzone_confindence_topclass_C,bin_count_topclass_C)[0])\n" ] @@ -132,7 +136,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -145,6 +149,7 @@ } ], "source": [ + "### compare the Z statistics\n", "print(\"MAPIE Z statistic\", spiegelhalter_statistic(wellcal_dataloader.labels,wellcal_dataloader.probs[:,1]))\n", "print(\"calzone Z statistic\", spiegelhalter_z_test(wellcal_dataloader.labels,wellcal_dataloader.probs)[0])" ] @@ -233,6 +238,19 @@ "source": [ "We see that the test statistics are the same. The R package doesn't allow user input degree of freedom so the p-value is different as expected." ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## reference\n", + "\n", + "Taquet, V., Blot, V., Morzadec, T., Lacombe, L., & Brunel, N. (2022). MAPIE: an open-source library for distribution-free uncertainty quantification. arXiv preprint arXiv:2207.12274.\n", + "\n", + "Pedregosa, F., Varoquaux, Ga\"el, Gramfort, A., Michel, V., Thirion, B., Grisel, O., … others. (2011). Scikit-learn: Machine learning in Python. Journal of Machine Learning Research, 12(Oct), 2825–2830.\n", + "\n", + "Lele, S. R., Keim, J. L., & Solymos, P. (2017). Resource selection (probability) functions for use-availability data. Package ‘ResourceSelection’, Version 0.3-2." + ] } ], "metadata": { diff --git a/docs/build/html/index.html b/docs/build/html/index.html index d8e30a3..f433cb0 100644 --- a/docs/build/html/index.html +++ b/docs/build/html/index.html @@ -180,6 +180,7 @@

Welcome to the documentation for calzoneReliability diagram
  • Expected calibration error and Z test
  • HL test
  • +
  • reference
  • calzone
  • calzone
  • @@ -103,7 +104,7 @@

    Validating metrics with external packages

    We will use scikit-learn’s calibration_curve function to calculate the reliability diagram

    -
    [1]:
    +
    [2]:
     
    from calzone.utils import reliability_diagram,data_loader
    @@ -113,17 +114,21 @@ 

    Reliability diagram### loading the data wellcal_dataloader = data_loader(data_path="../../../example_data/simulated_welldata.csv") +###scikit-learn implementation scikit_reliability_H,scikit_confidence_H = calibration_curve(wellcal_dataloader.labels,wellcal_dataloader.probs[:,1],n_bins=15,strategy='uniform',pos_label=1) scikit_reliability_C,scikit_confidence_C = calibration_curve(wellcal_dataloader.labels,wellcal_dataloader.probs[:,1],n_bins=15,strategy='quantile',pos_label=1) + +### calzone implementation calzone_reliability_H,calzone_confindence_H,bin_edge_H,bin_count_H = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=1, is_equal_freq=False) calzone_reliability_C,calzone_confindence_C,bin_edge_C,bin_count_C = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=1, is_equal_freq=True) -print("Difference for uniform/histogram binning:") -print("Reliability difference:", np.round(np.abs(scikit_reliability_H - calzone_reliability_H), 5)) -print("Confidence difference:", np.round(np.abs(scikit_confidence_H - calzone_confindence_H), 5)) -print("\nDifference for quantile/equal frequency binning:") -print("Reliability difference:", np.round(np.abs(scikit_reliability_C - calzone_reliability_C), 5)) -print("Confidence difference:", np.round(np.abs(scikit_confidence_C - calzone_confindence_C), 5)) +###showing the difference between the two implementations +print("Difference for equal-width binning:") +print("Reliability difference:", np.round(np.abs(scikit_reliability_H - calzone_reliability_H), 4)) +print("Confidence difference:", np.round(np.abs(scikit_confidence_H - calzone_confindence_H), 4)) +print("\nDifference for equal-count binning:") +print("Reliability difference:", np.round(np.abs(scikit_reliability_C - calzone_reliability_C), 4)) +print("Confidence difference:", np.round(np.abs(scikit_confidence_C - calzone_confindence_C), 4))

    @@ -132,15 +137,13 @@

    Reliability diagram
    -Difference for uniform/histogram binning:
    +Difference for equal-width binning:
     Reliability difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
     Confidence difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
     
    -Difference for quantile/equal frequency binning:
    -Reliability difference: [1.e-05 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00
    - 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00]
    -Confidence difference: [1.e-05 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00
    - 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00]
    +Difference for equal-count binning:
    +Reliability difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
    +Confidence difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
     

    We can see that the calzone package return the same Reliability diagram as the sckit-learn package. We will move to test the expected calibration error.

    @@ -149,7 +152,7 @@

    Reliability diagram

    We will use mapie package to validate some of the metrics in calzone. Description of mapie can be found here.

    -
    [43]:
    +
    [3]:
     
    @@ -172,10 +176,11 @@

    Expected calibration error and Z test -
    [40]:
    +
    [4]:
     
    -
    print("MAPIE topclass ECE-C:",top_label_ece(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins = 15,split_strategy='quantile'))
    +
    ### compare MAPIE and calzone equal-count binning
    +print("MAPIE topclass ECE-C:",top_label_ece(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins = 15,split_strategy='quantile'))
     print("calzone topclass ECE-C:",calculate_ece_mce(calzone_reliability_topclass_C,calzone_confindence_topclass_C,bin_count_topclass_C)[0])
     
    @@ -191,10 +196,11 @@

    Expected calibration error and Z testmapie package incorrectly calculates the p-value by using a one-sided test. Therefore, we will only compare the test statistic but not the p-value.

    -
    [45]:
    +
    [5]:
     
    -

    We see that the test statistics are the same. The R package doesn’t allow user input degree of freedom so the p-value is different as expected.

    +
    +

    reference

    +

    Taquet, V., Blot, V., Morzadec, T., Lacombe, L., & Brunel, N. (2022). MAPIE: an open-source library for distribution-free uncertainty quantification. arXiv preprint arXiv:2207.12274.

    +

    Pedregosa, F., Varoquaux, Ga”el, Gramfort, A., Michel, V., Thirion, B., Grisel, O., … others. (2011). Scikit-learn: Machine learning in Python. Journal of Machine Learning Research, 12(Oct), 2825–2830.

    +

    Lele, S. R., Keim, J. L., & Solymos, P. (2017). Resource selection (probability) functions for use-availability data. Package ‘ResourceSelection’, Version 0.3-2.

    +
    diff --git a/docs/build/html/notebooks/validation.ipynb b/docs/build/html/notebooks/validation.ipynb index 20b05f7..0aa6e96 100644 --- a/docs/build/html/notebooks/validation.ipynb +++ b/docs/build/html/notebooks/validation.ipynb @@ -24,22 +24,20 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Difference for uniform/histogram binning:\n", + "Difference for equal-width binning:\n", "Reliability difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", "Confidence difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", "\n", - "Difference for quantile/equal frequency binning:\n", - "Reliability difference: [1.e-05 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00\n", - " 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00]\n", - "Confidence difference: [1.e-05 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00\n", - " 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00]\n" + "Difference for equal-count binning:\n", + "Reliability difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", + "Confidence difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n" ] } ], @@ -51,17 +49,21 @@ "### loading the data\n", "wellcal_dataloader = data_loader(data_path=\"../../../example_data/simulated_welldata.csv\")\n", "\n", + "###scikit-learn implementation\n", "scikit_reliability_H,scikit_confidence_H = calibration_curve(wellcal_dataloader.labels,wellcal_dataloader.probs[:,1],n_bins=15,strategy='uniform',pos_label=1)\n", "scikit_reliability_C,scikit_confidence_C = calibration_curve(wellcal_dataloader.labels,wellcal_dataloader.probs[:,1],n_bins=15,strategy='quantile',pos_label=1)\n", + "\n", + "### calzone implementation\n", "calzone_reliability_H,calzone_confindence_H,bin_edge_H,bin_count_H = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=1, is_equal_freq=False)\n", "calzone_reliability_C,calzone_confindence_C,bin_edge_C,bin_count_C = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=1, is_equal_freq=True)\n", "\n", - "print(\"Difference for uniform/histogram binning:\")\n", - "print(\"Reliability difference:\", np.round(np.abs(scikit_reliability_H - calzone_reliability_H), 5))\n", - "print(\"Confidence difference:\", np.round(np.abs(scikit_confidence_H - calzone_confindence_H), 5))\n", - "print(\"\\nDifference for quantile/equal frequency binning:\")\n", - "print(\"Reliability difference:\", np.round(np.abs(scikit_reliability_C - calzone_reliability_C), 5))\n", - "print(\"Confidence difference:\", np.round(np.abs(scikit_confidence_C - calzone_confindence_C), 5))" + "###showing the difference between the two implementations\n", + "print(\"Difference for equal-width binning:\")\n", + "print(\"Reliability difference:\", np.round(np.abs(scikit_reliability_H - calzone_reliability_H), 4))\n", + "print(\"Confidence difference:\", np.round(np.abs(scikit_confidence_H - calzone_confindence_H), 4))\n", + "print(\"\\nDifference for equal-count binning:\")\n", + "print(\"Reliability difference:\", np.round(np.abs(scikit_reliability_C - calzone_reliability_C), 4))\n", + "print(\"Confidence difference:\", np.round(np.abs(scikit_confidence_C - calzone_confindence_C), 4))" ] }, { @@ -82,7 +84,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -100,13 +102,14 @@ "calzone_reliability_topclass_H,calzone_confindence_topclass_H,bin_edge_topclass_H,bin_count_topclass_H = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=None, is_equal_freq=False)\n", "calzone_reliability_topclass_C,calzone_confindence_topclass_C,bin_edge_topclass_C,bin_count_topclass_C = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=None, is_equal_freq=True)\n", "\n", + "### compare MAPIE and calzone equal-width binning\n", "print(\"MAPIE topclass ECE-H:\",top_label_ece(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins = 15,split_strategy='uniform'))\n", "print(\"calzone topclass ECE-H:\",calculate_ece_mce(calzone_reliability_topclass_H,calzone_confindence_topclass_H,bin_count_topclass_H)[0])\n" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -119,6 +122,7 @@ } ], "source": [ + "### compare MAPIE and calzone equal-count binning\n", "print(\"MAPIE topclass ECE-C:\",top_label_ece(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins = 15,split_strategy='quantile'))\n", "print(\"calzone topclass ECE-C:\",calculate_ece_mce(calzone_reliability_topclass_C,calzone_confindence_topclass_C,bin_count_topclass_C)[0])\n" ] @@ -132,7 +136,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -145,6 +149,7 @@ } ], "source": [ + "### compare the Z statistics\n", "print(\"MAPIE Z statistic\", spiegelhalter_statistic(wellcal_dataloader.labels,wellcal_dataloader.probs[:,1]))\n", "print(\"calzone Z statistic\", spiegelhalter_z_test(wellcal_dataloader.labels,wellcal_dataloader.probs)[0])" ] @@ -233,6 +238,19 @@ "source": [ "We see that the test statistics are the same. The R package doesn't allow user input degree of freedom so the p-value is different as expected." ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## reference\n", + "\n", + "Taquet, V., Blot, V., Morzadec, T., Lacombe, L., & Brunel, N. (2022). MAPIE: an open-source library for distribution-free uncertainty quantification. arXiv preprint arXiv:2207.12274.\n", + "\n", + "Pedregosa, F., Varoquaux, Ga\"el, Gramfort, A., Michel, V., Thirion, B., Grisel, O., … others. (2011). Scikit-learn: Machine learning in Python. Journal of Machine Learning Research, 12(Oct), 2825–2830.\n", + "\n", + "Lele, S. R., Keim, J. L., & Solymos, P. (2017). Resource selection (probability) functions for use-availability data. Package ‘ResourceSelection’, Version 0.3-2." + ] } ], "metadata": { diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv index c5a2786893671e165529f08a145d83b3e03823a4..923454a7b60cda2425ff208269697185721eb57a 100644 GIT binary patch delta 240 zcmVvYmrZ3cV}OIt(N)k>;jWtc(`s&*P}k6%=_!qDPJX8xAy; z)VE~7^Z{!wj&`Jq{@IEHY8}6K(XG0o&3~dYi7DJQ*UK8RbC~O1fqtOUj=Wna4V%~E zlxgQ}FY8>-l#ZMpS{FXtdhy#`i-S-%(Dm1Emr|Ql;e0y) delta 229 zcmV + File: notebooks_quickstart_16_1.png Graphic file (type png) Package pdftex.def Info: notebooks_quickstart_16_1.png used on input line 409. (pdftex.def) Requested size: 469.77333pt x 354.69556pt. [6 <./notebooks_quickstart_16_1.png>] - + File: notebooks_quickstart_18_1.png Graphic file (type png) Package pdftex.def Info: notebooks_quickstart_18_1.png used on input line 495. @@ -924,7 +924,7 @@ Overfull \vbox (0.79068pt too high) detected at line 561 [] [8 <./notebooks_quickstart_18_1.png>] - + File: notebooks_quickstart_20_1.png Graphic file (type png) Package pdftex.def Info: notebooks_quickstart_20_1.png used on input line 580. @@ -935,7 +935,7 @@ Underfull \vbox (badness 10000) detected at line 623 [] [9 <./notebooks_quickstart_20_1.png>] - + File: notebooks_quickstart_20_3.png Graphic file (type png) Package pdftex.def Info: notebooks_quickstart_20_3.png used on input line 642. @@ -946,7 +946,7 @@ Underfull \vbox (badness 10000) detected at line 685 [] [10 <./notebooks_quickstart_20_3.png>] - + File: notebooks_quickstart_20_5.png Graphic file (type png) Package pdftex.def Info: notebooks_quickstart_20_5.png used on input line 705. @@ -960,7 +960,7 @@ Underfull \vbox (badness 10000) detected at line 709 ] Chapter 2. - + File: mytable.png Graphic file (type png) Package pdftex.def Info: mytable.png used on input line 787. @@ -969,7 +969,7 @@ Package pdftex.def Info: mytable.png used on input line 787. ] Chapter 3. - + File: notebooks_reliability_diagram_3_0.png Graphic file (type png) Package pdftex.def Info: notebooks_reliability_diagram_3_0.png used on input l @@ -980,7 +980,7 @@ Underfull \vbox (badness 10000) detected at line 860 [] [17] - + File: notebooks_reliability_diagram_5_0.png Graphic file (type png) Package pdftex.def Info: notebooks_reliability_diagram_5_0.png used on input l @@ -995,7 +995,7 @@ Underfull \vbox (badness 3240) detected at line 929 [] [19 <./notebooks_reliability_diagram_5_0.png>] - + File: notebooks_reliability_diagram_8_0.png Graphic file (type png) Package pdftex.def Info: notebooks_reliability_diagram_8_0.png used on input l @@ -1006,7 +1006,7 @@ Underfull \vbox (badness 10000) detected at line 975 [] [20 <./notebooks_reliability_diagram_8_0.png>] - + File: notebooks_reliability_diagram_9_0.png Graphic file (type png) Package pdftex.def Info: notebooks_reliability_diagram_9_0.png used on input l @@ -1017,7 +1017,7 @@ ine 990. ] Chapter 4. [23] [24] [25] - + File: notebooks_ece_mce_12_1.png Graphic file (type png) Package pdftex.def Info: notebooks_ece_mce_12_1.png used on input line 1316. @@ -1027,12 +1027,12 @@ Package pdftex.def Info: notebooks_ece_mce_12_1.png used on input line 1316. ] Chapter 5. [29] [30] [31] - + File: notebooks_hl_test_13_1.png Graphic file (type png) Package pdftex.def Info: notebooks_hl_test_13_1.png used on input line 1633. (pdftex.def) Requested size: 426.85823pt x 341.02489pt. - + File: notebooks_hl_test_14_1.png Graphic file (type png) Package pdftex.def Info: notebooks_hl_test_14_1.png used on input line 1688. @@ -1051,7 +1051,7 @@ Chapter 6. ] Chapter 7. [41] [42] [43] - + File: notebooks_ici_8_1.png Graphic file (type png) Package pdftex.def Info: notebooks_ici_8_1.png used on input line 2352. @@ -1061,7 +1061,7 @@ Chapter 8. [45 ] [46] - + File: notebooks_spiegelhalter_z_9_1.png Graphic file (type png) Package pdftex.def Info: notebooks_spiegelhalter_z_9_1.png used on input line @@ -1093,7 +1093,7 @@ Overfull \vbox (3.52196pt too high) detected at line 3160 [55] [56] Chapter 11. - + File: notebooks_topclass_2_0.png Graphic file (type png) Package pdftex.def Info: notebooks_topclass_2_0.png used on input line 3228. @@ -1116,23 +1116,23 @@ Chapter 12. ] Chapter 13. -[63] [64] [65] [66 +[63] [64] [65] [66] +Chapter 14. +[67 ] -Chapter 14. -[67] LaTeX Font Info: Font shape `TS1/txtt/m/it' in size <10> not available (Font) Font shape `TS1/txtt/m/sl' tried instead on input line 1. [68] LaTeX Font Info: Trying to load font information for U+fontawesomefree1 on i -nput line 3923. +nput line 3940. (/usr/share/texlive/texmf-dist/tex/latex/fontawesome5/ufontawesomefree1.fd) -Overfull \vbox (0.52995pt too high) detected at line 3986 +Overfull \vbox (0.52995pt too high) detected at line 4003 [] [69] [70] [71] [72] [73] [74] -Overfull \hbox (73.01103pt too wide) in paragraph at lines 4706--4710 +Overfull \hbox (73.01103pt too wide) in paragraph at lines 4723--4727 []\T1/qtm/m/n/10 Note: - If there is a header, it must be in the for-mat: proba _0,proba_1,...,subgroup_1(optional),subgroup_2(optional),...,label [] @@ -1260,21 +1260,21 @@ Underfull \hbox (badness 10000) in paragraph at lines 116--118 [84 ]) -Package atveryend Info: Empty hook `BeforeClearDocument' on input line 5354. -Package atveryend Info: Empty hook `AfterLastShipout' on input line 5354. +Package atveryend Info: Empty hook `BeforeClearDocument' on input line 5371. +Package atveryend Info: Empty hook `AfterLastShipout' on input line 5371. (./calzone.aux) -Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 5354. -Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 5354. +Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 5371. +Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 5371. Package rerunfilecheck Info: File `calzone.out' has not changed. -(rerunfilecheck) Checksum: F42AC025D9512C9E6725FA09407D2A58;11786. -Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 5354. +(rerunfilecheck) Checksum: A2AB878130D2CC00680E15B4225666B4;11888. +Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 5371. ) Here is how much of TeX's memory you used: - 19005 strings out of 481239 - 318468 string characters out of 5920377 - 675207 words of memory out of 5000000 - 33630 multiletter control sequences out of 15000+600000 + 19008 strings out of 481239 + 318526 string characters out of 5920377 + 675246 words of memory out of 5000000 + 33632 multiletter control sequences out of 15000+600000 596176 words of font info for 75 fonts, out of 8000000 for 9000 1142 hyphenation exceptions out of 8191 39i,19n,51p,1219b,689s stack positions out of 5000i,500n,10000p,200000b,80000s @@ -1301,10 +1301,10 @@ fonts/type1/public/tex-gyre/qtmri.pfb> -Output written on calzone.pdf (88 pages, 1447119 bytes). +Output written on calzone.pdf (88 pages, 1448130 bytes). PDF statistics: - 993 PDF objects out of 1000 (max. 8388607) - 834 compressed objects within 9 object streams - 198 named destinations out of 1000 (max. 500000) - 613 words of extra memory for PDF output out of 10000 (max. 10000000) + 999 PDF objects out of 1000 (max. 8388607) + 840 compressed objects within 9 object streams + 199 named destinations out of 1000 (max. 500000) + 621 words of extra memory for PDF output out of 10000 (max. 10000000) diff --git a/docs/build/latex/calzone.out b/docs/build/latex/calzone.out index 3270eab..252cca7 100644 --- a/docs/build/latex/calzone.out +++ b/docs/build/latex/calzone.out @@ -53,12 +53,13 @@ \BOOKMARK [1][-]{section.13.1}{\376\377\000R\000e\000l\000i\000a\000b\000i\000l\000i\000t\000y\000\040\000d\000i\000a\000g\000r\000a\000m}{chapter.13}% 53 \BOOKMARK [1][-]{section.13.2}{\376\377\000E\000x\000p\000e\000c\000t\000e\000d\000\040\000c\000a\000l\000i\000b\000r\000a\000t\000i\000o\000n\000\040\000e\000r\000r\000o\000r\000\040\000a\000n\000d\000\040\000Z\000\040\000t\000e\000s\000t}{chapter.13}% 54 \BOOKMARK [1][-]{section.13.3}{\376\377\000H\000L\000\040\000t\000e\000s\000t}{chapter.13}% 55 -\BOOKMARK [0][-]{chapter.14}{\376\377\000c\000a\000l\000z\000o\000n\000e}{}% 56 -\BOOKMARK [1][-]{section.14.1}{\376\377\000c\000a\000l\000z\000o\000n\000e\000\040\000p\000a\000c\000k\000a\000g\000e}{chapter.14}% 57 -\BOOKMARK [2][-]{subsection.14.1.1}{\376\377\000S\000u\000b\000m\000o\000d\000u\000l\000e\000s}{section.14.1}% 58 -\BOOKMARK [2][-]{subsection.14.1.2}{\376\377\000c\000a\000l\000z\000o\000n\000e\000.\000m\000e\000t\000r\000i\000c\000s\000\040\000m\000o\000d\000u\000l\000e}{section.14.1}% 59 -\BOOKMARK [2][-]{subsection.14.1.3}{\376\377\000c\000a\000l\000z\000o\000n\000e\000.\000u\000t\000i\000l\000s\000\040\000m\000o\000d\000u\000l\000e}{section.14.1}% 60 -\BOOKMARK [2][-]{subsection.14.1.4}{\376\377\000c\000a\000l\000z\000o\000n\000e\000.\000v\000i\000s\000\040\000m\000o\000d\000u\000l\000e}{section.14.1}% 61 -\BOOKMARK [2][-]{subsection.14.1.5}{\376\377\000M\000o\000d\000u\000l\000e\000\040\000c\000o\000n\000t\000e\000n\000t\000s}{section.14.1}% 62 -\BOOKMARK [0][-]{section*.48}{\376\377\000P\000y\000t\000h\000o\000n\000\040\000M\000o\000d\000u\000l\000e\000\040\000I\000n\000d\000e\000x}{}% 63 -\BOOKMARK [0][-]{section*.49}{\376\377\000I\000n\000d\000e\000x}{}% 64 +\BOOKMARK [1][-]{section.13.4}{\376\377\000r\000e\000f\000e\000r\000e\000n\000c\000e}{chapter.13}% 56 +\BOOKMARK [0][-]{chapter.14}{\376\377\000c\000a\000l\000z\000o\000n\000e}{}% 57 +\BOOKMARK [1][-]{section.14.1}{\376\377\000c\000a\000l\000z\000o\000n\000e\000\040\000p\000a\000c\000k\000a\000g\000e}{chapter.14}% 58 +\BOOKMARK [2][-]{subsection.14.1.1}{\376\377\000S\000u\000b\000m\000o\000d\000u\000l\000e\000s}{section.14.1}% 59 +\BOOKMARK [2][-]{subsection.14.1.2}{\376\377\000c\000a\000l\000z\000o\000n\000e\000.\000m\000e\000t\000r\000i\000c\000s\000\040\000m\000o\000d\000u\000l\000e}{section.14.1}% 60 +\BOOKMARK [2][-]{subsection.14.1.3}{\376\377\000c\000a\000l\000z\000o\000n\000e\000.\000u\000t\000i\000l\000s\000\040\000m\000o\000d\000u\000l\000e}{section.14.1}% 61 +\BOOKMARK [2][-]{subsection.14.1.4}{\376\377\000c\000a\000l\000z\000o\000n\000e\000.\000v\000i\000s\000\040\000m\000o\000d\000u\000l\000e}{section.14.1}% 62 +\BOOKMARK [2][-]{subsection.14.1.5}{\376\377\000M\000o\000d\000u\000l\000e\000\040\000c\000o\000n\000t\000e\000n\000t\000s}{section.14.1}% 63 +\BOOKMARK [0][-]{section*.48}{\376\377\000P\000y\000t\000h\000o\000n\000\040\000M\000o\000d\000u\000l\000e\000\040\000I\000n\000d\000e\000x}{}% 64 +\BOOKMARK [0][-]{section*.49}{\376\377\000I\000n\000d\000e\000x}{}% 65 diff --git a/docs/build/latex/calzone.pdf b/docs/build/latex/calzone.pdf index ea88d21b71008a1a6bd0150f826ff029b635b7b1..e899c9e296719e4603f00d6110afd89179a482ff 100644 GIT binary patch delta 41326 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 z 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ϕR&a@=>5^MC&IpNR{bafxBt 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 diff --git a/docs/build/latex/calzone.tex b/docs/build/latex/calzone.tex index 3d43080..34235b3 100644 --- a/docs/build/latex/calzone.tex +++ b/docs/build/latex/calzone.tex @@ -3338,24 +3338,28 @@ \section{Reliability diagram} \begin{sphinxuseclass}{nbinput} { \begin{sphinxVerbatim}[commandchars=\\\{\}] -\llap{\color{nbsphinxin}[1]:\,\hspace{\fboxrule}\hspace{\fboxsep}}\PYG{k+kn}{from} \PYG{n+nn}{calzone}\PYG{n+nn}{.}\PYG{n+nn}{utils} \PYG{k+kn}{import} \PYG{n}{reliability\PYGZus{}diagram}\PYG{p}{,}\PYG{n}{data\PYGZus{}loader} +\llap{\color{nbsphinxin}[2]:\,\hspace{\fboxrule}\hspace{\fboxsep}}\PYG{k+kn}{from} \PYG{n+nn}{calzone}\PYG{n+nn}{.}\PYG{n+nn}{utils} \PYG{k+kn}{import} \PYG{n}{reliability\PYGZus{}diagram}\PYG{p}{,}\PYG{n}{data\PYGZus{}loader} \PYG{k+kn}{from} \PYG{n+nn}{calzone}\PYG{n+nn}{.}\PYG{n+nn}{metrics} \PYG{k+kn}{import} \PYG{n}{calculate\PYGZus{}ece\PYGZus{}mce}\PYG{p}{,}\PYG{n}{hosmer\PYGZus{}lemeshow\PYGZus{}test} \PYG{k+kn}{import} \PYG{n+nn}{numpy} \PYG{k}{as} \PYG{n+nn}{np} \PYG{k+kn}{from} \PYG{n+nn}{sklearn}\PYG{n+nn}{.}\PYG{n+nn}{calibration} \PYG{k+kn}{import} \PYG{n}{calibration\PYGZus{}curve} \PYG{c+c1}{\PYGZsh{}\PYGZsh{}\PYGZsh{} loading the data} \PYG{n}{wellcal\PYGZus{}dataloader} \PYG{o}{=} \PYG{n}{data\PYGZus{}loader}\PYG{p}{(}\PYG{n}{data\PYGZus{}path}\PYG{o}{=}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{../../../example\PYGZus{}data/simulated\PYGZus{}welldata.csv}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{)} +\PYG{c+c1}{\PYGZsh{}\PYGZsh{}\PYGZsh{}scikit\PYGZhy{}learn implementation} \PYG{n}{scikit\PYGZus{}reliability\PYGZus{}H}\PYG{p}{,}\PYG{n}{scikit\PYGZus{}confidence\PYGZus{}H} \PYG{o}{=} \PYG{n}{calibration\PYGZus{}curve}\PYG{p}{(}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{labels}\PYG{p}{,}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{probs}\PYG{p}{[}\PYG{p}{:}\PYG{p}{,}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{p}{,}\PYG{n}{n\PYGZus{}bins}\PYG{o}{=}\PYG{l+m+mi}{15}\PYG{p}{,}\PYG{n}{strategy}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{uniform}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,}\PYG{n}{pos\PYGZus{}label}\PYG{o}{=}\PYG{l+m+mi}{1}\PYG{p}{)} \PYG{n}{scikit\PYGZus{}reliability\PYGZus{}C}\PYG{p}{,}\PYG{n}{scikit\PYGZus{}confidence\PYGZus{}C} \PYG{o}{=} \PYG{n}{calibration\PYGZus{}curve}\PYG{p}{(}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{labels}\PYG{p}{,}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{probs}\PYG{p}{[}\PYG{p}{:}\PYG{p}{,}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{p}{,}\PYG{n}{n\PYGZus{}bins}\PYG{o}{=}\PYG{l+m+mi}{15}\PYG{p}{,}\PYG{n}{strategy}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{quantile}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,}\PYG{n}{pos\PYGZus{}label}\PYG{o}{=}\PYG{l+m+mi}{1}\PYG{p}{)} + +\PYG{c+c1}{\PYGZsh{}\PYGZsh{}\PYGZsh{} calzone implementation} \PYG{n}{calzone\PYGZus{}reliability\PYGZus{}H}\PYG{p}{,}\PYG{n}{calzone\PYGZus{}confindence\PYGZus{}H}\PYG{p}{,}\PYG{n}{bin\PYGZus{}edge\PYGZus{}H}\PYG{p}{,}\PYG{n}{bin\PYGZus{}count\PYGZus{}H} \PYG{o}{=} \PYG{n}{reliability\PYGZus{}diagram}\PYG{p}{(}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{labels}\PYG{p}{,}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{probs}\PYG{p}{,}\PYG{n}{num\PYGZus{}bins}\PYG{o}{=}\PYG{l+m+mi}{15}\PYG{p}{,} \PYG{n}{class\PYGZus{}to\PYGZus{}plot}\PYG{o}{=}\PYG{l+m+mi}{1}\PYG{p}{,} \PYG{n}{is\PYGZus{}equal\PYGZus{}freq}\PYG{o}{=}\PYG{k+kc}{False}\PYG{p}{)} \PYG{n}{calzone\PYGZus{}reliability\PYGZus{}C}\PYG{p}{,}\PYG{n}{calzone\PYGZus{}confindence\PYGZus{}C}\PYG{p}{,}\PYG{n}{bin\PYGZus{}edge\PYGZus{}C}\PYG{p}{,}\PYG{n}{bin\PYGZus{}count\PYGZus{}C} \PYG{o}{=} \PYG{n}{reliability\PYGZus{}diagram}\PYG{p}{(}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{labels}\PYG{p}{,}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{probs}\PYG{p}{,}\PYG{n}{num\PYGZus{}bins}\PYG{o}{=}\PYG{l+m+mi}{15}\PYG{p}{,} \PYG{n}{class\PYGZus{}to\PYGZus{}plot}\PYG{o}{=}\PYG{l+m+mi}{1}\PYG{p}{,} \PYG{n}{is\PYGZus{}equal\PYGZus{}freq}\PYG{o}{=}\PYG{k+kc}{True}\PYG{p}{)} -\PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{Difference for uniform/histogram binning:}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{)} -\PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{Reliability difference:}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,} \PYG{n}{np}\PYG{o}{.}\PYG{n}{round}\PYG{p}{(}\PYG{n}{np}\PYG{o}{.}\PYG{n}{abs}\PYG{p}{(}\PYG{n}{scikit\PYGZus{}reliability\PYGZus{}H} \PYG{o}{\PYGZhy{}} \PYG{n}{calzone\PYGZus{}reliability\PYGZus{}H}\PYG{p}{)}\PYG{p}{,} \PYG{l+m+mi}{5}\PYG{p}{)}\PYG{p}{)} -\PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{Confidence difference:}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,} \PYG{n}{np}\PYG{o}{.}\PYG{n}{round}\PYG{p}{(}\PYG{n}{np}\PYG{o}{.}\PYG{n}{abs}\PYG{p}{(}\PYG{n}{scikit\PYGZus{}confidence\PYGZus{}H} \PYG{o}{\PYGZhy{}} \PYG{n}{calzone\PYGZus{}confindence\PYGZus{}H}\PYG{p}{)}\PYG{p}{,} \PYG{l+m+mi}{5}\PYG{p}{)}\PYG{p}{)} -\PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+se}{\PYGZbs{}n}\PYG{l+s+s2}{Difference for quantile/equal frequency binning:}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{)} -\PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{Reliability difference:}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,} \PYG{n}{np}\PYG{o}{.}\PYG{n}{round}\PYG{p}{(}\PYG{n}{np}\PYG{o}{.}\PYG{n}{abs}\PYG{p}{(}\PYG{n}{scikit\PYGZus{}reliability\PYGZus{}C} \PYG{o}{\PYGZhy{}} \PYG{n}{calzone\PYGZus{}reliability\PYGZus{}C}\PYG{p}{)}\PYG{p}{,} \PYG{l+m+mi}{5}\PYG{p}{)}\PYG{p}{)} -\PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{Confidence difference:}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,} \PYG{n}{np}\PYG{o}{.}\PYG{n}{round}\PYG{p}{(}\PYG{n}{np}\PYG{o}{.}\PYG{n}{abs}\PYG{p}{(}\PYG{n}{scikit\PYGZus{}confidence\PYGZus{}C} \PYG{o}{\PYGZhy{}} \PYG{n}{calzone\PYGZus{}confindence\PYGZus{}C}\PYG{p}{)}\PYG{p}{,} \PYG{l+m+mi}{5}\PYG{p}{)}\PYG{p}{)} +\PYG{c+c1}{\PYGZsh{}\PYGZsh{}\PYGZsh{}showing the difference between the two implementations} +\PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{Difference for equal\PYGZhy{}width binning:}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{)} +\PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{Reliability difference:}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,} \PYG{n}{np}\PYG{o}{.}\PYG{n}{round}\PYG{p}{(}\PYG{n}{np}\PYG{o}{.}\PYG{n}{abs}\PYG{p}{(}\PYG{n}{scikit\PYGZus{}reliability\PYGZus{}H} \PYG{o}{\PYGZhy{}} \PYG{n}{calzone\PYGZus{}reliability\PYGZus{}H}\PYG{p}{)}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{)} +\PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{Confidence difference:}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,} \PYG{n}{np}\PYG{o}{.}\PYG{n}{round}\PYG{p}{(}\PYG{n}{np}\PYG{o}{.}\PYG{n}{abs}\PYG{p}{(}\PYG{n}{scikit\PYGZus{}confidence\PYGZus{}H} \PYG{o}{\PYGZhy{}} \PYG{n}{calzone\PYGZus{}confindence\PYGZus{}H}\PYG{p}{)}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{)} +\PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+se}{\PYGZbs{}n}\PYG{l+s+s2}{Difference for equal\PYGZhy{}count binning:}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{)} +\PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{Reliability difference:}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,} \PYG{n}{np}\PYG{o}{.}\PYG{n}{round}\PYG{p}{(}\PYG{n}{np}\PYG{o}{.}\PYG{n}{abs}\PYG{p}{(}\PYG{n}{scikit\PYGZus{}reliability\PYGZus{}C} \PYG{o}{\PYGZhy{}} \PYG{n}{calzone\PYGZus{}reliability\PYGZus{}C}\PYG{p}{)}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{)} +\PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{Confidence difference:}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,} \PYG{n}{np}\PYG{o}{.}\PYG{n}{round}\PYG{p}{(}\PYG{n}{np}\PYG{o}{.}\PYG{n}{abs}\PYG{p}{(}\PYG{n}{scikit\PYGZus{}confidence\PYGZus{}C} \PYG{o}{\PYGZhy{}} \PYG{n}{calzone\PYGZus{}confindence\PYGZus{}C}\PYG{p}{)}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{)} \end{sphinxVerbatim} } @@ -3374,15 +3378,13 @@ \section{Reliability diagram} \begin{sphinxVerbatim}[commandchars=\\\{\}] -Difference for uniform/histogram binning: +Difference for equal-width binning: Reliability difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] Confidence difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] -Difference for quantile/equal frequency binning: -Reliability difference: [1.e-05 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 - 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00] -Confidence difference: [1.e-05 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 - 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00] +Difference for equal-count binning: +Reliability difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] +Confidence difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] \end{sphinxVerbatim} @@ -3405,11 +3407,12 @@ \section{Expected calibration error and Z test} \begin{sphinxuseclass}{nbinput} { \begin{sphinxVerbatim}[commandchars=\\\{\}] -\llap{\color{nbsphinxin}[43]:\,\hspace{\fboxrule}\hspace{\fboxsep}}\PYG{k+kn}{from} \PYG{n+nn}{mapie}\PYG{n+nn}{.}\PYG{n+nn}{metrics} \PYG{k+kn}{import} \PYG{n}{spiegelhalter\PYGZus{}p\PYGZus{}value}\PYG{p}{,}\PYG{n}{top\PYGZus{}label\PYGZus{}ece}\PYG{p}{,}\PYG{n}{spiegelhalter\PYGZus{}statistic} +\llap{\color{nbsphinxin}[3]:\,\hspace{\fboxrule}\hspace{\fboxsep}}\PYG{k+kn}{from} \PYG{n+nn}{mapie}\PYG{n+nn}{.}\PYG{n+nn}{metrics} \PYG{k+kn}{import} \PYG{n}{spiegelhalter\PYGZus{}p\PYGZus{}value}\PYG{p}{,}\PYG{n}{top\PYGZus{}label\PYGZus{}ece}\PYG{p}{,}\PYG{n}{spiegelhalter\PYGZus{}statistic} \PYG{k+kn}{from} \PYG{n+nn}{calzone}\PYG{n+nn}{.}\PYG{n+nn}{metrics} \PYG{k+kn}{import} \PYG{n}{spiegelhalter\PYGZus{}z\PYGZus{}test} \PYG{n}{calzone\PYGZus{}reliability\PYGZus{}topclass\PYGZus{}H}\PYG{p}{,}\PYG{n}{calzone\PYGZus{}confindence\PYGZus{}topclass\PYGZus{}H}\PYG{p}{,}\PYG{n}{bin\PYGZus{}edge\PYGZus{}topclass\PYGZus{}H}\PYG{p}{,}\PYG{n}{bin\PYGZus{}count\PYGZus{}topclass\PYGZus{}H} \PYG{o}{=} \PYG{n}{reliability\PYGZus{}diagram}\PYG{p}{(}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{labels}\PYG{p}{,}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{probs}\PYG{p}{,}\PYG{n}{num\PYGZus{}bins}\PYG{o}{=}\PYG{l+m+mi}{15}\PYG{p}{,} \PYG{n}{class\PYGZus{}to\PYGZus{}plot}\PYG{o}{=}\PYG{k+kc}{None}\PYG{p}{,} \PYG{n}{is\PYGZus{}equal\PYGZus{}freq}\PYG{o}{=}\PYG{k+kc}{False}\PYG{p}{)} \PYG{n}{calzone\PYGZus{}reliability\PYGZus{}topclass\PYGZus{}C}\PYG{p}{,}\PYG{n}{calzone\PYGZus{}confindence\PYGZus{}topclass\PYGZus{}C}\PYG{p}{,}\PYG{n}{bin\PYGZus{}edge\PYGZus{}topclass\PYGZus{}C}\PYG{p}{,}\PYG{n}{bin\PYGZus{}count\PYGZus{}topclass\PYGZus{}C} \PYG{o}{=} \PYG{n}{reliability\PYGZus{}diagram}\PYG{p}{(}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{labels}\PYG{p}{,}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{probs}\PYG{p}{,}\PYG{n}{num\PYGZus{}bins}\PYG{o}{=}\PYG{l+m+mi}{15}\PYG{p}{,} \PYG{n}{class\PYGZus{}to\PYGZus{}plot}\PYG{o}{=}\PYG{k+kc}{None}\PYG{p}{,} \PYG{n}{is\PYGZus{}equal\PYGZus{}freq}\PYG{o}{=}\PYG{k+kc}{True}\PYG{p}{)} +\PYG{c+c1}{\PYGZsh{}\PYGZsh{}\PYGZsh{} compare MAPIE and calzone equal\PYGZhy{}width binning} \PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{MAPIE topclass ECE\PYGZhy{}H:}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,}\PYG{n}{top\PYGZus{}label\PYGZus{}ece}\PYG{p}{(}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{labels}\PYG{p}{,}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{probs}\PYG{p}{,}\PYG{n}{num\PYGZus{}bins} \PYG{o}{=} \PYG{l+m+mi}{15}\PYG{p}{,}\PYG{n}{split\PYGZus{}strategy}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{uniform}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)} \PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{calzone topclass ECE\PYGZhy{}H:}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,}\PYG{n}{calculate\PYGZus{}ece\PYGZus{}mce}\PYG{p}{(}\PYG{n}{calzone\PYGZus{}reliability\PYGZus{}topclass\PYGZus{}H}\PYG{p}{,}\PYG{n}{calzone\PYGZus{}confindence\PYGZus{}topclass\PYGZus{}H}\PYG{p}{,}\PYG{n}{bin\PYGZus{}count\PYGZus{}topclass\PYGZus{}H}\PYG{p}{)}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{p}{)} @@ -3446,7 +3449,8 @@ \section{Expected calibration error and Z test} \begin{sphinxuseclass}{nbinput} { \begin{sphinxVerbatim}[commandchars=\\\{\}] -\llap{\color{nbsphinxin}[40]:\,\hspace{\fboxrule}\hspace{\fboxsep}}\PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{MAPIE topclass ECE\PYGZhy{}C:}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,}\PYG{n}{top\PYGZus{}label\PYGZus{}ece}\PYG{p}{(}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{labels}\PYG{p}{,}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{probs}\PYG{p}{,}\PYG{n}{num\PYGZus{}bins} \PYG{o}{=} \PYG{l+m+mi}{15}\PYG{p}{,}\PYG{n}{split\PYGZus{}strategy}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{quantile}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)} +\llap{\color{nbsphinxin}[4]:\,\hspace{\fboxrule}\hspace{\fboxsep}}\PYG{c+c1}{\PYGZsh{}\PYGZsh{}\PYGZsh{} compare MAPIE and calzone equal\PYGZhy{}count binning} +\PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{MAPIE topclass ECE\PYGZhy{}C:}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,}\PYG{n}{top\PYGZus{}label\PYGZus{}ece}\PYG{p}{(}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{labels}\PYG{p}{,}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{probs}\PYG{p}{,}\PYG{n}{num\PYGZus{}bins} \PYG{o}{=} \PYG{l+m+mi}{15}\PYG{p}{,}\PYG{n}{split\PYGZus{}strategy}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{quantile}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{)} \PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{calzone topclass ECE\PYGZhy{}C:}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,}\PYG{n}{calculate\PYGZus{}ece\PYGZus{}mce}\PYG{p}{(}\PYG{n}{calzone\PYGZus{}reliability\PYGZus{}topclass\PYGZus{}C}\PYG{p}{,}\PYG{n}{calzone\PYGZus{}confindence\PYGZus{}topclass\PYGZus{}C}\PYG{p}{,}\PYG{n}{bin\PYGZus{}count\PYGZus{}topclass\PYGZus{}C}\PYG{p}{)}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{p}{)} \end{sphinxVerbatim} @@ -3485,7 +3489,8 @@ \section{Expected calibration error and Z test} \begin{sphinxuseclass}{nbinput} { \begin{sphinxVerbatim}[commandchars=\\\{\}] -\llap{\color{nbsphinxin}[45]:\,\hspace{\fboxrule}\hspace{\fboxsep}}\PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{MAPIE Z statistic}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,} \PYG{n}{spiegelhalter\PYGZus{}statistic}\PYG{p}{(}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{labels}\PYG{p}{,}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{probs}\PYG{p}{[}\PYG{p}{:}\PYG{p}{,}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{p}{)}\PYG{p}{)} +\llap{\color{nbsphinxin}[5]:\,\hspace{\fboxrule}\hspace{\fboxsep}}\PYG{c+c1}{\PYGZsh{}\PYGZsh{}\PYGZsh{} compare the Z statistics} +\PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{MAPIE Z statistic}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,} \PYG{n}{spiegelhalter\PYGZus{}statistic}\PYG{p}{(}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{labels}\PYG{p}{,}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{probs}\PYG{p}{[}\PYG{p}{:}\PYG{p}{,}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{p}{)}\PYG{p}{)} \PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{calzone Z statistic}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,} \PYG{n}{spiegelhalter\PYGZus{}z\PYGZus{}test}\PYG{p}{(}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{labels}\PYG{p}{,}\PYG{n}{wellcal\PYGZus{}dataloader}\PYG{o}{.}\PYG{n}{probs}\PYG{p}{)}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{p}{)} \end{sphinxVerbatim} } @@ -3644,6 +3649,18 @@ \section{HL test} \sphinxAtStartPar We see that the test statistics are the same. The R package doesn’t allow user input degree of freedom so the p\sphinxhyphen{}value is different as expected. + +\section{reference} +\label{\detokenize{notebooks/validation:reference}} +\sphinxAtStartPar +Taquet, V., Blot, V., Morzadec, T., Lacombe, L., \& Brunel, N. (2022). MAPIE: an open\sphinxhyphen{}source library for distribution\sphinxhyphen{}free uncertainty quantification. arXiv preprint arXiv:2207.12274. + +\sphinxAtStartPar +Pedregosa, F., Varoquaux, Ga”el, Gramfort, A., Michel, V., Thirion, B., Grisel, O., … others. (2011). Scikit\sphinxhyphen{}learn: Machine learning in Python. Journal of Machine Learning Research, 12(Oct), 2825\textendash{}2830. + +\sphinxAtStartPar +Lele, S. R., Keim, J. L., \& Solymos, P. (2017). Resource selection (probability) functions for use\sphinxhyphen{}availability data. Package ‘ResourceSelection’, Version 0.3\sphinxhyphen{}2. + \sphinxstepscope diff --git a/docs/build/latex/calzone.toc b/docs/build/latex/calzone.toc index c846221..fd33d62 100644 --- a/docs/build/latex/calzone.toc +++ b/docs/build/latex/calzone.toc @@ -54,6 +54,7 @@ \contentsline {section}{\numberline {13.1}Reliability diagram}{63}{section.13.1}% \contentsline {section}{\numberline {13.2}Expected calibration error and Z test}{64}{section.13.2}% \contentsline {section}{\numberline {13.3}HL test}{65}{section.13.3}% +\contentsline {section}{\numberline {13.4}reference}{66}{section.13.4}% \contentsline {chapter}{\numberline {14}calzone}{67}{chapter.14}% \contentsline {section}{\numberline {14.1}calzone package}{67}{section.14.1}% \contentsline {subsection}{\numberline {14.1.1}Submodules}{67}{subsection.14.1.1}% diff --git a/docs/source/notebooks/validation.ipynb b/docs/source/notebooks/validation.ipynb index 20b05f7..0aa6e96 100644 --- a/docs/source/notebooks/validation.ipynb +++ b/docs/source/notebooks/validation.ipynb @@ -24,22 +24,20 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Difference for uniform/histogram binning:\n", + "Difference for equal-width binning:\n", "Reliability difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", "Confidence difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", "\n", - "Difference for quantile/equal frequency binning:\n", - "Reliability difference: [1.e-05 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00\n", - " 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00]\n", - "Confidence difference: [1.e-05 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00\n", - " 0.e+00 0.e+00 0.e+00 0.e+00 0.e+00]\n" + "Difference for equal-count binning:\n", + "Reliability difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", + "Confidence difference: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n" ] } ], @@ -51,17 +49,21 @@ "### loading the data\n", "wellcal_dataloader = data_loader(data_path=\"../../../example_data/simulated_welldata.csv\")\n", "\n", + "###scikit-learn implementation\n", "scikit_reliability_H,scikit_confidence_H = calibration_curve(wellcal_dataloader.labels,wellcal_dataloader.probs[:,1],n_bins=15,strategy='uniform',pos_label=1)\n", "scikit_reliability_C,scikit_confidence_C = calibration_curve(wellcal_dataloader.labels,wellcal_dataloader.probs[:,1],n_bins=15,strategy='quantile',pos_label=1)\n", + "\n", + "### calzone implementation\n", "calzone_reliability_H,calzone_confindence_H,bin_edge_H,bin_count_H = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=1, is_equal_freq=False)\n", "calzone_reliability_C,calzone_confindence_C,bin_edge_C,bin_count_C = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=1, is_equal_freq=True)\n", "\n", - "print(\"Difference for uniform/histogram binning:\")\n", - "print(\"Reliability difference:\", np.round(np.abs(scikit_reliability_H - calzone_reliability_H), 5))\n", - "print(\"Confidence difference:\", np.round(np.abs(scikit_confidence_H - calzone_confindence_H), 5))\n", - "print(\"\\nDifference for quantile/equal frequency binning:\")\n", - "print(\"Reliability difference:\", np.round(np.abs(scikit_reliability_C - calzone_reliability_C), 5))\n", - "print(\"Confidence difference:\", np.round(np.abs(scikit_confidence_C - calzone_confindence_C), 5))" + "###showing the difference between the two implementations\n", + "print(\"Difference for equal-width binning:\")\n", + "print(\"Reliability difference:\", np.round(np.abs(scikit_reliability_H - calzone_reliability_H), 4))\n", + "print(\"Confidence difference:\", np.round(np.abs(scikit_confidence_H - calzone_confindence_H), 4))\n", + "print(\"\\nDifference for equal-count binning:\")\n", + "print(\"Reliability difference:\", np.round(np.abs(scikit_reliability_C - calzone_reliability_C), 4))\n", + "print(\"Confidence difference:\", np.round(np.abs(scikit_confidence_C - calzone_confindence_C), 4))" ] }, { @@ -82,7 +84,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -100,13 +102,14 @@ "calzone_reliability_topclass_H,calzone_confindence_topclass_H,bin_edge_topclass_H,bin_count_topclass_H = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=None, is_equal_freq=False)\n", "calzone_reliability_topclass_C,calzone_confindence_topclass_C,bin_edge_topclass_C,bin_count_topclass_C = reliability_diagram(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins=15, class_to_plot=None, is_equal_freq=True)\n", "\n", + "### compare MAPIE and calzone equal-width binning\n", "print(\"MAPIE topclass ECE-H:\",top_label_ece(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins = 15,split_strategy='uniform'))\n", "print(\"calzone topclass ECE-H:\",calculate_ece_mce(calzone_reliability_topclass_H,calzone_confindence_topclass_H,bin_count_topclass_H)[0])\n" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -119,6 +122,7 @@ } ], "source": [ + "### compare MAPIE and calzone equal-count binning\n", "print(\"MAPIE topclass ECE-C:\",top_label_ece(wellcal_dataloader.labels,wellcal_dataloader.probs,num_bins = 15,split_strategy='quantile'))\n", "print(\"calzone topclass ECE-C:\",calculate_ece_mce(calzone_reliability_topclass_C,calzone_confindence_topclass_C,bin_count_topclass_C)[0])\n" ] @@ -132,7 +136,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -145,6 +149,7 @@ } ], "source": [ + "### compare the Z statistics\n", "print(\"MAPIE Z statistic\", spiegelhalter_statistic(wellcal_dataloader.labels,wellcal_dataloader.probs[:,1]))\n", "print(\"calzone Z statistic\", spiegelhalter_z_test(wellcal_dataloader.labels,wellcal_dataloader.probs)[0])" ] @@ -233,6 +238,19 @@ "source": [ "We see that the test statistics are the same. The R package doesn't allow user input degree of freedom so the p-value is different as expected." ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## reference\n", + "\n", + "Taquet, V., Blot, V., Morzadec, T., Lacombe, L., & Brunel, N. (2022). MAPIE: an open-source library for distribution-free uncertainty quantification. arXiv preprint arXiv:2207.12274.\n", + "\n", + "Pedregosa, F., Varoquaux, Ga\"el, Gramfort, A., Michel, V., Thirion, B., Grisel, O., … others. (2011). Scikit-learn: Machine learning in Python. Journal of Machine Learning Research, 12(Oct), 2825–2830.\n", + "\n", + "Lele, S. R., Keim, J. L., & Solymos, P. (2017). Resource selection (probability) functions for use-availability data. Package ‘ResourceSelection’, Version 0.3-2." + ] } ], "metadata": {