Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Ausgleichsverfahren erzeugen ein Modell für den Zusammenhang zwischen gemessenen Größen. Obwohl nur endlich viele punktuelle Messungen vorliegen, beschreibt das Modell den Zusammenhang lückenlos. Messfehler und Widersprüche in den Messwerten werden bei der Erzeugung des Modells ausgeglichen.

Das wichtigeste Ausgleichsverfahren ist die Methode der kleinsten Quadrate (siehe unten). Ausgleichsverfahren kommen immer dann zum Einsatz, wenn die darstellung eines funktionalen Zusammenhangs durch eine endliche Anzahl von Punkte nicht genügt, z.B. bei

Im Kontext des maschinellen Lernens werden Ausgleichsverfahren als Regressionsverfahren bezeichnet.

7.1Zu lösendes Problem

Der Zusammenhang zwischen zwei Größen xx und yy soll aus nn Messungen (x1,y1),,(xn,yn)(x_1,y_1),\ldots,(x_n,y_n) ermittelt werden. Dabei sind die Messstellen xkx_k vorgegeben oder praktisch fehlerfrei gemessen. Die von den xkx_k abhängenden Werte yky_k können Messfehler aufweisen.

Im Allgemeinen wird man deutlich mehr Messwerte zur Verfügung haben als (bei fehlerfreier Messung) eigentlich benötigt.

Beispiele:

Source
import matplotlib.pyplot as plt
import numpy as np

x_meas = np.array([1, 2, 5, 7, 9])
y_meas = np.array([2.3, 6.4, 5.1, 12.8, 11.9])

fig, ax = plt.subplots()

ax.plot(x_meas, y_meas, 'ob', label='Messungen $(x_k,y_k)$')

ax.set_xlim(0, 10)
ax.set_xticks(x_meas)
ax.set_xticklabels(['$x_1$', '$x_2$', '$x_3$', '$x_4$', '$x_5$'])
ax.set_xlabel('Messstellen')

ax.set_ylim(0, 15)
ax.set_yticks(y_meas)
ax.set_yticklabels(['$y_1$', '$y_2$', '$y_3$', '$y_4$', '$y_5$'])
ax.set_ylabel('Messwerte')

ax.grid()
ax.legend(loc='upper left')

plt.show()
<Figure size 640x480 with 1 Axes>

Aus dem Kontext der Messaufgabe ist der grundlegende funktionale Zusammenhang f:RRf:\bbR\to\bbR zwischen den Größen xx und yy bekannt. Es müssen nur noch einige Parameter bestimmt werden, sodass ff die Messwerte gut repräsentiert. Beachte: Die Funktion ff kann auch nur auf einem Intervall von Interesse sein, was am Verfahren aber nichts ändert.

Beispiele:

Source
fig, ax = plt.subplots()

ax.plot(x_meas, y_meas, 'ob', label='Messungen $(x_k,y_k)$')

a = 1.171875
b = 2.075
ax.plot([0, 10], [a * 0 + b, a * 10 + b], '-r', label='$f$')

ax.set_xlim(0, 10)
ax.set_xticks(x_meas)
ax.set_xticklabels(['$x_1$', '$x_2$', '$x_3$', '$x_4$', '$x_5$'])
ax.set_xlabel('Messstellen')

ax.set_ylim(0, 15)
ax.set_yticks(y_meas)
ax.set_yticklabels(['$y_1$', '$y_2$', '$y_3$', '$y_4$', '$y_5$'])
ax.set_ylabel('Messwerte')

ax.grid()
ax.legend(loc='upper left')

plt.show()
<Figure size 640x480 with 1 Axes>

7.2Wie Ansatzfunktion wählen?

Das hängt vom Kontext ab! Oft ergibt sich die Ansatzfunktion aus physikalischen Gesetzen oder aus der verfolgten Zielstellung heraus.

Übliche Ansätze für ff:

Source
def hat(x):
    return 0.5 * np.maximum(0, 2 - np.abs(x))

fig, ax = plt.subplots()

# Hütchen plotten
x_grid = np.array([2, 4, 6, 8])
for k, x in enumerate(x_grid):
    ax.plot(x_grid, hat(x_grid - x), label=f'$h_{int(k+1)}$', lw=1)

# Koeffizienten vor verschobenen Hütchen
a = [1.5, 0.5, 2, 2.5]

# stückweise lineare Funktion als Summe von verschobenen Hütchen bauen
y = np.zeros(len(a))
for k in range(len(a)):
    y += a[k] * hat(x_grid - x_grid[k])

# Funktion plotten (mit Formel in Legende)
label = '+'.join([f'{a[k]}\\,h_{k+1}(x)' for k in range(len(a))])
ax.plot(x_grid, y, '-r', label=f'$f(x)={label}$', lw=3)

ax.set_xlim(x_grid[0], x_grid[-1])
ax.set_xticks(x_grid)
ax.set_xlabel('x')

ax.set_ylim(0, 4)
ax.set_yticks(a)
ax.set_yticklabels(['$a_1$', '$a_2$', '$a_3$', '$a_4$'])
ax.set_ylabel('y')

ax.grid()
ax.legend(loc='upper left')

plt.show()
<Figure size 640x480 with 1 Axes>

7.3Was heißt „gut“?

Es gibt viele verschiedene richtige Antworten auf diese Frage!

Grundsätzlich möchte man die Differenzen f(xk)ykf(x_k)-y_k zwischen ff an den Messstellen und den zugehörigen Messwerten für alle kk klein bekommen.

Source
fig, ax = plt.subplots()

a = 1.171875
b = 2.075

# Differenzen
for x, y in zip(x_meas, y_meas):
    ax.plot([x, x], [a * x + b, y], '-y', lw=3)
# letzte Differenz doppelt, damit ein (und nur ein!) Legendeneintrag erzeugt wird
ax.plot([x, x], [a * x + b, y], '-y', label='$|f(x_k)-y_k|$', lw=3)

# Messpunkte
ax.plot(x_meas, y_meas, 'ob', label='Messungen $(x_k,y_k)$')

# Gerade und Punkte darauf
ax.plot(x_meas, a * x_meas + b, 'or', label='Punkte $(x_k,f(x_k))$')
ax.plot([0, 10], [a * 0 + b, a * 10 + b], '-r', label='$f$')

ax.set_xlim(0, 10)
ax.set_xticks(x_meas)
ax.set_xticklabels(['$x_1$', '$x_2$', '$x_3$', '$x_4$', '$x_5$'])
ax.set_xlabel('Messstellen')

ax.set_ylim(0, 15)
ax.set_yticks(y_meas)
ax.set_yticklabels(['$y_1$', '$y_2$', '$y_3$', '$y_4$', '$y_5$'])
ax.set_ylabel('Messwerte')

ax.grid()
ax.legend(loc='upper left')

plt.show()
<Figure size 640x480 with 1 Axes>

7.3.1Variante 1 (Summe aller Fehler minimieren)

Minimiere

k=1nf(xk)yk\sum_{k=1}^n|{\color{red}f}(x_k)-y_k|

bezüglich der Parameter in ff.

Ist ff beispielsweise eine Gerade, so müssen wir

k=1naxk+byk\sum_{k=1}^n|{\color{red}a}\,x_k+{\color{red}b}-y_k|

bezüglich aa und bb minimieren.

Probleme:

Für Details siehe Least absolute deviations.

7.3.2Variante 2 (maximalen Fehler minimieren)

Minimiere

maxk=1,,nf(xk)yk\max_{k=1,\ldots,n}|{\color{red}f}(x_k)-y_k|

bezüglich der Parameter in ff.

Probleme:

7.3.3Variante 3 (Summe aller Fehlerquadrate minimieren)

„Rund-Lutschen“ von Variante 1 liefert Minimierung von

k=1n(f(xk)yk)2\sum_{k=1}^n\bigl({\color{red}f}(x_k)-y_k\bigr)^2

bezüglich der Parameter in ff.

Das ist differenzierbar und hat praktisch immer einen eindeutigen Minimierer!

Für die Eindeutigkeit werden mehr Messstellen benötigt als ff Parameter hat.

Diese Variante zum Lösen des Ausgleichsproblems ist als Methode der kleinesten Quadrate bekannt. Das Verfahren wurde von Carl Friedrich Gauß für Anwendungen in der Astronomie entwickelt und von ihm auch bei der Vermessung des Königreichs Hannover angewendet. Heute ist die Methode der kleinsten Quadrate in praktisch allen Wissenschaftszweigen im Einsatz, in denen Erkenntnisse aus Messungen gewonnen werden.

7.4Warum Quadrate?

Warum nicht dritte oder vierte Potenzen?

Einfache Gründe:

Tiefer liegende Gründe:

7.5Lösung des Minimierungsproblems

Lösen das Kleinste-Quadrate-Problem hier nur beispielhaft für eine Gerade f(x)=ax+bf(x)=a\,x+b. Für andere Ansätze ff erfolgen die Rechenschritte völlig analog, solange ff linear von den Parametern abhängt (siehe unten für den nichtlinearen Fall).

Die allgemeine Lösung wird anschließend ohne Rechenweg angeben.

7.5.1Ausgleichsgerade

Gegeben sind Punkte (xk,yk)(x_k,y_k) für k=1,,nk=1,\ldots,n. Gesucht ist der Minimierer von

g(a,b):=k=1n(axk+byk)2g({\color{red}a},{\color{red}b}):=\sum_{k=1}^n\bigl({\color{red}a}\,x_k+{\color{red}b}-y_k\bigr)^2

bezüglich a,bRa,b\in\mathbb{R}.

Gradient von gg berechnen:

g(a,b)=[2k=1nxk(axk+byk)2k=1n(axk+byk)]=[2ak=1nxk2+2bk=1nxk2k=1nxkyk2ak=1nxk+2bk=1n12k=1nyk]=[2c1a+2c2b2c32c2a+2nb2c4],{\begin{align} \nabla g({\color{red}a},{\color{red}b}) &=\begin{bmatrix} \displaystyle 2\,\sum_{k=1}^n x_k\,\bigl({\color{red}a}\,x_k+{\color{red}b}-y_k\bigr)\\ \displaystyle 2\,\sum_{k=1}^n \bigl({\color{red}a}\,x_k+{\color{red}b}-y_k\bigr) \end{bmatrix}\\ &=\begin{bmatrix} \displaystyle 2\,{\color{red}a}\,\sum_{k=1}^n x_k^2+2\,{\color{red}b}\,\sum_{k=1}^n x_k-2\,\sum_{k=1}^n x_k\,y_k\\ \displaystyle 2\,{\color{red}a}\,\sum_{k=1}^n x_k+2\,{\color{red}b}\,\sum_{k=1}^n 1-2\,\sum_{k=1}^n y_k \end{bmatrix}\\ &=\begin{bmatrix} 2\,c_1\,{\color{red}a}+2\,c_2\,{\color{red}b}-2\,c_3\\ 2\,c_2\,{\color{red}a}+2\,n\,{\color{red}b}-2\,c_4 \end{bmatrix}, \end{align}}

wobei

c1:=k=1nxk2,c_1:=\sum_{k=1}^n x_k^2,

c2:=k=1nxk,c_2:=\sum_{k=1}^n x_k,

c3:=k=1nxkyk,c_3:=\sum_{k=1}^n x_k\,y_k,

c4:=k=1nykc_4:=\sum_{k=1}^n y_k

konkrete Zahlen sind.

Der Gradient wird genau dann zum Nullvektor, wenn das lineare Gleichungssystem

[c1c2c2n][ab]=[c3c4]\begin{bmatrix} c_1&c_2\\ c_2&n \end{bmatrix} \begin{bmatrix} {\color{red}a}\\ {\color{red}b} \end{bmatrix} =\begin{bmatrix} c_3\\ c_4 \end{bmatrix}

erfüllt ist.

Man kann zeigen, dass die Lösung des Gleichungssystems nicht nur ein stationärer Punkt, sondern ein globales Minimum von gg ist.

7.5.2Allgemeine Lösung

Hat die gesuchte Ausgleichsfunktion die Form

f(x)=l=1malhl(x),f(x)=\sum_{l=1}^m{\color{red}a_l}\,h_l(x),

wobei h1,,hmh_1,\ldots,h_m beliebige Funktionen sind (nicht notwendig verschobene Hütchen), so soll die Funktion

