Trouver une formule grace à des variables

Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
rednik
Messages: 5
Enregistré le: 21 Fév 2012, 21:26

Trouver une formule grace à des variables

par rednik » 21 Fév 2012, 21:51

Bonjour a tous,


Je voudrais savoir si il est possible de trouver une formule qui permet de définir le lien qu'il y a entre les variables pour trouver le "result" à partir seulement d'échantillons.


Mes échantillons ressemble à ceci :
Code: Tout sélectionner
var1   var2   var3   var4   var5   var6   result
1533   171   90   206   35   32   289
1533   171   90   206   35   78   669
1533   171   90   206   35   167   1309
1533   171   90   206   35   248   2077
1533   171   90   206   35   298   2490
1853   248   90   206   35   20   207
1853   248   90   206   35   22   229
1853   248   90   206   35   24   250
1853   248   90   206   35   32   357
1853   248   90   206   35   78   786
1853   248   90   206   35   167   1535
1853   248   90   206   35   248   2436
1853   248   90   206   35   298   2925
672   29   90   280   35   20   55
672   29   90   280   35   22   61
672   29   90   280   35   24   66
672   29   90   280   35   32   90
672   29   90   280   35   78   209
672   29   90   280   35   167   409
672   29   90   280   35   248   649
672   29   90   280   35   298   780
756   39   90   280   35   20   62
756   39   90   280   35   22   68
756   39   90   280   35   24   75
756   39   90   280   35   32   101
756   39   90   280   35   78   235
756   39   90   280   35   167   460
756   39   90   280   35   248   731
756   39   90   280   35   298   945
803   43   90   280   35   20   66
803   43   90   280   35   22   73
803   43   90   280   35   24   79
803   43   90   280   35   32   108
803   43   90   280   35   78   250
803   43   90   280   35   167   489
803   43   90   280   35   248   776
803   43   90   280   35   298   930

Ceci n'est qu'une petite partie, j'ai à ma disposition beaucoup plus de donnée.

Je ne connais pas du tout la forme que pourrait avoir la formule et peut très bien contenir des constantes en plus des variables à ma disposition.

Existe t'il un logiciel qui puisse me permettre de trouver ce genre de chose ? (j'imagine bien qu'il est difficilement envisageable de trouver ça à la main)



XENSECP
Habitué(e)
Messages: 6387
Enregistré le: 27 Fév 2008, 20:13

par XENSECP » 21 Fév 2012, 22:25

Pas évident... Tu pourrais étudier des bouts en considérant quand le plus de variables est constante en même temps...

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 13:39

par Dlzlogic » 21 Fév 2012, 23:11

Bonjour,
Pour une fonction du type f(x,y,z) je sais le faire.
Si j'ai bien compris, là il y a 7 variables au lieu de 3, donc en théorie, ça ne pose pas de problème, mais je ne voudrais m'engager trop vite, il y a aussi certaines conditions de monotonies qui doivent être respectées.

rednik
Messages: 5
Enregistré le: 21 Fév 2012, 21:26

par rednik » 21 Fév 2012, 23:13

XENSECP a écrit:Pas évident... Tu pourrais étudier des bouts en considérant quand le plus de variables est constante en même temps...


J'y ai pensé mais comment faire pour rassembler le tout ?

Les variable 1 et 2 sont liées (mais j'ai l'impression que la 2 n’influe pas énormément sur le résultat)

Par exemple la j'ai ça :
http://puu.sh/hPuF

Une seule variable change à chaque fois pour ces courbes (en plus du résultat)



Dlzlogic a écrit:Bonjour,
Pour une fonction du type f(x,y,z) je sais le faire.
Si j'ai bien compris, là il y a 7 variables au lieu de 3, donc en théorie, ça ne pose pas de problème, mais je ne voudrais m'engager trop vite, il y a aussi certaines conditions de monotonies qui doivent être respectées.


La démarche à suivre pour une fonction du type f(x,y,z) est-elle complexe ? Car je ne vois vraiment pas comment c'est possible de trouver, je ne sais même pas par ou commencer.

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 13:39

