4.2 Linear Regression Models
4.2 Linear Regression Models
4.2.1 Small Data Set
4.2.1 Small Data Set
In[]:=
session=StartExternalSession["Python"]
Out[]=
ExternalSessionObject
Test
In[]:=
5+6
Out[]=
11
In[]:=
import mglearn
from sklearn.model_selection import train_test_split
X, y = mglearn.datasets.make_wave(n_samples=60)
X_train, X_test, y_train, y_test= train_test_split(X, y,random_state=0)
from sklearn.model_selection import train_test_split
X, y = mglearn.datasets.make_wave(n_samples=60)
X_train, X_test, y_train, y_test= train_test_split(X, y,random_state=0)
In[]:=
X_train
Out[]=
NumericArray
In[]:=
Normal[%]
Out[]=
{{2.45592},{-1.89087},{2.19706},{-1.90905},{-2.60969},{2.81751},{-2.7213},{-2.79367},{0.5874},{-0.40833},{-2.46904},{0.0854066},{-1.89957},{-2.06403},{-1.97686},{-1.17455},{1.6508},{0.671117},{2.63699},{0.60669},{-1.72597},{1.71106},{-2.41397},{0.148539},{0.975134},{0.280262},{-1.8241},{1.1054},{2.70429},{1.99466},{-1.12973},{-0.26358},{-2.6515},{-0.801829},{-1.17232},{-2.16304},{-1.25263},{1.24844},{-0.359085},{2.53125},{0.591951},{-0.752759},{2.36896},{0.120408},{-1.44732}}
In[]:=
Xtrain=%;
In[]:=
X_test
Out[]=
NumericArray
In[]:=
Normal[%]
Out[]=
{{-1.80196},{1.85038},{-1.04802},{0.554487},{2.81946},{1.39196},{2.79379},{-2.72864},{-2.26777},{-1.24713},{-2.06389},{-2.87649},{0.645269},{-0.0289385},{2.69331}}
In[]:=
Xtest=%;
In[]:=
y_train
Out[]=
NumericArray
In[]:=
Normal[%]
Out[]=
{1.19813,-1.58832,1.2032,-1.27708,-0.83685,0.731414,-0.08137,-0.447131,0.652134,-1.25636,-1.72409,0.979232,-0.945758,-2.37365,-1.07676,-0.326911,0.250925,0.962506,1.01581,0.292629,-1.30838,0.799001,-0.913907,0.261344,0.400123,0.239382,-1.54665,0.812638,0.500159,1.07384,-0.025655,-0.385754,-0.701173,0.13369,-0.196128,-0.752409,-0.746469,0.449716,-0.934165,0.826142,1.17396,-1.18073,1.28948,0.77614,-0.751506}
In[]:=
ytrain=%;
In[]:=
y_test
Out[]=
NumericArray
In[]:=
Normal[%]
Out[]=
{-1.11948,0.381098,-0.491317,0.658232,1.39516,0.137729,0.950818,-1.03732,-1.71132,-0.178514,-1.32036,-0.486472,-0.721426,-0.323096,0.709459}
In[]:=
ytest=%;
In[]:=
training=Map[Flatten[#,1]&,Transpose[Join[{Xtrain,ytrain}]]];
In[]:=
test=Map[Flatten[#,1]&,Transpose[Join[{Xtest,ytest}]]];
In[]:=
p0=ListPlot[{training,test},PlotStyle{Green,Red},FrameTrue,AxesNone,PlotMarkers{Automatic,Medium},AspectRatio1]
Out[]=
In[]:=
lm=LinearModelFit[training,x,x];
In[]:=
model=lm//Normal
Out[]=
-0.0171112+0.441537x
In[]:=
lm[0]
Out[]=
-0.0171112
In[]:=
model/.x0
Out[]=
-0.0171112
In[]:=
datatraining=Flatten[Xtrain]Flatten[ytrain];
In[]:=
plm=Predict[datatraining,Method"LinearRegression"]
Out[]=
PredictorFunction
In[]:=
plm[0]
Out[]=
-0.0162241
In[]:=
plm[1]-plm[0]
Out[]=
0.441293
In[]:=
Information[plm,"Function"]
Out[]=
-0.0162241+0.441293#1&
In[]:=
from sklearn.linear_model import LinearRegression
lr=LinearRegression().fit(X_train,y_train)
lr=LinearRegression().fit(X_train,y_train)
In[]:=
print(lr.coef_)
[0.44153666]
In[]:=
print(lr.intercept_)
-0.01711124414733381
In[]:=
po=lr.predict([[0.1]])
po
po
Out[]=
NumericArray
In[]:=
Normal[%]
Out[]=
{0.0270424}
In[]:=
s=%;
In[]:=
lm[0.1]First[s]
Out[]=
True
In[]:=
Show[{p0,Plot[model,{x,-3,3}]}]
Out[]=
In[]:=
print("Training set score: {:.2f}".format(lr.score(X_train, y_train)))
print("Test set score: {:.2f}".format(lr.score(X_test, y_test)))
print("Test set score: {:.2f}".format(lr.score(X_test, y_test)))
4.2.2 Generalization of the Ordinary Least Square (OLS)
4.2.2 Generalization of the Ordinary Least Square (OLS)
In[]:=
import mglearn
import numpy as np
from sklearn.model_selection import train_test_split
X, y = mglearn.datasets.load_extended_boston()
X_train, X_test, y_train, y_test= train_test_split(X, y,random_state=0)
import numpy as np
from sklearn.model_selection import train_test_split
X, y = mglearn.datasets.load_extended_boston()
X_train, X_test, y_train, y_test= train_test_split(X, y,random_state=0)
In[]:=
X_train
In[]:=
np.savetxt('D:\\daTaXtrain.txt',X_train,fmt='%.5e')
In[]:=
np.savetxt('D:\\daTaXtest.txt',X_test,fmt='%.5e')
In[]:=
np.savetxt('D:\\daTaytrain.txt',y_train,fmt='%.5e')
In[]:=
np.savetxt('D:\\daTaytest.txt',y_test,fmt='%.5e')
In[]:=
from sklearn.linear_model import LinearRegression
lr=LinearRegression().fit(X_train,y_train)
lr=LinearRegression().fit(X_train,y_train)
In[]:=
lr.coef_
In[]:=
lr.intercept_
In[]:=
print("Training set score: {:.2f}".format(lr.score(X_train, y_train)))
print("Test set score: {:.2f}".format(lr.score(X_test, y_test)))
print("Test set score: {:.2f}".format(lr.score(X_test, y_test)))
4.2.3 Ridge Regression
4.2.3 Ridge Regression
In[]:=
from sklearn.linear_model import Ridge
ridge=Ridge().fit(X_train,y_train)
ridge=Ridge().fit(X_train,y_train)
In[]:=
ridge.coef_
In[]:=
ridge.intercept_
In[]:=
print("Training set score: {:.2f}".format(ridge.score(X_train, y_train)))
print("Test set score: {:.2f}".format(ridge.score(X_test, y_test)))
print("Test set score: {:.2f}".format(ridge.score(X_test, y_test)))
In[]:=
from sklearn.linear_model import Ridge
ridge10=Ridge(alpha=10).fit(X_train,y_train)
ridge10=Ridge(alpha=10).fit(X_train,y_train)
In[]:=
ridge10.coef_
In[]:=
ridge10.intercept_
ridge10.intercept_
In[]:=
print("Training set score: {:.2f}".format(ridge10.score(X_train, y_train)))
print("Test set score: {:.2f}".format(ridge10.score(X_test, y_test)))
print("Test set score: {:.2f}".format(ridge10.score(X_test, y_test)))
4.2.4 Lasso Regression
4.2.4 Lasso Regression
In[]:=
from sklearn.linear_model import Lasso
In[]:=
lasso=Lasso().fit(X_train,y_train)
In[]:=
print("Training set score: {:.2f}".format(lasso.score(X_train, y_train)))
print("Test set score: {:.2f}".format(lasso.score(X_test, y_test)))
print("Test set score: {:.2f}".format(lasso.score(X_test, y_test)))
In[]:=
lasso=Lasso(alpha=0.01,max_iter=100000).fit(X_train,y_train)
In[]:=
print("Training set score: {:.2f}".format(lasso.score(X_train, y_train)))
print("Test set score: {:.2f}".format(lasso.score(X_test, y_test)))
print("Test set score: {:.2f}".format(lasso.score(X_test, y_test)))
In[]:=
lasso.coef_
Let us see the coefficients.
4.2.5 Elastic Net Regression
4.2.5 Elastic Net Regression
In[]:=
import mglearn
X, y = mglearn.datasets.load_extended_boston()
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test= train_test_split(X,y,random_state=0)
from sklearn.linear_model import ElasticNetCV
regr=ElasticNetCV(cv=5,max_iter=10000, random_state=0).fit(X_train,y_train)
regr.coef_
X, y = mglearn.datasets.load_extended_boston()
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test= train_test_split(X,y,random_state=0)
from sklearn.linear_model import ElasticNetCV
regr=ElasticNetCV(cv=5,max_iter=10000, random_state=0).fit(X_train,y_train)
regr.coef_
In[]:=
regr.intercept_
In[]:=
print("Training set score: {:.2f}".format(regr.score(X_train, y_train)))
print("Test set score: {:.2f}".format(regr.score(X_test, y_test)))
print("Test set score: {:.2f}".format(regr.score(X_test, y_test)))
4.2.6 Stitching Images
4.2.6 Stitching Images
In[]:=
import math
import numpy as np
from skimage import transform as tf
from scipy.io import mmread
import numpy as np
from skimage import transform as tf
from scipy.io import mmread
In[]:=
src = mmread('cuki.mtx')
dst = mmread('caki.mtx')
dst = mmread('caki.mtx')
In[]:=
tform3=tf.ProjectiveTransform()
tform3.estimate(src, dst)
tform3.estimate(src, dst)
In[]:=
tform3.params
Then the transformation matrix,