g(a1,,am):=k=1n(l=1malhl(xk)yk)2g({\color{red}a_1},\ldots,{\color{red}a_m}):=\sum_{k=1}^n\left(\sum_{l=1}^m{\color{red}a_l}\,h_l(x_k)-y_k\right)^2

minimiert werden. Mit

a:=[a1am],\underline{a}:=\begin{bmatrix}a_1\\\vdots\\a_m\end{bmatrix},

H:=[h1(x1)hm(x1)h1(xn)hm(xn)],H:=\begin{bmatrix}h_1(x_1)&\cdots&h_m(x_1)\\\vdots&\ddots&\vdots\\h_1(x_n)&\cdots&h_m(x_n)\end{bmatrix},

y:=[y1yn]\underline{y}:=\begin{bmatrix}y_1\\\vdots\\y_n\end{bmatrix}

kann dies als

g(a)=Hay22g({\color{red}\underline{a}})=\bigl\|H\,{\color{red}\underline{a}}-\underline{y}\bigr\|_2^2

geschrieben werden.

Für den Gradient erhalten wir

g(a)=2HT(Hay),\nabla g({\color{red}\underline{a}})=2\,H^{\mathrm{T}}\,\bigl(H\,{\color{red}\underline{a}}-\underline{y}\bigr),

sodass die stationären Punkte Lösungen des linearen Gleichungssystems

HTHa=HTy\boxed{H^{\mathrm{T}}\,H\,{\color{red}\underline{a}}=H^{\mathrm{T}}\,\underline{y}}

sind. Dieses (m×m)(m\times m)-Gleichungssystem hat immer eine Lösung, die in allen praktisch relevanten Fällen (nmn\geq m) auch eindeutig ist. Die Systemmatrix ist immer symmetrisch und in allen praktisch relevanten Fällen auch positiv definit. Über die Kondition des Gleichungssystems und damit über die Kondition des Kleinste-Quadrate-Verfahrens sind keine allgemeinen Aussagen möglich. Die Kondition wird maßgeblich vom Zusammenspiel der Messstellen mit den Ansatzfunktionen bestimmt. Bei üblichen Ansatzfunktionen und gleichmäßig verteilten Messstellen kann die Kondition als gut angenommen werden.

7.6Hürden im praktischen Einsatz

7.6.1Verteilung der Messstellen

Die Messstellen sollten möglichst gleichmäßig im Definitionsbereich der gesuchten Funktion ff verteilt sein. In Bereichen mit überdurchschnittlich vielen Messstellen wird sich die Funktion stärker den Messpunkten anpassen als in Bereichen mit nur wenigen Messstellen.

Umgekehrt kann man diesen Effekt nutzen, um durch Vervielfachung von Messpunkten diesen Messpunkten mehr Einfluss auf die Lösung zu geben. Das kann sinnvoll sein, wenn gleichzeitig Messpunkte mit kleinem Messfehler und Messpunkte mit großen Messfehler vorliegen. Eine Vervielfachung der genaueren Punkte gibt diesen mehr Einfluss auf die Kleinste-Quadrate-Lösung.

7.6.2Nichtlineare Ansatzfunktionen

Das Lösen eines Kleinste-Quadrate-Problems als lineares Gleichungssystem funktioniert nur, wenn die Ansatzfunktion ff linear bezüglich ihrer Parameter ist.

Manche nichtlineare Ansatzfunktionen, wie z.B.

f(x)=aebx,f(x)={\color{red}a}\,\mathrm{e}^{{\color{red}b}\,x},

können durch eine geeignete Transformation der Messwerte zu linearen Ansatzfunktionen umgebaut werden (IDVID 790).

Meistens, wie z.B. bei

f(x)=sin(ax+b),f(x)=\sin({\color{red}a}\,x+{\color{red}b}),

müssen Lösungsverfahren für nichtlineare Optimierungsprobleme eingesetzt werden. Beispielsweise liefert g(a1,,am)=0\nabla g(a_1,\ldots,a_m)=0 für die Zielfunktion gg des Kleinste-Quadrate-Problems ein nichtlineares Gleichungssystem, welches mittels Newton-Verfahren gelöst werden kann.