par Dlzlogic » 22 Fév 2012, 12:37

Bonjour,
Pour résoudre ce problème, je préfère que ça se passe par MP ou mail.

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 13:39

par Dlzlogic » 22 Fév 2012, 13:25

Merci de prendre le relai.
Mais comment justifier l'utilisation de la méthodes des moindres carrés ?

Sylviel
Modérateur
Messages: 6466
Enregistré le: 20 Jan 2010, 13:00

par Sylviel » 22 Fév 2012, 14:34

Déjà répondu 1000 fois : pas de justification générale. Il y en as dans divers cadre, en se dotant d'un certain nombre d'hypothèses. Et je pense que l'explication principale est historique et pratique plus que théorique...
Merci de répondre aux questions posées, ce sont des indications pour vous aider à résoudre vos exercices.

Sylviel
Modérateur
Messages: 6466
Enregistré le: 20 Jan 2010, 13:00

par Sylviel » 22 Fév 2012, 21:59

Ben la regression linéaire n'est pas que unidimensionnelle. Regarde un peu la doc de SAS ou de R avec les mots clefs "linear regression", "multidimensionnal", et tu devrais trouver ton bonheur...
Merci de répondre aux questions posées, ce sont des indications pour vous aider à résoudre vos exercices.

rednik
Messages: 5
Enregistré le: 21 Fév 2012, 21:26

par rednik » 24 Fév 2012, 17:43

Sylviel a écrit:Ben la regression linéaire n'est pas que unidimensionnelle. Regarde un peu la doc de SAS ou de R avec les mots clefs "linear regression", "multidimensionnal", et tu devrais trouver ton bonheur...


J'ai trouvé des valeurs en utilisant cela, mais je tombe loin du résultat voulu en les utilisant, très loin même.

Voici ce que j’obtiens :

Code: Tout sélectionner
       V1             V2              V5           V10             V11       
 Min.   : 672   Min.   : 29.0   Min.   :206   Min.   : 20.0   Min.   :  55.0 
 1st Qu.: 803   1st Qu.: 43.0   1st Qu.:206   1st Qu.: 23.5   1st Qu.: 134.0 
 Median :1239   Median :113.0   Median :243   Median : 55.0   Median : 254.5 
 Mean   :1176   Mean   :109.9   Mean   :243   Mean   :111.1   Mean   : 601.2 
 3rd Qu.:1365   3rd Qu.:141.0   3rd Qu.:280   3rd Qu.:187.2   3rd Qu.: 949.5 
 Max.   :1853   Max.   :248.0   Max.   :280   Max.   :298.0   Max.   :2925.0 
>
> model=lm(V11 ~ . , data=new)
> summary(model)

Call:
lm(formula = V11 ~ ., data = new)

Residuals:
    Min      1Q  Median      3Q     Max
-485.64 -131.27  -15.66  118.57  871.46

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept) -47.9563   212.4989  -0.226   0.8218   
V1            0.5505     0.3001   1.835   0.0687 . 
V2           -0.1816     1.6360  -0.111   0.9118   
V5           -2.3983     0.4681  -5.124 9.83e-07 ***
V10           5.4376     0.1652  32.924  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 207.8 on 139 degrees of freedom
Multiple R-squared: 0.8986,     Adjusted R-squared: 0.8957
F-statistic:   308 on 4 and 139 DF,  p-value: < 2.2e-16


J'ai retiré les variables 3 et 5 (voir mon premier poste) car elles n'étaient pas pertinente. Les V1, V2, V5, V10 et V11 sont respectivement var1, var2, var4, var6 et result.


En essayant plusieurs combinaisons j'ai remarqué que ((var1+var2)*var6)/var4)=~result mais j'aimerai toruver la formule exact.
Quelqu'un aurait-il d'autres pistes pour trouver la solution ?

Sylviel
Modérateur
Messages: 6466
Enregistré le: 20 Jan 2010, 13:00

par Sylviel » 24 Fév 2012, 18:05

