подгонка многомерного набора данных с использованием Scipy curve_fit (неизвестная подгонка) не дает наилучшего подбора - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь установить многомерный набор данных (три независимых переменных, X1, X2, X3 и одна зависимая переменная Y), используя curve_fit, но сейчас я не получаю правильное или самое точное соответствие , r2 (Y and Y_estimated) это просто 0.46, что слишком мало. Я думаю, что это из-за уравнения, которое я использую. Мне нужно иметь какое-то представление о том, какой должна быть формула кривой, чего у меня нет. Итак, что я делал, так это просто настраивал формулу здесь и там, немного пытаясь получить более высокое значение r2.

Прямо сейчас Если я построю Y _estiamted (Y значение, полученное с использованием формулы соответствия) против Y, это выглядит так: enter image description here

Мои три независимые переменные и зависимая переменная:

X1=[3.0, 3.0, 3.1, 3.1, 3.2, 3.2, 3.3, 3.3, 3.4, 3.4, 3.4, 3.4, 3.4, 3.4, 3.4, 3.4, 3.4, 3.4, 3.4, 3.4, 3.4, 3.4, 3.4, 3.4, 3.4, 3.4, 3.4, 3.4, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.6, 3.6, 3.6, 3.6, 3.6, 3.6, 3.6, 3.6, 3.6, 3.6, 3.6, 3.6, 3.6, 3.6, 3.6, 3.6, 3.6, 3.6, 3.6, 3.6, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.7, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 3.9, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.2, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.3, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.4, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7, 4.7]
X2=[6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 12.0, 12.0, 12.0, 12.0, 18.0, 18.0, 18.0, 18.0, 24.0, 24.0, 24.0, 24.0, 30.0, 30.0, 30.0, 30.0, 6.0, 6.0, 6.0, 6.0, 12.0, 12.0, 12.0, 12.0, 18.0, 18.0, 18.0, 18.0, 24.0, 24.0, 24.0, 24.0, 30.0, 30.0, 30.0, 30.0, 6.0, 6.0, 6.0, 6.0, 12.0, 12.0, 12.0, 12.0, 18.0, 18.0, 18.0, 18.0, 24.0, 24.0, 24.0, 24.0, 30.0, 30.0, 30.0, 30.0, 6.0, 6.0, 6.0, 6.0, 6.0, 12.0, 12.0, 12.0, 12.0, 12.0, 18.0, 18.0, 18.0, 18.0, 18.0, 24.0, 24.0, 24.0, 24.0, 24.0, 30.0, 30.0, 30.0, 30.0, 30.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 12.0, 12.0, 12.0, 12.0, 12.0, 18.0, 18.0, 18.0, 18.0, 18.0, 24.0, 24.0, 24.0, 24.0, 24.0, 30.0, 30.0, 30.0, 30.0, 30.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 12.0, 12.0, 12.0, 12.0, 12.0, 18.0, 18.0, 18.0, 18.0, 18.0, 24.0, 24.0, 24.0, 24.0, 24.0, 30.0, 30.0, 30.0, 30.0, 30.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 12.0, 12.0, 12.0, 12.0, 12.0, 18.0, 18.0, 18.0, 18.0, 18.0, 24.0, 24.0, 24.0, 24.0, 24.0, 30.0, 30.0, 30.0, 30.0, 30.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0]
X3=[0.0, 9.0, 0.0, 9.0, 0.0, 9.0, 0.0, 9.0, 0.0, 9.0, 18.0, 27.0, 0.0, 9.0, 18.0, 27.0, 0.0, 9.0, 18.0, 27.0, 0.0, 9.0, 18.0, 27.0, 0.0, 9.0, 18.0, 27.0, 0.0, 9.0, 18.0, 27.0, 0.0, 9.0, 18.0, 27.0, 0.0, 9.0, 18.0, 27.0, 0.0, 9.0, 18.0, 27.0, 0.0, 9.0, 18.0, 27.0, 0.0, 9.0, 18.0, 27.0, 0.0, 9.0, 18.0, 27.0, 0.0, 9.0, 18.0, 27.0, 0.0, 9.0, 18.0, 27.0, 0.0, 9.0, 18.0, 27.0, 0.0, 9.0, 18.0, 27.0, 36.0, 0.0, 9.0, 18.0, 27.0, 36.0, 0.0, 9.0, 18.0, 27.0, 36.0, 0.0, 9.0, 18.0, 27.0, 36.0, 0.0, 9.0, 18.0, 27.0, 36.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 0.0, 9.0, 18.0, 27.0, 36.0, 0.0, 9.0, 18.0, 27.0, 36.0, 0.0, 9.0, 18.0, 27.0, 36.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 0.0, 9.0, 18.0, 27.0, 36.0, 0.0, 9.0, 18.0, 27.0, 36.0, 0.0, 9.0, 18.0, 27.0, 36.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 54.0, 0.0, 9.0, 18.0, 27.0, 36.0, 0.0, 9.0, 18.0, 27.0, 36.0, 0.0, 9.0, 18.0, 27.0, 36.0, 0.0, 9.0, 18.0, 27.0, 36.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 54.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 54.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 54.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 54.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 54.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 54.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 54.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 54.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 54.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 54.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 54.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 54.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 54.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 54.0, 0.0, 9.0, 18.0, 27.0, 36.0, 45.0, 54.0]
Y=[-5.890966002, -5.890486683, 2.888846213, -3.87063815, 2.151677659, -2.733484754, 1.472310188, -2.104972457, 0.9167986, -1.728190699, -2.091022903, -6.739492155, 0.877744912, -1.70466657, -2.057078259, -6.427200966, 0.845383533, -1.684086261, -1.923422435, -4.727724352, 0.825849389, -1.67026488, -1.887227147, -4.212293285, 0.820833289, -1.664082205, -1.874008216, -2.431998659, 0.498383392, -1.477976987, -1.77641373, -2.908285403, 0.468936359, -1.464471726, -1.749266847, -3.54492551, 0.443392031, -1.455212292, -1.668808256, -2.886922114, 0.427741259, -1.440518229, -1.648043794, -2.683547022, 0.423972043, -1.438610749, -1.640840076, -1.805421641, 0.20542281, -1.285589215, -1.581456438, -2.214548754, 0.183863714, -1.276677024, -1.565538267, -2.124291602, 0.164031873, -1.268257754, -1.518765332, -1.599120703, 0.151669396, -1.262839985, -1.50499003, -1.559006781, 0.148850528, -1.261237978, -1.500688974, -1.545622269, 0.016590357, -1.120224363, -1.442034612, -1.87137123, -4.670780488, 0.001103286, -1.114468394, -1.428145113, -1.808522339, -4.234749372, -0.013936245, -1.110201882, -1.402388467, -1.732881646, -3.700360273, -0.023565445, -1.106842596, -1.392111412, -1.450774856, -3.285637348, -0.02558577, -1.106249674, -1.388900066, -1.443707119, -1.638700788, -0.091593772, -0.968576581, -1.314111239, -1.679882752, -3.219206519, -13.25021835, -0.102285068, -0.964209668, -1.302969933, -1.633311888, -2.915318393, -0.11352536, -0.962367601, -1.289323112, -1.572066144, -2.298457449, -0.12093117, -0.961025281, -1.281518549, -1.500493124, -2.321146597, -0.122235333, -0.960777088, -1.279387575, -1.395730835, -1.402153182, -0.139806401, -0.82492453, -1.185085919, -1.514931728, -2.55768099, -7.659786134, -0.147113817, -0.821798077, -1.175983066, -1.508827185, -2.374361615, -0.155259285, -0.821929854, -1.169324942, -1.425964729, -2.166838564, -0.16085039, -0.820780456, -1.16412359, -1.401491455, -2.004529202, -0.161570568, -0.820851891, -1.162554564, -1.3463324, -1.339262015, -0.146472418, -0.688457731, -1.053463449, -1.4253324, -2.165584842, -5.004058432, -17.96381799, -0.151068996, -0.686283888, -1.046891317, -1.396561493, -2.042601638, -0.156960502, -0.652135293, -1.04314082, -1.358316003, -1.893888453, -0.161145185, -0.686355724, -1.039886605, -1.252472435, -1.754080485, -0.161325704, -0.686540111, -1.03874268, -1.282983675, -1.331426426, -0.125667487, -0.559780327, -0.921044232, -1.305388044, -1.906442078, -3.672160073, -10.81796526, -0.128462712, -0.55817084, -0.916176516, -1.282414475, -1.819642119, -3.245241184, -0.132477967, -0.559329323, -0.914299863, -1.25186607, -1.707187079, -2.814336219, -0.135620181, -0.558943881, -0.912147655, -1.21855261, -1.586590921, -2.50386079, -0.135373995, -0.559147092, -0.911391581, -1.200407606, -1.324032346, -1.437274914, -0.088660654, -0.440437932, -0.790871709, -1.181435996, -1.710277844, -2.890652873, -6.974157947, -0.09023811, -0.439223375, -0.692338981, -1.162661371, -1.645998422, -2.632437682, -0.092985395, -0.440626185, -0.786759666, -1.060269737, -1.557542832, -2.350129251, -0.095198896, -0.440372118, -0.785340038, -1.111302105, -1.456490494, -2.115475456, -0.09473268, -0.440594154, -0.784715339, -1.102170793, -1.295847071, -1.397488153, -0.043772583, -0.331886009, -0.666657352, -1.055150607, -1.54355225, -2.400387143, -4.840785151, -0.044365251, -0.33096598, -0.663889382, -1.039682405, -1.493565349, -2.235871718, -0.046152447, -0.332444091, -0.664049725, -1.020251409, -1.422731542, -2.040295592, -0.047788239, -0.332290024, -0.662999524, -1.000783967, -1.33972387, -1.855422189, 0.035922706, -0.33244931, -0.66246855, -0.994023033, -1.242532255, -1.382056403, 0.003368224, -0.235162505, -0.550627804, -0.929934455, -1.390070412, -2.064454896, -3.608474908, 0.003352864, -0.234261702, -0.548330065, -0.917060527, -1.350458157, -1.953798568, 0.002137102, -0.235833538, -0.549022987, -0.901684697, -1.293317314, -1.811315574, 0.001065668, -0.235648096, -0.548116712, -0.887296465, -1.226731764, -1.662077266, 0.001952315, -0.235769731, -0.547579463, -0.881946222, -1.167834467, -1.356563882, 0.048789635, -0.150572236, -0.444703138, -0.808920902, -1.244902116, -1.811105006, -2.857175181, 0.04916333, -0.149827909, -0.442737577, -0.798359672, -1.212724194, -1.732646522, 0.048355449, -0.15134327, -0.443581101, -0.786206428, -1.166692479, -1.624716391, 0.047510319, -0.151095076, -0.442730901, -0.77503531, -1.114612233, -1.503209902, 0.048616193, -0.151160236, -0.442243451, -0.770938881, -1.078060784, -1.310265421, 0.090316199, -0.078157925, -0.350137315, -0.695193468, -1.106773689, -1.60467115, -2.196169408, 0.090915798, -0.077382222, -0.348290981, -0.686362959, -0.945112881, -1.54605619, -2.210121151, 0.090352646, -0.078878757, -0.349165479, -0.676868346, -1.043271469, -1.461629017, -2.021729009, 0.089733419, -0.078555263, -0.348214877, -0.66789858, -1.000914252, -1.362700175, -1.829236739, 0.090814594, -0.078545121, -0.347670951, -0.664523385, -0.979645711, -1.243198502, -1.461602902, 0.126834967, -0.01718885, -0.267383346, -0.590502798, -0.976501526, -1.425736173, -2.023395072, 0.127653793, -0.0165265, -0.265411911, -0.583152005, -0.955014308, -1.380664484, -1.915498431, 0.127260068, -0.017897132, -0.266273458, -0.575614418, -0.924999644, -1.313323198, -1.779238826, 0.126747518, -0.017492463, -0.265272253, -0.568262823, -0.893128357, -1.233028626, -1.628015329, 0.127878893, -0.017406619, -0.264571852, -0.565483359, -0.87866588, -1.160063527, -1.394833851]
len(X1)=len(X2)=len(X3)=len(Y)

