Python, Korrelation und Regression: Teil 2

Siehe den vorherigen Beitrag hier .





Regression

Obwohl es hilfreich sein kann zu wissen, dass die beiden Variablen korreliert sind, können wir diese Informationen nicht allein verwenden, um das Gewicht olympischer Schwimmer bei Vorhandensein von Höhendaten vorherzusagen, oder umgekehrt. Beim Herstellen der Korrelation haben wir die Stärke und das Vorzeichen der Verbindung gemessen, jedoch nicht die Steigung, d.h. Steigung. Um eine Vorhersage zu erstellen, müssen Sie die erwartete Änderungsrate einer Variablen für eine bestimmte Änderung der Einheit in einer anderen Variablen kennen.





Wir möchten eine Gleichung ableiten, die den spezifischen Wert einer Variablen, der sogenannten unabhängigen Variablen, mit dem erwarteten Wert einer anderen abhängigen Variablen in Beziehung setzt. Zum Beispiel, wenn unsere lineare Gleichung Gewicht für eine gegebene Höhe prognostiziert, ist das Wachstum unsere unabhängigen Variablen und Gewicht - abhängig .





Die durch diese Gleichungen beschriebenen Linien werden Regressionslinien genannt . Dieser Begriff wurde vom britischen Polymath Sir Francis Galton aus dem 19. Jahrhundert geprägt. Er und sein Schüler Carl Pearson, der den Korrelationskoeffizienten ableitete, entwickelten im 19. Jahrhundert eine Vielzahl von Methoden zur Untersuchung linearer Beziehungen, die gemeinsam als Regressionsanalysemethoden bekannt wurden.





Denken Sie daran, dass Korrelation keine Kausalität impliziert und die Begriffe „abhängig“ und „unabhängig“ keine implizite Kausalität bedeuten. Sie sind nur Namen für mathematische Eingabe- und Ausgabewerte. Ein klassisches Beispiel ist die äußerst positive Korrelation zwischen der Anzahl der zum Löschen eines Feuers gesendeten Feuerwehrautos und dem durch das Feuer verursachten Schaden. Selbstverständlich verursacht das Senden von Feuerwehrautos zum Löschen eines Feuers an sich keinen Schaden. Niemand würde raten, die Anzahl der Fahrzeuge zu verringern, die zum Löschen eines Feuers geschickt werden, um den Schaden zu verringern. In solchen Situationen müssen wir nach einer zusätzlichen Variablen suchen, die kausal mit anderen Variablen zusammenhängt, und die Korrelation zwischen ihnen erklären. In diesem Beispiel könnte es die Größe des Feuers sein... Solche zugrunde liegenden Ursachen werden als Verwirrungsvariablen bezeichnet, da sie unsere Fähigkeit, die Beziehung zwischen abhängigen Variablen zu bestimmen, verzerren.





Lineare Gleichungen

Die beiden Variablen, die wir als x  und y bezeichnen können, können eng oder lose miteinander verbunden sein. Die einfachste Beziehung zwischen der unabhängigen Variablen x  und der abhängigen Variablen y  ist einfach und wird durch die folgende Formel ausgedrĂĽckt:





y = a + bx

. , b â€” , . , a = 32  b = 1.8. b, :





y = 32 + 1,8x

10° x  10:





y = 32 + 1,8 (10) = 50

, , 10° 50°F, . Python pandas, , :





'''       '''
celsius_to_fahrenheit = lambda x: 32 + (x * 1.8)

def ex_3_11():
    '''    '''
    df = pd.DataFrame({'C':s, 'F':s.map(celsius_to_fahrenheit)})
    df.plot('C', 'F', legend=False, grid=True)
    plt.xlabel(' ')
    plt.ylabel(' ')
    plt.show()
      
      



:





, 0 32 . a â€” y, x  0.





b; 2. , . , , .





, , . y  x. , , , , :





y = a + bx + ε

, ε  â€” , , a  b  x  y. y â€” yĚ‚, — :





ε = y-ŷ

. - , , , . , , , ( ).





a  b  , x  , . , , , x  y.





, , , , , . , , .





, , , . , , , .





, , . , . Ordinary Least Squares (OLS), :





, , , . , , , :





(a) — , X Y:





a = y Ě…-bx Ě…