"la formule exacte" n'a pas de sens si ce n'est qu'une approximation.
Comme je te l'ai dis tu peux trouver la meilleure fonction dans une classe de fonctions donnée. A toi de voir quelle classe paraît le mieux. Il y a d'autres modèles que le linéaire à que l'on peut utiliser...

Tu peux par exemple commencer par tracer des courbes à (n-1) paramètres fixé, et faire des regressions linéaires, logarithmiques, exponentielles dessus, pour te faire une idée...
Merci de répondre aux questions posées, ce sont des indications pour vous aider à résoudre vos exercices.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 24 Fév 2012, 18:20

slt,

as-tu un vrai fichier (qui contient plus de donnees)?

c'est juste pour tester pour moi meme...mas je suis pas sur que ca soit efficace...
la vie est une fête :)

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 13:39

par Dlzlogic » 24 Fév 2012, 18:51

Sylviel a écrit:"la formule exacte" n'a pas de sens si ce n'est qu'une approximation.
Avec un coefficient de détermination R² = 0.999 ou R² = 1.000, ce n'est bien sûr par une formule exacte puisqu'on travaille avec de réels, mais on ne doit pas en être loin.

rednik
Messages: 5
Enregistré le: 21 Fév 2012, 21:26

par rednik » 24 Fév 2012, 21:11

Sylviel a écrit:Tu peux par exemple commencer par tracer des courbes à (n-1) paramètres fixé, et faire des regressions linéaires, logarithmiques, exponentielles dessus, pour te faire une idée...



Je ne sais pas faire cela, j'ai un peu cherché sur internet mais je n'ai pas le niveau :/
Merci pour tes réponses, il ne me reste plus qu'a trouver quelqu'un qui puisse les appliquer :we:


fatal_error a écrit:slt,

as-tu un vrai fichier (qui contient plus de donnees)?

c'est juste pour tester pour moi meme...mas je suis pas sur que ca soit efficace...


Je t'ai envoyé par MP mes 2 fichiers en .txt les deux sont indépendant, il y a donc 2 formules différente à trouver, mais elles sont surement très similaire.


Dlzlogic, merci pour tes réponses, je t'ai également envoyé un MP

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 25 Fév 2012, 13:29

