Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Regressió lineal, multilineal i polinòmica

Continguts

  1. Regressió lineal
  2. Regressió multilineal
  3. Regressió polinòmica

En aquest apartat es mostrarà com, d’una manera senzilla, podem fer diferents tipus de regressions. En concret es mostrarà com fer una regressió lineal, una regressió multilineal i una interpolació polinòmica.

Per tal de poder fer-ho, caldrà importar diverses llibrerires.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.stats
from sklearn.metrics import r2_score
import sklearn.linear_model

Un cop importats els paquets que necessitem, ja podem començar a fer les regressions.

Regressió lineal

Com ja sabem una regressió lineal té la següent forma:

\[y=ax+b\]

on a és el pendent i b és l’ordenada a l’origen.

Primer definirem els punts que volem interpolar (x i y).

x = [0,1,2,3,4,5,6,7,8,9,10]
y = [-0.693,-1.227,-1.656,-2.144,-2.688,-3.254,-3.789,-4.419,-4.506,-5.334,-5.298]

Ara ja podem crear la regressió lineal i fem la gràfica.

slope, intercept, R, p_value, std_err = scipy.stats.linregress(x,y)

print("Ordenada a l'origen =",intercept)
print("Pendent =",slope)
print("\nR^2 =",R**2)

plt.plot(x,y,'bo',label='Dades experimental')
plt.plot(x,intercept + slope*np.array(x),color='red',label='Regressió lineal')
plt.legend()
plt.xlabel("X")
plt.ylabel("Y")
plt.title("TÍTOL DE LA GRÀFICA")
plt.show()

La comanda slope, intercept, R, p_value, std_err = scipy.stats.linregress(x,y) el que fa és dir que faci una regressió linal amb les dades x i y i que digui el pendent (slope), l’ordenada a l’origen (intercept), el valor de R (R), el valor p (p_value) i l’error estàndard (std_err). Sempre que vulguem referir-nos a qualsevol d’aquest paràmetres, ho haurem de fer pel nom establert, per exemple quan vulguem calcular el valor de \(r^2\), simplement haurem d’afegir R**2, com en el codi anterior.

Regressió multilineal

Python també ens dona l’opció de poder fer regressions multilineals de l’estil:

\[y=a_1x_1+a_2x_2+a_3x_3+\cdots+a_nx_n+b\]

Per això només caldrà definir totes les entrades que volguem i generar el model multilineal.

df = pd.DataFrame({'x': [1, 2, 2, 4, 2, 1, 5, 4, 2, 4, 4, 3, 6],
                   'y': [1, 3, 3, 5, 2, 2, 1, 1, 0, 3, 4, 3, 2],
                   'z': [76, 78, 85, 88, 72, 69, 94, 94, 88, 92, 90, 75, 96]})

w, q = df[['x', 'y']], df['z']

regr = LinearRegression()
regr.fit(w, q)

R2 = regr.score(w, q)

print("Equació:",regr.coef_[0],"* X +",regr.coef_[1],'* Y +', regr.intercept_)
print("R^2 =",R2)

Regressió polinòmica

Per a la regressió polinòmica farem un procediment semblant a la regressió lineal simple: definirem les dades, generarem el polinomi interpolador del grau que nosaltres indiquem i el graficarem.

Recordem que una regressió polinòmica és del tipus:

\[y=b+a_1x+a_2x^2+a_3x^3+\cdot+a_nx^n\]
x =[1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y =[100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
grau = 3

model = np.poly1d(np.polyfit(x, y, grau))

llarg = np.linspace(min(x), max(x), 100)

print("Equació:\n",model)
print("\nR^2 =",r2_score(y, model(x)))

plt.plot(x,y,'bo',label='Dades experimental')
plt.plot(myline, model(myline),color='red',label='Regressió lineal')
plt.legend()
plt.xlabel("X")
plt.ylabel("Y")
plt.title("TÍTOL DE LA GRÀFICA")
plt.show()