Online lineare Regression in Python

Einführung

Online-Schätzung der linearen Regression $ y = ax + b $ Koeffizienten $ a, b $ in Python.

Formel

Minimum-Quadrat-Methode

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

Online-Schätzung des Durchschnittswertes

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

Quellcode

#!/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')

Ergebnis

result.gif

Recommended Posts

Online lineare Regression in Python
Online lineare Regression in Python (Robuste Schätzung)
Lineare Regression in Python (Statmodelle, Scikit-Learn, PyMC3)
Lineare Suche in Python
Regressionsanalyse mit Python
Implementiert in Python PRML Kapitel 3 Bayesianische lineare Regression
Mehrfacher Regressionsausdruck in Python
Einfache Regressionsanalyse mit Python
[Python] Lineare Regression mit Scicit-Learn
"Lineare Regression" und "Probabilistische Version der linearen Regression" in Python "Bayes lineare Regression"
Lineare Regression
Coursera Machine Learning Challenge in Python: ex1 (lineare Regression)
Erste einfache Regressionsanalyse in Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
SendKeys in Python
Echte Werte und Eigenvektoren: Lineare Algebra in Python <7>
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Ich habe versucht, Couseras logistische Regression in Python zu implementieren
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Einführung in Vektoren: Lineare Algebra in Python <1>
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
EV3 x Python Maschinelles Lernen Teil 2 Lineare Regression
Einheitsmatrix und inverse Matrix: Lineare Algebra in Python <4>
Inneres Produkt und Vektor: Lineare Algebra in Python <2>
Matrixberechnung und lineare Gleichungen: Lineare Algebra in Python <3>
Sortierte Liste in Python
Täglicher AtCoder # 36 mit Python