Régression linéaire en ligne en Python

introduction

Estimation en ligne de la régression linéaire $ y = ax + b $ coefficients $ a, b $ en Python.

Formule

Méthode du carré minimum

--Référence: Analyse de régression (1) -Covariance et corrélation, régression simple linéaire

a = \frac{\overline{xy} - \bar{x}\bar{y}}{\overline{x^2} - \bar{x}^2}
, \hspace{2em} b = \bar{y} - a \bar{x}

Estimation en ligne de la valeur moyenne

\bar{x}_n = \alpha \bar{x}_{n-1} + (1-\alpha)x_n

Code source

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import scipy as sp
sp.seterr(divide='ignore', invalid='ignore')

alpha = 0.9
def mean(old, new):
    return new if sp.isnan(old) else alpha * old + ( 1.0 - alpha ) * new

def plot(fig):
    xyhist = sp.ones([100, 2]) * sp.nan
    mean_x  = sp.array([sp.nan])
    mean_y  = sp.array([sp.nan])
    mean_x2 = sp.array([sp.nan])
    mean_xy = sp.array([sp.nan])

    ax = fig.gca()
    ax.hold(True)
    ax.grid(True)
    ax.set_xlim([0, 1.0])
    ax.set_ylim([0, 1.0])

    xyscat = ax.scatter([],[], c='black', s=10, alpha=0.4)
    approx = ax.add_line(plt.Line2D([], [], color='r'))

    def inner(i):
        x = sp.random.rand()
        y = x + 0.05 * sp.random.normal()

        xyhist[:-1, :] = xyhist[1:, :]
        xyhist[-1, 0] = x
        xyhist[-1, 1] = y

        mean_x[:]  = mean( mean_x,  x )
        mean_y[:]  = mean( mean_y,  y )
        mean_xy[:] = mean( mean_xy, x *  y )
        mean_x2[:] = mean( mean_x2, x ** 2 )

        a = ( mean_xy - mean_x * mean_y ) / ( mean_x2 - mean_x ** 2 )
        b = mean_y - a * mean_x

        xyscat.set_offsets(xyhist)
        approx.set_data([0, 1], [b, a*1+b])
        ax.title.set_text('y = %.3fx %+.3f' % (a, b))
        plt.draw()

    return inner


fig = plt.figure()
ani = animation.FuncAnimation(fig, plot(fig), interval=300, frames=100)
ani.save('result.gif', writer='imagemagick')

résultat

result.gif

Recommended Posts

Régression linéaire en ligne en Python
Régression linéaire en ligne en Python (estimation robuste)
Régression linéaire en Python (statmodels, scikit-learn, PyMC3)
Recherche linéaire en Python
Analyse de régression avec Python
Implémenté en Python PRML Chapitre 3 Régression linéaire bayésienne
Expression de régression multiple en Python
Analyse de régression simple avec Python
[Python] Régression linéaire avec scicit-learn
"Régression linéaire" et "Version probabiliste de la régression linéaire" en Python "Régression linéaire de Bayes"
Régression linéaire
Coursera Machine Learning Challenge en Python: ex1 (régression linéaire)
Première analyse de régression simple en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
SendKeys en Python
Valeurs authentiques et vecteurs propres: Algèbre linéaire en Python <7>
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
J'ai essayé d'implémenter la régression logistique de Cousera en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Introduction aux vecteurs: Algèbre linéaire en Python <1>
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
EV3 x Python Machine Learning Partie 2 Régression linéaire
Matrice unitaire et matrice inverse: Algèbre linéaire en Python <4>
Produit intérieur et vecteur: Algèbre linéaire en Python <2>
Calcul matriciel et équations linéaires: Algèbre linéaire en Python <3>
Liste triée en Python
AtCoder # 36 quotidien avec Python