b — , .





covariance



, variance



mean



, . :





def slope(xs, ys):
    '''   ( )'''
    return xs.cov(ys) / xs.var()

def intercept(xs, ys): 
     '''   (  Y)'''
   return ys.mean() - (xs.mean() * slope(xs, ys))

def ex_3_12():
    '''    ( ) 
            '''
    df = swimmer_data()
    X  = df[', ']
    y  = df[''].apply(np.log)
    a  = intercept(X, y)
    b  = slope(X, y) 
    print(': %f, : %f' % (a,b))
      
      



: 1.691033, : 0.014296
      
      



0.0143 1.6910.





— ( ), () . np.exp



, np.log



. , 5.42 . , , .





, x. , 1.014 . . , , , .





regression_line



x, yĚ‚  b.





'''  '''
regression_line = lambda a, b: lambda x: a + (b * x)  #  fn(a,b)(x)

def ex_3_13():
    '''  
            '''
    df = swimmer_data()
    X  = df[', '].apply( jitter(0.5) )
    y  = df[''].apply(np.log)
    a, b = intercept(X, y), slope(X, y) 
    ax = pd.DataFrame(np.array([X, y]).T).plot.scatter(0, 1, s=7)
    s  = pd.Series(range(150,210))
    df = pd.DataFrame( {0:s, 1:s.map(regression_line(a, b))} )  
    df.plot(0, 1, legend=False, grid=True, ax=ax)
    plt.xlabel(', .')
    plt.ylabel(' ')
    plt.show()
      
      



regression_line



x, a + bx.





, , yĚ‚  y.





def residuals(a, b, xs, ys):
    ''' '''
    estimate = regression_line(a, b)     #  
    return pd.Series( map(lambda x, y: y - estimate(x), xs, ys) )

constantly = lambda x: 0

def ex_3_14():
    '''        '''
    df = swimmer_data()
    X  = df[', '].apply( jitter(0.5) )
    y  = df[''].apply(np.log)
    a, b = intercept(X, y), slope(X, y) 
    y  = residuals(a, b, X, y)
    ax = pd.DataFrame(np.array([X, y]).T).plot.scatter(0, 1, s=12)
    s  = pd.Series(range(150,210))
    df = pd.DataFrame( {0:s, 1:s.map(constantly)} )      
    df.plot(0, 1, legend=False, grid=True, ax=ax)
    plt.xlabel(', .')
    plt.ylabel('')
    plt.show()
      
      



— , Y X. , :





, , -, , . , . , , .





, , , . , . , , . , .





, . . , , , .. . , , , .





. , , , , .





R-

, , .. , . R2, R-, 0 1 . .





, R2  1, Y X. R2 :





var(ε) â€” var(Y) â€” Y. , - . , . var(Y), .. .





, , a + bx.   .





var(ε)/var(Y) â€” , . . , . R2  — , .





r, R2  , . , .





R2 . — , R2. R2 .





, , , , f. , y. R2  y:





def r_squared(a, b, xs, ys):
    '''   (R-)'''
    r_var = residuals(a, b, xs, ys).var() 
    y_var = ys.var()
    return 1 - (r_var / y_var)

def ex_3_15():
    '''  R- 
            '''
    df = swimmer_data()
    X  = df[', '].apply( jitter(0.5) )
    y  = df[''].apply(np.log)
    a, b = intercept(X, y), slope(X, y)
    return r_squared(a, b, X, y)
      
      



0.75268223613272323
      
      



0.753. , 75% , 2012 ., .





( ), R2 :





r  , Y X, R2 0.52, .. 0.25.





, . , . .





. , , β (), :





y = β_1x_1 + β_2x_2

- , β1 = a β2 = b , x1  1, β1 — , , x1  () , .





β, , :





y = β_1x_1 + β_2x_2 + ⋯ + β_nx_n

x1  xn  , y. β1  βn  , .





, : , , , . , , .





, x. pandas,   , : .





Die Quellcodebeispiele fĂĽr diesen Beitrag befinden sich in meinem   Github- Repo . Alle Quelldaten stammen aus dem  Repository des  Autors des Buches.





Das Thema des nächsten Beitrags, Beitrag Nr. 3 , werden Matrixoperationen, normale Gleichungen und Kollinearität sein.








All Articles