Avec Priest j'obtiens
Code: Tout sélectionner
got 4233.08 expected 4233
got 6147.35 expected 6102
got 7442.99 expected 7413
got 14468.2 expected 14468
got 5875.65 expected 5832
got 17880.4 expected 17804
got 47232 expected 47232
got 7435.97 expected 7409
got 10754.2 expected 10678
got 13038.1 expected 12974
got 25319 expected 25319
got 10272 expected 10207
got 31162.5 expected 31157
got 80348.5 expected 82656
got 8165.07 expected 8165
got 11851.8 expected 11768
got 14308 expected 14298
got 27903 expected 27903
got 11331.2 expected 11248
got 34342.8 expected 34337
got 89332.1 expected 91086
got 8769.09 expected 8769
got 12712.2 expected 12640
got 15396.1 expected 15357
got 29970 expected 29970
got 12162.3 expected 12081
got 36882.4 expected 36880
got 97835 expected 97836
got 10811.4 expected 10735
got 15516.3 expected 15473
got 18858 expected 18799
got 36688 expected 36688
got 14807 expected 14790
got 45150.8 expected 45146
got 119765 expected 119766
got 11725.5 expected 11642
got 16853.6 expected 16781
got 20388.1 expected 20388
got 39798.1 expected 39788
got 16098.8 expected 16039
got 48961.2 expected 48962
got 129884 expected 129888
got 11876.1 expected 11793
got 17072.5 expected 16998
got 20653 expected 20653
got 40312.7 expected 40305
got 16312.4 expected 16248
got 49597.9 expected 49598
got 126498 expected 131574
got 16242 expected 16178
got 23319 expected 23319
got 28333.7 expected 28331
got 55051.4 expected 55290
got 22301.6 expected 22289
got 68037.5 expected 68038
got 70550.1 expected 180492
got 23442.1 expected 23436
got 33780 expected 33780
got 41042.9 expected 41041
got 77920.2 expected 80093
got 32288 expected 32288
got 98246.7 expected 98560
got 49819.2 expected 261462
got 29938 expected 29938
got 43156.9 expected 43151
got 52292.5 expected 52427
got 100912 expected 102313
got 41245 expected 41245
got 125263 expected 125902
got 47092.5 expected 333996
got 14.6621 expected 14
got 20.6416 expected 21
got 25.1061 expected 25
got 50.279 expected 50
got 18.2635 expected 20
got 67.6872 expected 61
got 162.656 expected 162
got 26.2849 expected 25
got 35.6505 expected 36
got 43.8271 expected 44
got 86.7203 expected 87
got 33.1139 expected 35
got 107.013 expected 107
got 281.966 expected 282
got 30.1214 expected 28
got 40.1514 expected 40
got 48.9291 expected 49
got 96.1341 expected 96
got 37.779 expected 38
got 118.655 expected 118
got 312.16 expected 312
got 30.4967 expected 30
got 43.6418 expected 43
got 52.8584 expected 53
got 103.113 expected 103
got 40.7696 expected 41
got 127.412 expected 127
got 335.726 expected 336
got 37.4052 expected 37
got 53.2646 expected 53
got 64.2827 expected 65
got 127.014 expected 127
got 50.1465 expected 51
got 154.865 expected 156
got 412.429 expected 414
got 40.3214 expected 40
got 58.5179 expected 58
got 70.1146 expected 70
got 137.057 expected 137
got 54.2541 expected 55
got 169.234 expected 169
got 444.009 expected 444
got 40.9313 expected 40
got 58.3038 expected 58
got 70.9682 expected 71
got 139.059 expected 139
got 54.6874 expected 56
got 171.041 expected 171
got 449.861 expected 450
got 70.8519 expected 56
got 83.692 expected 80
got 98.0266 expected 98
got 186.705 expected 191
got 80.65 expected 77
got 234.92 expected 235
got 602.034 expected 624
got 102.419 expected 85
got 117.033 expected 117
got 136.269 expected 142
got 275.696 expected 277
got 111.397 expected 111
got 330.977 expected 341
got 899.042 expected 900
got 117.388 expected 103
got 149.123 expected 149
got 181.506 expected 181
got 356.414 expected 354
got 141.973 expected 142
got 437.033 expected 436
got 1177.64 expected 1152
got 14.6655 expected 14
got 20.6498 expected 21
got 25.5072 expected 26
got 50.9891 expected 51
got 18.2722 expected 20
got 68.16 expected 62
got 163.325 expected 162
got 26.3149 expected 26
got 36.4617 expected 37
got 44.5866 expected 45
got 88.7898 expected 89
got 33.8365 expected 36
got 108.942 expected 109
got 287.942 expected 288
got 30.224 expected 28
got 41.1075 expected 41
got 49.9227 expected 50
got 97.8708 expected 98
got 38.26 expected 39
got 121.24 expected 121
got 317.959 expected 318
got 31.4421 expected 30
got 44.4982 expected 44
got 53.8832 expected 54
got 104.852 expected 105
got 41.469 expected 42
got 129.936 expected 130
got 341.384 expected 342
got 37.7679 expected 37
got 54.0533 expected 54
got 65.0908 expected 66
got 128.96 expected 129
got 51.5597 expected 52
got 157.276 expected 159
got 418.188 expected 420
got 41.0512 expected 41
got 59.445 expected 59
got 71.0581 expected 71
got 139.99 expected 140
got 55.6284 expected 56
got 172.011 expected 172
got 456.023 expected 456
got 41.1563 expected 41
got 59.1929 expected 59
got 71.9215 expected 72
got 141.952 expected 142
got 55.5741 expected 57
got 173.959 expected 174
got 461.888 expected 462
got 70.9594 expected 57
got 84.2287 expected 82
got 98.8031 expected 99
got 190.242 expected 195
got 80.5644 expected 78
got 238.702 expected 239
got 613.034 expected 636
got 101.615 expected 82
got 118.707 expected 119
got 137.738 expected 144
got 281.455 expected 282
got 113.281 expected 113
got 335.604 expected 347
got 917.846 expected 918
got 114.907 expected 105
got 151.331 expected 152
got 183.996 expected 184
got 361.61 expected 360
got 143.719 expected 145
got 444.132 expected 444
got 1200.86 expected 1176
got 19.4308 expected 15
got 22.9912 expected 22
got 27.269 expected 27
got 52.1947 expected 52
got 21.3993 expected 21
got 69.7953 expected 64
got 168.356 expected 168
got 28.325 expected 27
got 37.7487 expected 38
got 46.7496 expected 47
got 90.8153 expected 92
got 35.2319 expected 37
got 112.803 expected 113
got 299.465 expected 300
got 31.5466 expected 29
got 42.0962 expected 42
got 51.4785 expected 52
got 100.455 expected 101
got 39.9283 expected 41
got 124.855 expected 125
got 329.269 expected 330
got 33.5702 expected 31
got 46.1126 expected 46
got 55.3048 expected 56
got 108.234 expected 109
got 43.7571 expected 44
got 132.935 expected 134
got 352.812 expected 354
got 39.3162 expected 39
got 55.6939 expected 56
got 66.8827 expected 68
got 132.862 expected 133
got 51.7053 expected 53
got 161.274 expected 164
got 429.709 expected 432
got 42.2603 expected 42
got 61.1018 expected 61
got 73.707 expected 74
got 144.874 expected 145
got 56.7474 expected 58
got 177.34 expected 178
got 467.82 expected 468
got 43.4293 expected 43
got 60.9976 expected 61
got 74.8472 expected 75
got 145.631 expected 146
got 57.3468 expected 59
got 179.756 expected 180
got 472.48 expected 474
got 71.2551 expected 58
got 85.1822 expected 85
got 101.009 expected 103
got 195.556 expected 201
got 81.2351 expected 81
got 244.503 expected 248
got 629.702 expected 654
got 102.834 expected 85
got 122.774 expected 123
got 141.641 expected 149
got 287.799 expected 292
got 117.036 expected 117
got 344.992 expected 359
got 945.853 expected 948
got 110.564 expected 109
got 155.879 expected 157
got 190.591 expected 191
got 373.068 expected 373
got 148.004 expected 150
got 459.287 expected 459
got 1235.78 expected 1212
Exponential         0.0261139 1332.65

