<html><head></head><body><div class="ydpe92bc53dyahoo-style-wrap" style="font-family:Helvetica Neue, Helvetica, Arial, sans-serif;font-size:16px;"><div><div><span><div data-reddit-rtjson="{entityMap:{0:{type:LINK,mutability:MUTABLE,data:{href:https://github.com/sepandhaghighi/pycm,rel:noopener noreferrer,target:_blank,url:https://github.com/sepandhaghighi/pycm}},1:{type:LINK,mutability:MUTABLE,data:{href:http://www.pycm.ir/,rel:noopener noreferrer,target:_blank,url:http://www.pycm.ir/}},2:{type:LINK,mutability:MUTABLE,data:{href:https://github.com/sepandhaghighi/pycm/issues/178,url:https://github.com/sepandhaghighi/pycm/issues/178}},3:{type:LINK,mutability:MUTABLE,data:{href:https://github.com/sepandhaghighi/pycm/issues/176,url:https://github.com/sepandhaghighi/pycm/issues/176}},4:{type:LINK,mutability:MUTABLE,data:{href:https://github.com/sepandhaghighi/pycm/issues/152,url:https://github.com/sepandhaghighi/pycm/issues/152}},5:{type:LINK,mutability:MUTABLE,data:{href:https://github.com/sepandhaghighi/pycm/issues/180,url:https://github.com/sepandhaghighi/pycm/issues/180}},6:{type:LINK,mutability:MUTABLE,data:{href:https://github.com/sepandhaghighi/pycm/issues/111,url:https://github.com/sepandhaghighi/pycm/issues/111}},7:{type:LINK,mutability:MUTABLE,data:{href:https://github.com/sepandhaghighi/pycm/issues/174,url:https://github.com/sepandhaghighi/pycm/issues/174}},8:{type:LINK,mutability:MUTABLE,data:{href:https://github.com/sepandhaghighi/pycm/issues/181,url:https://github.com/sepandhaghighi/pycm/issues/181}},9:{type:LINK,mutability:MUTABLE,data:{href:https://github.com/sepandhaghighi/pycm/issues/173,url:https://github.com/sepandhaghighi/pycm/issues/173}},10:{type:LINK,mutability:MUTABLE,data:{href:https://github.com/sepandhaghighi/pycm/issues/183,url:https://github.com/sepandhaghighi/pycm/issues/183}},11:{type:LINK,mutability:MUTABLE,data:{href:https://github.com/sepandhaghighi/pycm/issues/187,url:https://github.com/sepandhaghighi/pycm/issues/187}}},blocks:[{key:27h78,text:PyCM version 2.0 released,type:unstyled,depth:0,inlineStyleRanges:[],entityRanges:[],data:{}},{key:el2v6,text:https://github.com/sepandhaghighi/pycm,type:unstyled,depth:0,inlineStyleRanges:[{offset:0,length:38,style:UNDERLINE}],entityRanges:[{offset:0,length:38,key:0}],data:{}},{key:efljq,text:http://www.pycm.ir ,type:unstyled,depth:0,inlineStyleRanges:[{offset:0,length:18,style:UNDERLINE}],entityRanges:[{offset:0,length:18,key:1}],data:{}},{key:4mli2,text:,type:unstyled,depth:0,inlineStyleRanges:[],entityRanges:[],data:{}},{key:9v1ee,text:In version 2.0 a method for comparing several confusion matrices is introduced. This option is a combination of several overall and class-based benchmarks. Each of the benchmarks evaluates the performance of the classification algorithm from good to poor and give them a numeric score. The score of good performance is 1 and for the poor performance is 0.,type:unstyled,depth:0,inlineStyleRanges:[{offset:3,length:12,style:CODE}],entityRanges:[],data:{}},{key:dl72e,text:After that, two scores are calculated for each confusion matrices, overall and class based. The overall score is the average of the score of four overall benchmarks which are Landis & Koch, Fleiss, Altman, and Cicchetti. And with a same manner, the class based score is the average of the score of three class-based benchmarks which are Positive Likelihood Ratio Interpretation, Discriminant Power Interpretation, and AUC value Interpretation. It should be notice that if one of the benchmarks returns none for one of the classes, that benchmarks will be eliminate in total averaging. If user set weights for the classes, the averaging over the value of class-based benchmark scores will transform to a weighted average.,type:unstyled,depth:0,inlineStyleRanges:[],entityRanges:[],data:{}},{key:fcguj,text:If the user set the value of by_class boolean input True, the best confusion matrix is the one with the maximum class-based score. Otherwise, if a confusion matrix obtain the maximum of the both overall and class-based score, that will be the reported as the best confusion matrix but in any other cases the compare object doesn’t select best confusion matrix.,type:unstyled,depth:0,inlineStyleRanges:[{offset:29,length:9,style:CODE},{offset:52,length:4,style:CODE}],entityRanges:[],data:{}},{key:scj2,text:,type:unstyled,depth:0,inlineStyleRanges:[],entityRanges:[],data:{}},{key:3assv,text:,type:unstyled,depth:0,inlineStyleRanges:[],entityRanges:[],data:{}},{key:c4hb4,text:,type:unstyled,depth:0,inlineStyleRanges:[],entityRanges:[],data:{}},{key:bsm0d,text:Changelog : ,type:unstyled,depth:0,inlineStyleRanges:[],entityRanges:[],data:{}},{key:f21up,text:G-Mean (GM) added #178,type:unordered-list-item,depth:0,inlineStyleRanges:[],entityRanges:[{offset:18,length:4,key:2}],data:{}},{key:b6j2t,text:Index of balanced accuracy (IBA) added #176,type:unordered-list-item,depth:0,inlineStyleRanges:[],entityRanges:[{offset:39,length:4,key:3}],data:{}},{key:3pspk,text:Optimized precision (OP) added #152,type:unordered-list-item,depth:0,inlineStyleRanges:[],entityRanges:[{offset:31,length:4,key:4}],data:{}},{key:ciu62,text:Pearson's C (C) added #180,type:unordered-list-item,depth:0,inlineStyleRanges:[],entityRanges:[{offset:22,length:4,key:5}],data:{}},{key:daea8,text:Compare class added #111,type:unordered-list-item,depth:0,inlineStyleRanges:[{offset:0,length:8,style:CODE}],entityRanges:[{offset:20,length:4,key:6}],data:{}},{key:9e4dj,text:Parameters recommendation warning added #174,type:unordered-list-item,depth:0,inlineStyleRanges:[],entityRanges:[{offset:40,length:4,key:7}],data:{}},{key:i086,text:ConfusionMatrix equal method added #181,type:unordered-list-item,depth:0,inlineStyleRanges:[{offset:0,length:16,style:CODE}],entityRanges:[{offset:35,length:4,key:8}],data:{}},{key:78d2j,text:Document modified #173,type:unordered-list-item,depth:0,inlineStyleRanges:[],entityRanges:[{offset:18,length:4,key:9}],data:{}},{key:c3fp5,text:stat_print function bug fixed,type:unordered-list-item,depth:0,inlineStyleRanges:[{offset:0,length:11,style:CODE}],entityRanges:[],data:{}},{key:2nldp,text:table_print function bug fixed,type:unordered-list-item,depth:0,inlineStyleRanges:[{offset:0,length:12,style:CODE}],entityRanges:[],data:{}},{key:6rrir,text:Beta parameter renamed to beta (F_calc function & F_beta method),type:unordered-list-item,depth:0,inlineStyleRanges:[{offset:0,length:5,style:CODE},{offset:26,length:5,style:CODE},{offset:32,length:7,style:CODE},{offset:50,length:7,style:CODE}],entityRanges:[],data:{}},{key:42a50,text:Parameters recommendation for imbalance dataset modified,type:unordered-list-item,depth:0,inlineStyleRanges:[],entityRanges:[],data:{}},{key:70ntm,text:normalize parameter added to save_html method #183,type:unordered-list-item,depth:0,inlineStyleRanges:[{offset:0,length:10,style:CODE},{offset:29,length:10,style:CODE}],entityRanges:[{offset:46,length:4,key:10}],data:{}},{key:3k826,text:pycm_func.py splitted into pycm_class_func.py and pycm_overall_func.py,type:unordered-list-item,depth:0,inlineStyleRanges:[{offset:0,length:13,style:CODE},{offset:27,length:19,style:CODE},{offset:50,length:20,style:CODE}],entityRanges:[],data:{}},{key:dqc59,text:vector_filter, vector_check, class_check and matrix_check functions moved to pycm_util.py,type:unordered-list-item,depth:0,inlineStyleRanges:[{offset:0,length:13,style:CODE},{offset:15,length:12,style:CODE},{offset:29,length:12,style:CODE},{offset:45,length:13,style:CODE},{offset:77,length:12,style:CODE}],entityRanges:[],data:{}},{key:8m1as,text:RACC_calc and RACCU_calc functions exception handler modified #187,type:unordered-list-item,depth:0,inlineStyleRanges:[{offset:0,length:10,style:CODE},{offset:14,length:11,style:CODE}],entityRanges:[{offset:62,length:4,key:11}],data:{}},{key:5gbpq,text:Docstrings modified,type:unordered-list-item,depth:0,inlineStyleRanges:[],entityRanges:[],data:{}}]}"><div data-block="true" data-editor="d3cd6d" data-offset-key="d3cd6d_initial-0-0"><div data-offset-key="d3cd6d_initial-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="d3cd6d_initial-0-0">PyCM version 2.0 released</span></div><div data-offset-key="d3cd6d_initial-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="d3cd6d_initial-0-0"><br></span></div></div><div data-block="true" data-editor="d3cd6d" data-offset-key="cnt2c-0-0"><div data-offset-key="cnt2c-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><a class="ydp487eecds18magzr-0 ydp487eecdlDmhO" href="https://github.com/sepandhaghighi/pycm" rel="nofollow" target="_blank">https://github.com/sepandhaghighi/pycm</a></div></div><div data-block="true" data-editor="d3cd6d" data-offset-key="1of44-0-0"><div data-offset-key="1of44-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><a class="ydp487eecds18magzr-0 ydp487eecdlDmhO" href="http://www.pycm.ir/" rel="nofollow" target="_blank">http://www.pycm.ir</a><span data-offset-key="1of44-1-0"><span data-text="true"> </span></span></div></div><div data-block="true" data-editor="d3cd6d" data-offset-key="a6lce-0-0"><div data-offset-key="a6lce-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="a6lce-0-0"><br data-text="true"></span></div></div><div data-block="true" data-editor="d3cd6d" data-offset-key="bkdgg-0-0"><div data-offset-key="bkdgg-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="bkdgg-0-0">In </span><span data-offset-key="bkdgg-0-1" style="font-family: monospace;"><span data-text="true">version 2.0 </span></span><span data-offset-key="bkdgg-0-2">a method for comparing several confusion matrices is introduced. This option is a combination of several overall and class-based benchmarks. Each of the benchmarks evaluates the performance of the classification algorithm from good to poor and give them a numeric score. The score of good performance is 1 and for the poor performance is 0.</span></div></div><div data-block="true" data-editor="d3cd6d" data-offset-key="fqk5g-0-0"><div data-offset-key="fqk5g-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="fqk5g-0-0">After that, two scores are calculated for each confusion matrices, overall and class based. The overall score is the average of the score of four overall benchmarks which are Landis & Koch, Fleiss, Altman, and Cicchetti. And with a same manner, the class based score is the average of the score of three class-based benchmarks which are Positive Likelihood Ratio Interpretation, Discriminant Power Interpretation, and AUC value Interpretation. It should be notice that if one of the benchmarks returns none for one of the classes, that benchmarks will be eliminate in total averaging. If user set weights for the classes, the averaging over the value of class-based benchmark scores will transform to a weighted average.</span></div></div><div data-block="true" data-editor="d3cd6d" data-offset-key="4556m-0-0"><div data-offset-key="4556m-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="4556m-0-0">If the user set the value of </span><span data-offset-key="4556m-0-1" style="font-family: monospace;"><span data-text="true">by_class </span></span><span data-offset-key="4556m-0-2">boolean input </span><span data-offset-key="4556m-0-3" style="font-family: monospace;"><span data-text="true">True</span></span><span data-offset-key="4556m-0-4">, the best confusion matrix is the one with the maximum class-based score. Otherwise, if a confusion matrix obtain the maximum of the both overall and class-based score, that will be the reported as the best confusion matrix but in any other cases the compare object doesn’t select best confusion matrix.</span></div></div><div data-block="true" data-editor="d3cd6d" data-offset-key="60sh9-0-0"><div data-offset-key="60sh9-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="60sh9-0-0"><br data-text="true"></span></div></div><div data-block="true" data-editor="d3cd6d" data-offset-key="fjli9-0-0"><div data-offset-key="fjli9-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="fjli9-0-0"><br data-text="true"></span></div></div><span data-editor="d3cd6d"></span><div data-block="true" data-editor="d3cd6d" data-offset-key="f88ho-0-0"><div data-offset-key="f88ho-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="f88ho-0-0"><br data-text="true"></span></div></div><div data-block="true" data-editor="d3cd6d" data-offset-key="eap0o-0-0"><div data-offset-key="eap0o-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="eap0o-0-0">Changelog : </span></div></div><ul><li><div data-offset-key="9d4f5-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="9d4f5-0-0">G-Mean (GM) added </span><a class="ydp487eecds18magzr-0 ydp487eecdlDmhO" href="https://github.com/sepandhaghighi/pycm/issues/178" rel="nofollow" target="_blank">#178</a></div></li><li><div data-offset-key="7vd6n-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="7vd6n-0-0">Index of balanced accuracy (IBA) added </span><a class="ydp487eecds18magzr-0 ydp487eecdlDmhO" href="https://github.com/sepandhaghighi/pycm/issues/176" rel="nofollow" target="_blank">#176</a></div></li><li><div data-offset-key="8dk2e-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="8dk2e-0-0">Optimized precision (OP) added </span><a class="ydp487eecds18magzr-0 ydp487eecdlDmhO" href="https://github.com/sepandhaghighi/pycm/issues/152" rel="nofollow" target="_blank">#152</a></div></li><li><div data-offset-key="egaec-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="egaec-0-0">Pearson's C (C) added </span><a class="ydp487eecds18magzr-0 ydp487eecdlDmhO" href="https://github.com/sepandhaghighi/pycm/issues/180" rel="nofollow" target="_blank">#180</a></div></li><li><div data-offset-key="frlc3-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="frlc3-0-0" style="font-family: monospace;"><span data-text="true">Compare </span></span><span data-offset-key="frlc3-0-1">class added </span><a class="ydp487eecds18magzr-0 ydp487eecdlDmhO" href="https://github.com/sepandhaghighi/pycm/issues/111" rel="nofollow" target="_blank">#111</a></div></li><li><div data-offset-key="b77ir-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="b77ir-0-0">Parameters recommendation warning added </span><a class="ydp487eecds18magzr-0 ydp487eecdlDmhO" href="https://github.com/sepandhaghighi/pycm/issues/174" rel="nofollow" target="_blank">#174</a></div></li><li><div data-offset-key="337u4-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="337u4-0-0" style="font-family: monospace;"><span data-text="true">ConfusionMatrix </span></span><span data-offset-key="337u4-0-1">equal method added </span><a class="ydp487eecds18magzr-0 ydp487eecdlDmhO" href="https://github.com/sepandhaghighi/pycm/issues/181" rel="nofollow" target="_blank">#181</a></div></li><li><div data-offset-key="e8arc-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="e8arc-0-0">Document modified </span><a class="ydp487eecds18magzr-0 ydp487eecdlDmhO" href="https://github.com/sepandhaghighi/pycm/issues/173" rel="nofollow" target="_blank">#173</a></div></li><li><div data-offset-key="9880i-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="9880i-0-0" style="font-family: monospace;"><span data-text="true">stat_print </span></span><span data-offset-key="9880i-0-1">function bug fixed</span></div></li><li><div data-offset-key="8aatt-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="8aatt-0-0" style="font-family: monospace;"><span data-text="true">table_print </span></span><span data-offset-key="8aatt-0-1">function bug fixed</span></div></li><li><div data-offset-key="7oq28-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="7oq28-0-0" style="font-family: monospace;"><span data-text="true">Beta </span></span><span data-offset-key="7oq28-0-1">parameter renamed to </span><span data-offset-key="7oq28-0-2" style="font-family: monospace;"><span data-text="true">beta </span></span><span data-offset-key="7oq28-0-3">(</span><span data-offset-key="7oq28-0-4" style="font-family: monospace;"><span data-text="true">F_calc </span></span><span data-offset-key="7oq28-0-5">function & </span><span data-offset-key="7oq28-0-6" style="font-family: monospace;"><span data-text="true">F_beta </span></span><span data-offset-key="7oq28-0-7">method)</span></div></li><li><div data-offset-key="3333n-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="3333n-0-0">Parameters recommendation for imbalance dataset modified</span></div></li><li><div data-offset-key="cpojb-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="cpojb-0-0" style="font-family: monospace;"><span data-text="true">normalize </span></span><span data-offset-key="cpojb-0-1">parameter added to </span><span data-offset-key="cpojb-0-2" style="font-family: monospace;"><span data-text="true">save_html </span></span><span data-offset-key="cpojb-0-3">method </span><a class="ydp487eecds18magzr-0 ydp487eecdlDmhO" href="https://github.com/sepandhaghighi/pycm/issues/183" rel="nofollow" target="_blank">#183</a></div></li><li><div data-offset-key="e3b76-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="e3b76-0-0" style="font-family: monospace;"><span data-text="true">pycm_func.py </span></span><span data-offset-key="e3b76-0-1">splitted into </span><span data-offset-key="e3b76-0-2" style="font-family: monospace;"><span data-text="true">pycm_class_func.py </span></span><span data-offset-key="e3b76-0-3">and </span><span data-offset-key="e3b76-0-4" style="font-family: monospace;"><span data-text="true">pycm_overall_func.py</span></span></div></li><li><div data-offset-key="4bsuo-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="4bsuo-0-0" style="font-family: monospace;"><span data-text="true">vector_filter</span></span><span data-offset-key="4bsuo-0-1">, </span><span data-offset-key="4bsuo-0-2" style="font-family: monospace;"><span data-text="true">vector_check</span></span><span data-offset-key="4bsuo-0-3">, </span><span data-offset-key="4bsuo-0-4" style="font-family: monospace;"><span data-text="true">class_check </span></span><span data-offset-key="4bsuo-0-5">and </span><span data-offset-key="4bsuo-0-6" style="font-family: monospace;"><span data-text="true">matrix_check </span></span><span data-offset-key="4bsuo-0-7">functions moved to </span><span data-offset-key="4bsuo-0-8" style="font-family: monospace;"><span data-text="true">pycm_util.py</span></span></div></li><li><div data-offset-key="2i595-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="2i595-0-0" style="font-family: monospace;"><span data-text="true">RACC_calc </span></span><span data-offset-key="2i595-0-1">and </span><span data-offset-key="2i595-0-2" style="font-family: monospace;"><span data-text="true">RACCU_calc </span></span><span data-offset-key="2i595-0-3">functions exception handler modified </span><a class="ydp487eecds18magzr-0 ydp487eecdlDmhO" href="https://github.com/sepandhaghighi/pycm/issues/187" rel="nofollow" target="_blank">#187</a></div></li><li><div data-offset-key="e2gi9-0-0" class="ydp487eecdpublic-DraftStyleDefault-block ydp487eecdpublic-DraftStyleDefault-ltr"><span data-offset-key="e2gi9-0-0">Docstrings modified</span></div></li></ul></div></span><br></div><div><br></div><div class="ydpe92bc53dsignature"><div style="font-family:Helvetica, Arial, sans-serif;font-size:16px;"><div>Best Regards</div><div>Sepand Haghighi</div></div></div></div></div></body></html>