From 4498387ac56990ce12a3a9bd3e6e026ff2770ec5 Mon Sep 17 00:00:00 2001 From: ltcptgeneral <35508619+ltcptgeneral@users.noreply.github.com> Date: Mon, 4 May 2020 11:59:25 -0500 Subject: [PATCH] analysis.py v 1.2.0.006 --- analysis-master/analysis/analysis.py | 20 ++++++++++-------- .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 159 bytes .../metrics/__pycache__/elo.cpython-37.pyc | Bin 0 -> 410 bytes .../__pycache__/glicko2.cpython-37.pyc | Bin 0 -> 3693 bytes .../__pycache__/trueskill.cpython-37.pyc | Bin 0 -> 32177 bytes 5 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 analysis-master/analysis/metrics/__pycache__/__init__.cpython-37.pyc create mode 100644 analysis-master/analysis/metrics/__pycache__/elo.cpython-37.pyc create mode 100644 analysis-master/analysis/metrics/__pycache__/glicko2.cpython-37.pyc create mode 100644 analysis-master/analysis/metrics/__pycache__/trueskill.cpython-37.pyc diff --git a/analysis-master/analysis/analysis.py b/analysis-master/analysis/analysis.py index a9721ee1..f42a906e 100644 --- a/analysis-master/analysis/analysis.py +++ b/analysis-master/analysis/analysis.py @@ -7,10 +7,12 @@ # current benchmark of optimization: 1.33 times faster # setup: -__version__ = "1.2.0.005" +__version__ = "1.2.0.006" # changelog should be viewed using print(analysis.__changelog__) __changelog__ = """changelog: + 1.2.0.006: + - renamed func functions in regression to lin, log, exp, and sig 1.2.0.005: - moved random_forrest_regressor and random_forrest_classifier to RandomForrest class - renamed Metrics to Metric @@ -392,11 +394,11 @@ def regression(inputs, outputs, args): # inputs, outputs expects N-D array try: - def func(x, a, b): + def lin(x, a, b): return a * x + b - popt, pcov = scipy.optimize.curve_fit(func, X, y) + popt, pcov = scipy.optimize.curve_fit(lin, X, y) regressions.append((popt.flatten().tolist(), None)) @@ -408,11 +410,11 @@ def regression(inputs, outputs, args): # inputs, outputs expects N-D array try: - def func(x, a, b, c, d): + def log(x, a, b, c, d): return a * np.log(b*(x + c)) + d - popt, pcov = scipy.optimize.curve_fit(func, X, y) + popt, pcov = scipy.optimize.curve_fit(log, X, y) regressions.append((popt.flatten().tolist(), None)) @@ -424,11 +426,11 @@ def regression(inputs, outputs, args): # inputs, outputs expects N-D array try: - def func(x, a, b, c, d): + def exp(x, a, b, c, d): return a * np.exp(b*(x + c)) + d - popt, pcov = scipy.optimize.curve_fit(func, X, y) + popt, pcov = scipy.optimize.curve_fit(exp, X, y) regressions.append((popt.flatten().tolist(), None)) @@ -463,11 +465,11 @@ def regression(inputs, outputs, args): # inputs, outputs expects N-D array try: - def func(x, a, b, c, d): + def sig(x, a, b, c, d): return a * np.tanh(b*(x + c)) + d - popt, pcov = scipy.optimize.curve_fit(func, X, y) + popt, pcov = scipy.optimize.curve_fit(sig, X, y) regressions.append((popt.flatten().tolist(), None)) diff --git a/analysis-master/analysis/metrics/__pycache__/__init__.cpython-37.pyc b/analysis-master/analysis/metrics/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e4375f0a62acef7c42deecba4d1160b00c99e81 GIT binary patch literal 159 zcmZ?b<>g`kf{Kr8;z0Cc5CH>>K!yVl7qb9~6oz01O-8?!3`HPe1o6wm)hZ^SC_gJT zxuiIzq{zs?$Vj)iq$sf@HN7$>F)uNvvN*F?H#f1kB((_6kI79fDauSPj){-Y%*!l^ ZkJl@xyv1RYo1apelWGUD;WH33004@IDY^gv literal 0 HcmV?d00001 diff --git a/analysis-master/analysis/metrics/__pycache__/elo.cpython-37.pyc b/analysis-master/analysis/metrics/__pycache__/elo.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7b83047fd88aa6feeb7ac95f4a9db5b17eea7497 GIT binary patch literal 410 zcmYjN!Ab)$5S?VZWfj|t1q%i5JyfK}A|e(~LJ_=`MTwhGD!ZFyCM#W7Z+?h97W|@I zJ@x3-le0yt6Xw0lJn}Nhb*FO(9ILO7hfn4v_aS+A#YsH|4O*ly7h3Az4dzmddl>bRu zf*rQae8a%YyzrqyRFw~?%!X~>C8y9W^Ti`27LD)PqOkN=NA`&fz8LMr%!}K3WLAYq zoY5P=BR2h>-b~^DRAQHz#}4x{D=KW-yVmaJf6!sUM;DpZWoj;)2UGLyk^BLZd}Xcx literal 0 HcmV?d00001 diff --git a/analysis-master/analysis/metrics/__pycache__/glicko2.cpython-37.pyc b/analysis-master/analysis/metrics/__pycache__/glicko2.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..10f443753aac495463adb0b6fe071307face7432 GIT binary patch literal 3693 zcmZ`*&u<&Y6`q;hC6~V>S*AldavY^ilQ69XhX|S?Fq|NjYxE+dHqaD=oCU$zFjOd! znq4^(u{_y5^is6{f!SMuqNk$BpV9N8hXOqWLQlB`IW+mcS#nKLGKqOJv-9J9-+OP~ z%ty6aS>Si_&EG!#16u!OXZ~~0_z)#}8A1y!2cj+R3$3*CRA}dkYD+C2il%#pak1N_ zod5E*f5ewiV5Vp*E!$4Ey6tLLdrw8%3k#tedf2O|3%ZCezV>wqbqOPWSi(qIZ|Ry| zc`Dl#y{gwRR@GPZI_jFfs_Up%^fmnw>Q&v)8>rXxb^S8xD|%DkK)tSC(Kk_F)vp5Y zYiaTRpx^ys*y?3)|MNjt&VaL4D8EFBRv;3w59W2SZV0S(c6;ysBRlR9=^FzIQZo=A(1|}s+#i`Zbw*k3Pyv@X=t|Z42Ip#Ai9gjeAVRu>vMqB3}6mU=E-G-%aDt?PQeVB35KfSRr6z% z8KyJlV{?^)t!6D%!Q-?T9EM;1b~wo5zrj)JHrFT^_BQxZ&vXuZVd@ORLoDl|+{;p1 zF-vWgEVTusl@=fDWR2?Zn5GG{o`kkIJQzJZK1gMM32j#ojo>V5Cxuu(Qz*z2`>sY@PvxYDwm0#U z;-rKX<&*y>rKJ3Y^CxNEP0EwfY<7XO6SpDIFD9j_Y=}t(Gm9Id!f#IEa|Ytxna`+; zq_W8{TlivU7WkdB>o^~iDo)M|*4yu5Ki6H)G*vQ9vz>8fvb~<`U0ydI;W@HnmF$c{ zdkq|_NsTxs<)dGGlJP6^iktFrQrNYTV`C`4?$5r*@63U*n|@jdbU27RHiQr?!(J9b z%&n;##GPXsG^rDwjG8N12Ii?T3{&$u#ZM^Sgh)NRRVq8FgN3O&xsCEpDs@|Z{tilO zDT2%^Sk*#_m;nW1Wlh#)LAugaRrGGCUpeo~9l55)tMllY1%Dnl=Q85Q*oAR}Oa)6^ z$W-b=rgC18sn(IHTxKSFKWC@UHN3dYs}x%luR%1k(_}8Q$s3$R!z|PODZc$0CE{I1 z+Uv3<$16ESYsM}e#2-%uC)$&-hXxorC%fku-nAKCfsJePE+n$PmpHNWjJe+fbAH2Z zfpY*}+DW`wUUrVa7JX-vY~6*3F`LlVEG+OQ%NayK3l5#)b;^r6!ON}=f(>D5IJ*|SX<`Xp z4mLq-8pMa@9GQ&}5;#0#&Fck_u3$s@sANCfx zd5bNk6vG2%7-sg2WC{m+1iwjg|@9^dhu@=TTszU#014ZrC7zURAk bHauYiiYpg(vzv3v)W4H4yGx^6r}*jzSbNy0 literal 0 HcmV?d00001 diff --git a/analysis-master/analysis/metrics/__pycache__/trueskill.cpython-37.pyc b/analysis-master/analysis/metrics/__pycache__/trueskill.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c151e0bacbac5a527a84e6939528f9841ccaa372 GIT binary patch literal 32177 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 U$9Heh_Ls7F&OyD;l<@Wc2fyx{4gdfE literal 0 HcmV?d00001