[Python] Ajustement de courbe avec polypoly

Si vous souhaitez ajuster la courbe des données d'échantillon avec polypoly, vous pouvez facilement le faire en utilisant polyfit de numpy. La courbe est représentée par le polynôme suivant. polyfit calculera $ a_n $ dans la formule ci-dessous.

y = \sum^{N}_{n=0} a_n x^n

Les valeurs renvoyées par polyfit sont répertoriées par ordre décroissant. La formule est la suivante.

y = \sum^N_{n=0} a_n x^{N-n}

Si vous voulez dessiner un graphique d'une courbe en utilisant le coefficient obtenu par polyfit, préparez la valeur de x dans numpy.linspace etc. et passez le coefficient et x à numpy.polyval pour calculer y.

La figure ci-dessous montre le résultat de l'ajustement de la courbe avec des exemples de données et une équation linéaire. Le coefficient peut être obtenu simplement en définissant numpy.polyfit (x, y, 1). x et y sont des données et 1 est l'ordre. download.png

w = np.polyfit(x,y,1)
xs = np.linspace(np.min(x),np.max(x),100)
ys = np.polyval(w,xs)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(x, y,label='input')
ax.plot(xs, ys, 'r-', lw=2, label='polyfit')
ax.set_title('polyfit w = [%.2f, %.2f]' % (w[0],w[1]))
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.legend(loc='best',frameon=False)
ax.grid(True)

Des exemples de données ont été créés comme suit.

def getData1(numPoints, w,b, nstdev, xmin=0.0, xmax=1.0 ):
    x = scipy.stats.uniform.rvs(loc=xmin, scale=xmax-xmin,size=numPoints)
    n = scipy.stats.norm.rvs(size=numPoints, scale=nstdev)

    y = w * x + b + n
    return x, y

x, y = getData1(100, 1.5, 10, 10, xmin=0, xmax=100)

Résultat de l'ajustement de courbe avec un polypoly cubique download.png

w = np.polyfit(x,y,3)

xs = np.linspace(np.min(x),np.max(x),100)
ys = np.polyval(w,xs)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(x, y,label='input')
ax.plot(xs, ys, 'r-', lw=2, label='polyfit')
ax.set_title('polyfit w = [%.2f, %.2f, %.2f, %.2f]' % (w[0],w[1],w[2],w[3]))
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.legend(loc='best',frameon=False)
ax.grid(True)

Des exemples de données ont été créés comme suit.

def getData2(numPoints, Amp,  freq, phase, nstdev, xmin=0.0, xmax=np.pi*2.0 ):
    x = scipy.stats.uniform.rvs(loc=xmin, scale=xmax-xmin,size=numPoints)
    n = scipy.stats.norm.rvs(size=numPoints, scale=nstdev)

    y = Amp*np.sin(freq * x + phase) + n
    return x, y

x, y = getData2(100, 10, 1.0, 0.0, 5, xmin=0, xmax=np.pi*2.0)

URL de référence https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyval.html#numpy.polyval

Recommended Posts

[Python] Ajustement de courbe avec polypoly
Implémenté dans Python PRML Chapitre 1 Ajustement de courbe polygonale
Dessinez une courbe Koch avec Python Turtle
Schéma de schéma PRML Figure 1.4 Ajustement de la courbe polygonale
FizzBuzz en Python3
Grattage avec Python
Statistiques avec python
Grattage avec Python
Python avec Go
PRML Chapitre 1 Implémentation de Python pour l'ajustement de courbe bayésienne
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Traitement d'image avec Python et OpenCV [Tone Curve]
Testé avec Python
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
Essayez de dessiner une courbe de vie avec python
Communication série avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Communication de socket avec Python
Analyse de données avec python 2
Essayez de gratter avec Python.
Apprendre Python avec ChemTHEATER 03
Recherche séquentielle avec Python
"Orienté objet" appris avec python
Exécutez Python avec VBA
Manipuler yaml avec python
Résolvez AtCoder 167 avec python
Communication série avec python
[Python] Utiliser JSON avec Python
Apprendre Python avec ChemTHEATER 05-1
Exécutez prepDE.py avec python3
1.1 Premiers pas avec Python
Collecter des tweets avec Python
Binarisation avec OpenCV / Python
Méthode Kernel avec Python
Non bloquant avec Python + uWSGI
Publier des tweets avec python
Conduisez WebDriver avec python
Utiliser mecab avec Python 3
[Python] Redirection avec CGIHTTPServer
Analyse vocale par python
Pensez à yaml avec python
Utiliser Kinesis avec Python
Premiers pas avec Python
Utiliser DynamoDB avec Python
Getter Zundko avec python
Montage du modèle avec lmfit
Jugement des nombres premiers avec python
Exécutez Blender avec python
Résoudre des maths avec Python
Python à partir de Windows 7