les got sont des valeurs que tu peux retrouver dans ton fichier, les expected les valeurs que la fonction f a calculé.
Lerreur relative moyenne est de 0.0261139
et lecart type (jsais pas si cest son nom) : v=sqrt(somme_(i=1,N) (expected_i - predicted_i)^2)/N = 1332.65

J'ai pas trop le temps pour te donner la fonction là, faut que je fasse du reverse engineering sur mon propre code -_-, mais ca consiste en un truc en N^3 au plus je dirais

jme suis servi d'un tiers de tes données pour prédire l'ensemble (260 valeurs a peu pres)

EDIT
alors...pour la fonction f, c'est assez casse burnes :
il faut calculer le produit scalaire
k_npo x invKY
invKY est un vecteur 1xN
voilà son expression :
Code: Tout sélectionner
     -0.414595     -0.760848   -0.00904627     -0.198715     -0.344584     -0.162874     -0.453166    -0.0501579       4.99747     -0.140962       4.47903     -0.350413       22.3151     -0.150555      0.352125     -0.222691       2.39973     -0.110829     -0.101077     -0.127942     -0.104377      -3.31054       -1.3951      -3.27948      0.864715    -0.0655728     -0.757115        1.1052      -2.48342       1.15184      -2.02581    -0.0684572      -1.60708     -0.283033    -0.0428627      0.158976     -0.204461     -0.133222      0.401981     -0.163306       -1.9872     -0.612819      0.132935      -3.32764     0.0545102      -1.57464       1.05106      0.291714      0.386729      0.203656      0.584192      0.321642     -0.266589        2.2014     -0.255764       1.85788     -0.781342      0.240795      0.561967      0.984743       1.49043       2.72393      0.769891     0.0175966     -0.660544     -0.973447      -1.77989        1.2521      0.986252     -0.481085      0.724724     -0.563109       1.21435      -1.58124      0.688509       -1.3014       0.62815      0.900351      0.763867       1.21959     -0.910876      -1.17534        1.1313     -0.178381      -7.82239     -0.340463


