J'essaie d'adapter certaines données d'un code de simulation que je suis exécuté afin de déterminer une dépendance en droit de l'alimentation. Lorsque je trace un ajustement linéaire, les données ne conviennent pas très bien.
Voici le script Python que j'utilise pour adapter les données: p> La sortie que je reçois est:
-71205.3 + 71174.5 * x ^ -9.79038E-05 P> tandis que sur la parcelle, l'ajustement ressemble aussi bien que vous vous attendez d'un peu d'astuce, la forme de la sortie me dérange. J'espérais que la constante serait proche de l'endroit où vous vous attendez à ce que le zéro soit (environ 30). Et je m'attendais à trouver une dépendance de pouvoir d'une fraction plus grande que 10 ^ -5. P> J'ai essayé de répandre mes données et de jouer avec les paramètres d'optimisation.Leastsq sans chance. C'est ce que j'essaie d'accomplir possible ou mes données ne le permettent tout simplement pas? Le calcul est coûteux, de sorte que plus de points de données est non trivial. P> merci! P> p>
3 Réponses :
Il aide à réaffecter Les moindres carrés trouveront des paramètres alors Il aide également à modifier la supposition initiale à quelque chose de plus proche de votre résultat souhaité, tel que
rendements p> 40.1253 + -282.949 * x x ^ 0.375555 P> P> xdata code> afin que les chiffres ne soient pas tous aussi petits.
Vous pouvez travailler dans une nouvelle variable
xprime = 1000 * x code>.
Ensuite, ajustez
xprime code> contre
y code>.
q code> montage p>
y = p [0] + p [1] * (x ** p [2]) code> p>
[max (ydata), -1, -0.5] code>. p>
J'ai oublié que j'avais aussi réparé x code>. J'ai édité le message à expliquer.
Remarque Vous pouvez remplacer le facteur de signalisation 1000 avec 500 ou 5000 et le résultat ne change pas (de manière significative).
Je l'ai Merci! J'avais déjà essayé de répandre, mais je suppose que cela se comporte toujours mal sans deviner décente pour la durée constante.
Il est beaucoup mieux pour d'abord prendre le logarithme, puis utiliser Le meilleur convient comme ça sont: amplitude = 0,8955 et index = -0.40943265484 p> Comme nous pouvons le voir à partir du graphique (et de vos données), si sa loi d'alimentation est adaptée, nous ne vous attendrions pas à ce que la valeur d'amplitude soit proche <> / p> moinsQuare code> pour s'adapter à cette équation linéaire, ce qui vous donnera un meilleur ajustement. Il y a un excellent exemple dans le SciPy Cookbook , que j'ai adapté ci-dessous pour correspondre à votre code.
30 code>. Comme dans l'équation de la loi d'alimentation
f (x) == amp * x ** Index code>, donc avec un index négatif:
f (1) == AMP code> et
f (0) == Infinity code>. p>
Merci beaucoup, c'était utile. Pour l'instant, je vais utiliser la solution de tsutbu. Cependant, je comprends que le passage des données aussi près que possible est bénéfique pour le raccord des moindres carrés. Merci encore!
@ user825518 - Cool, et oui si vous recherchez une loi de puissance avec offset, la méthode de Unutbu est une bonne approche!
Le moyen standard d'utiliser des moindres carrés linéaires pour obtenir un ajustement exponentiel est de faire ce que Fraxel suggère dans sa réponse a >: Fixez une ligne droite pour vous connecter (Y_I). P>
Cependant, cette méthode a connu des inconvénients numériques, en particulier la sensibilité (un petit changement dans les données donne un changement important dans l'estimation). L'alternative préférée consiste à utiliser une approche non linéaire EM> les moindres carrés - elle est moins sensible. Mais si vous êtes satisfait de la méthode LS linéaire à des fins non critiques, utilisez simplement cela. P>
Oui, j'essaie juste d'avoir une sensation difficile pour les paramètres. Aucun de ces chiffres ne sont destinés à la publication. Merci!
Dans la DOCS, on dirait que cette fonction s'attend à ce que l'argument code> parames code> soit seconde, et l'argument
xdata code> d'abord. Je doute que cela change de choses, mais pouvez-vous donner cela un essai et voir ce qui se passe?
N / M Je viens de faire ce changement et obtenez les mêmes résultats que vous faites. Cela ne vous aide pas, mais montre que ces documents doivent être bien meilleurs.
La seule autre chose que je peux penser est la suivante: pouvez-vous obtenir les erreurs standard de ces estimations? Dans O.L.S. Régression, il y a une belle formule pour les erreurs standard des coefficients. Avec un tel ensemble de données, je peux croire qu'ils sont extrêmement grands. Vous pouvez simplement voir de petits effets de taille d'échantillons. Avez-vous essayé cela avec un ensemble de données plus grand, disons ~ 100 observations?
Vous voudrez peut-être aussi demander à stat.stackexchange.com
Merci pour tous les conseils! Devrait-il être migré ou vient de demander une nouvelle question? J'ai l'impression que cela peut être plus approprié pour le public statists.stackexchange.
Je dirais à ré-demander là-bas. Si vous obtenez des réponses raisonnables, revenez et supprimez-la ici. Sinon, modifiez-vous simplement chaque message pour inclure un lien vers l'affichage croisé. Un modérateur peut venir et le changer à l'un ou l'autre.