И если вы хотите проанализировать файл, чтобы получить данные самостоятельно, вот файл для вас (вы можете открыть файл в новом окне): https://github.com/yanghaobojordan/data/blob/master/results

Первый столбец представляет X1, второй столбец X2, третий столбец X3 и четвертый столбец Y .

Сейчас я использую следующий скрипт:

fitParams, fitCovariances = curve_fit(fitFunc, [X1, X2, X3], Y,maxfev=10000)
print(' fit coefficients:\n', fitParams)
#fit coefficients:
#[0.44560056  1.23433773 -2.98070071  0.02438559  1.03059637]

#calculated Y_estiamted using fit parameters 
Y_estimated = [estimate(fitParams, X1[i], X2[i], X3[i]) for i in range(len(X1))]

#plot Y_estiamted vs. Y
fig = plt.figure(num=None, figsize=(9, 7),facecolor='w', edgecolor='k')   
ax = fig.add_subplot(111)
ax.scatter(Y, Y_estimated)
lims = [np.min([ax.get_xlim(), ax.get_ylim()]), np.max([ax.get_xlim(), ax.get_ylim()])]  
ax.plot(lims, lims, 'k-', alpha=0.75, zorder=0)
ax.set_xlabel('Y',size=15)
ax.set_ylabel('Y_estimated',size=15)
ax.set_aspect('equal')

#compute r2
coeff=R_Square(Y, Y_estimated)

#this is the part which I'm not confident about, I have no idea what the formula should be, so I'm just using my best guess. 
def fitFunc(x, a, b, c, d, e):
    return a+(b*np.log(x[0]+c))+(d*x[1])+(-np.power(e,x[2]))

def estimate(fit, x1, x2, x3):
    return fit[0]+(fit[1]*np.log(x1+fit[2]))+(fit[3]*x2)+(-np.power(fit[4],x3))  

def R_Square(x_axis, y_axis):
    slope, intercept, r_value, p_value, std_err = stats.linregress(x_axis, y_axis)
    return (float(r_value)*float(r_value))

Любая помощь будет принята с благодарностью!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...