# coding: utf-8
# In[15]:
import numpy as np
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
# In[16]:
n_dots = 200
X = np.linspace(-2*np.pi,2*np.pi,n_dots)
Y = np.sin(X) + 0.2* np.random.rand(n_dots) -0.1
X = X.reshape(-1,1)
Y = Y.reshape(-1,1)
# In[20]:
def poly_model(degree = 1):
poly = PolynomialFeatures(degree = degree)
lr = LinearRegression()
pipeline = Pipeline([
("poly",poly),
("lr",lr)
])
return pipeline
# In[21]:
from sklearn.metrics import mean_squared_error
# In[24]:
degrees = [2,3,5,10]
results = []
for i in degrees:
model = poly_model(degree=i)
model.fit(X,Y)
train_score = model.score(X,Y)
mse = mean_squared_error(Y,model.predict(X))
results.append({"model":model,"degree":i,"score":train_score,"mse":mse})
for r in results:
print("degree:{};train_score:{};mean_squared_score:{}".format(r["degree"],r["score"],r["mse"]))
# In[26]:
import matplotlib.pyplot as plt
# In[32]:
plt.figure(figsize=(12,6))
for i ,r in enumerate(results):
fig = plt.subplot(2,2,i+1)
plt.xlim(-8,8)
plt.title("LineRegression degree = {}".format(r["degree"]))
plt.scatter(X,Y,s = 5,c ='b',alpha=0.9)
plt.plot(X,r["model"].predict(X),'r-')