Hur linjär regression fungerar

Intermediär regression med statsmodels i Python

Maarten Van den Broeck

Content Developer at DataCamp

Det klassiska diagrammet för enkel linjär regression

Ett spridningsdiagram med en linjär regressionslinje.

Intermediär regression med statsmodels i Python

Visualisera residualer

Spridningsdiagrammet med regressionslinjen, plus linjesegment från punkterna till linjen som representerar residualerna.

Intermediär regression med statsmodels i Python

Ett mått på bästa anpassning

Den enklaste idén (som inte fungerar)

  • Summera alla residualer.
  • Vissa residualer är negativa.

Nästa idé (som faktiskt fungerar)

  • Kvadrera varje residual och summera kvadraterna.
  • Det här kallas kvadratsumman.
Intermediär regression med statsmodels i Python

En utvikning om numerisk optimering

Ett linjediagram över en andragradsekvation

x = np.arange(-4, 5, 0.1)
y = x ** 2 - x + 10

xy_data = pd.DataFrame({"x": x,
                        "y": y})

sns.lineplot(x="x",
             y="y",
             data=xy_data)

Andragradsfunktionen y = x ** 2 - x + 10

Intermediär regression med statsmodels i Python

Lösa ekvationen med kalkyl

$y = x ^ 2 - x + 10$

$\frac{\partial y}{\partial x} = 2 x - 1$

$0 = 2 x - 1$

$x = 0.5$

$y = 0.5 ^ 2 - 0.5 + 10 = 9.75$

  • Inte alla ekvationer kan lösas på det här sättet.
  • Du kan låta Python räkna ut det.

Inget att oroa sig över om det här känns oklart – du behöver det inte i övningarna.

Samma andragradsfunktion, nu löst för att hitta minimumet

Intermediär regression med statsmodels i Python

minimize()

from scipy.optimize import minimize
def calc_quadratic(x):
  y = x ** 2 - x + 10
  return y
minimize(fun=calc_quadratic,
         x0=3)
      fun: 9.75
 hess_inv: array([[0.5]])
      jac: array([0.])
  message: 'Optimization terminated successfully.'
     nfev: 6
      nit: 2
     njev: 3
   status: 0
  success: True
        x: array([0.49999998])
Intermediär regression med statsmodels i Python

En algoritm för linjär regression

Definiera en funktion som beräknar kvadratsumman.

 

Anropa minimize() för att hitta de koefficienter som minimerar funktionen.

def calc_sum_of_squares(coeffs):
  intercept, slope = coeffs
  # More calculation!
minimize(
  fun=calc_sum_of_squares,
  x0=0
)
Intermediär regression med statsmodels i Python

Nu kör vi en övning!

Intermediär regression med statsmodels i Python

Preparing Video For Download...