In [10]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import sklearn as sk
from sklearn.linear_model import LinearRegression
In [11]:
"""
Una qualunque tabella è pensata come una matrice
cioè una serie di array disposti in un certo ordine.
Il seguente DataFrame (la matrice, quindi) è pensata come 
la colonna delle X (colonna A) e i dati Y (colonna B)

"""
df=pd.DataFrame({
    "A":pd.Series([1.,3,5,6,8]),
    "B":pd.Series([10,24,48,60,75])
})
In [12]:
df
Out[12]:
A B
0 1.0 10
1 3.0 24
2 5.0 48
3 6.0 60
4 8.0 75
In [13]:
X=df[["A"]]
X
Out[13]:
A
0 1.0
1 3.0
2 5.0
3 6.0
4 8.0
In [14]:
Y=df["B"]
Y
Out[14]:
0    10
1    24
2    48
3    60
4    75
Name: B, dtype: int64
In [15]:
"""
Se l'ipotesi che X e Y siamo correlati da una legge lineare
del tipo Y=M*X+Q, l'oggetto LinearRegression permette di individuarne 
le proprietà
"""
lm=LinearRegression()
lm.fit(X,Y)
Out[15]:
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
In [17]:
X
Out[17]:
A
0 1.0
1 3.0
2 5.0
3 6.0
4 8.0
In [18]:
Y
Out[18]:
0    10
1    24
2    48
3    60
4    75
Name: B, dtype: int64
In [19]:
"""
Yhat ora contiene la "predizione"
sui valori assunti in base alla 
regressione lineare
"""
Yhat=lm.predict(X)
In [20]:
Yhat
Out[20]:
array([ 8.4109589 , 27.84931507, 47.28767123, 57.00684932, 76.44520548])
In [21]:
"""
L'intercetta corrisponde al termine
noto Q della retta
"""
lm.intercept_
Out[21]:
-1.308219178082176
In [22]:
"""
Il coefficiente angolare corrisponde
all'M della retta di regressione
"""
lm.coef_
Out[22]:
array([9.71917808])
In [33]:
"""
IL grafico dei dati e della regressione
lineare
"""
sns.regplot(x="A",y="B",data=df)
plt.ylim(0,)
Out[33]:
(0, 92.88583440860216)
In [35]:
"""
La varianza trala previsione e i dati
è espressa dal grafico dei residui
"""
sns.residplot(df["A"],df["B"])
Out[35]:
<matplotlib.axes._subplots.AxesSubplot at 0x26ba8ea7a08>
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:

In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]: