Visualisez la gamme d'insertions internes et externes avec python

Code fait pour comprendre la gamme d'insertion interne et externe.

Il faut faire attention au surapprentissage, mais dans le cadre de l'extrapolation, Il est nécessaire d'examiner en profondeur si la formule d'approximation obtenue est applicable.

Aussi, si le but de l'approximation est "l'analyse" plutôt que la "prédiction" Si vous augmentez le nombre de variables ou l'ordre plus que nécessaire, il sera difficile à interpréter. Le défi est de savoir à quel point c'est facile ou si simple peut être adapté.

Partie de ligne brisée rouge </ font>: Plage d'extrapolation, Partie de ligne continue bleue </ font>: Plage d'interpolation.

interpolation_and_extrapolation


import numpy as np
import matplotlib.pyplot as plt

x = np.array([2.0, 3.5, 4.0, 4.5,  5.0,  5.5])
y = np.array([3.0, 3.2, 3.9, 5.2, 8.4, 10.5])
xp = np.linspace(2, 5.5, 100)
xp1 = np.linspace(0, 2, 100)
xp2 = np.linspace(5.5, 8, 100)

for val in range(1, 6):
    fx = np.poly1d(np.polyfit(x, y, val))
    plt.rcParams["font.size"] = 20
    fig, ax = plt.subplots(figsize=(15, 10))
    ax.plot(xp, fx(xp), '-', color='blue')
    ax.plot(xp1, fx(xp1), '-', color='red', linestyle='dashed')
    ax.plot(xp2, fx(xp2), '-', color='red', linestyle='dashed')
    ax.scatter(x, y, color='deepskyblue', s=32)
    s = '$y =$'
    for idx, deg in enumerate(reversed(range(0, val+1))):
        if (fx.coef[idx] > 0) & (idx != 0):
            s += '$ +$'
        if deg > 1:
            s += f' ${fx.coef[idx]:.2f} x^{deg}$'
        if deg == 1:
            s += f' ${fx.coef[idx]:.2f} x$'
        if deg == 0:
            s += f' ${fx.coef[idx]:.2f}$'
#     ax.text(0.05, 0.8, s=s, size='x-large', transform=ax.transAxes)
    ax.axhline([0], color='black')
    ax.axvline([2], color='gray', linestyle='dotted')
    ax.axvline([5.5], color='gray', linestyle='dotted')
    ax.set_xlim(0, 8)
    ax.set_ylim(-3, 14)
    ax.set_title(s)
    ax.set_ylabel('response variable')
    ax.set_xlabel('explanatory variables')
    fig.savefig(f'./data/img/inter_and_extrapolation{val}.png')

Approximation du premier ordre inter_and_extrapolation1.png Approximation du second ordre inter_and_extrapolation2.png Approximation du troisième ordre inter_and_extrapolation3.png Approximation du 4e ordre inter_and_extrapolation4.png Approximation du 5ème ordre inter_and_extrapolation5.png

Recommended Posts