k_npo est un vecteur Nx1

k_npo est calculé par :
pour i = 1 à N
k_npo(i) = k(v, d[i])
finpour

v est un vecteur correspondant à ton point x dont on veut prédire f(x) donc de dimension ton nombre de variable.
d[i] est également un vecteur de même dimension. d[i] est le ix3 ieme point du fichier Priest...
et enfin k(x,y) est donné par
k(x,y) = 3000*exp(-(x - y)^2/(201.644^2)+3000;
la vie est une fête :)

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 13:39

par Dlzlogic » 02 Mar 2012, 15:08

Bonjour,
Le problème posé est intéressant et mérite d'être examiné.
Je repose le problème. On dispose d'un certain nombre de groupes de variables. J'appelle groupe, les variables qui correspondent à une expérience, ou une observation et qui donne un résultat. On peut écrire cela ainsi :
Res = f(V1, V2, V3, V4, V5, ...). Ceci forme un groupe.
On dispose d'un certain nombre de groupes plus grand, voire beaucoup plus grand, que le nombre de variables, il y donc des données en surnombre.

Le but est de trouver une fonction qui donnera un résultat satisfaisant.
Lorsque ce problème se pose dans la pratique, par exemple, le calage de plan par digitalisation, la compensation d'un réseau de triangulation, les relations entre les différentes variables sont connues, en d'autres termes un connait la fonction, reste à déterminer les paramètres.

Dans le cas présent, c'est à dire le cas général, on ne connait pas la fonction.
Il existe des méthodes qui utilisent des polynômes, en ce cas, la fonction sera de la forme
Res = a + b.V1 + c.V1² + d.v1^3 + e.V2 + f.V2² + g.V2^3 + h.V3 + i.V3² + j.V3^3 + ...

Je propose une autre méthode. Dans l'état actuel, on admettra que la fonction recherchée sera la meilleure parmi l'une des quatre suivantes :
Linéaire : Res = a + b.V1 + c.V2 + d.V3 + e.V4 +...
Exponentielle : Res = exp(a + b.V1 + c.V2 + d.V3 + e.V4 + ...)
Logarithmique : Res = a+ b.ln(V1) + c.ln(V2) + d.ln(V3) + e.ln(V4) + ...
Puissance : Res= exp(a) * V1^b * V2^c + V3^d + V4^e * ...
Cette dernière forme est utilisée en particulier dans les calculs de pluviométrie, et il semble bien qu'elle reste dans tous les cas la plus vraisemblable et la plus précise.

L'application sur les fichiers fournis en exemple sur ce fil ont donné les résultats suivants

Calcul sur 280 groupes.
Ecart-type = 220.11
Ecart relatif (valeur absolue) = 6.80%
Ecart relatif (valeur signée) = 0.32%

Calcul sur 210 groupes.
Ecart-type = 529.19
Ecart relatif (valeur absolue) = 3.61%
Ecart relatif (valeur signée) = 0.19%

Remarque, le nombre important de groupes n'influe pas sur le résultat. Il semble préférable de limiter le nombre à quelques dizaines dont la répartition sera soigneusement choisie.
Par ailleurs, la dispersion des valeurs résultat dans le fichier est importante puis que l'on va de nombres à 3 chiffres jusqu'à des nombres à 6 chiffres, alors que les variables les plus significatives n'ont que 2 ou 3 chiffres.

 

Retourner vers ⚜ Salon Mathématique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite