算法原理:线性回归算法、最小均方差、梯度下降算法参考:http://blog.kamidox.com/gradient-descent.html
里面非常详细地介绍了微积分基本运算法则、线性回归算法、梯度下降算法及改进。
a. 用线性回归方法拟合正弦函数
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
# 生成200个[-2pi,2pi]区间内的正弦函数上的点
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)
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
def polynomial_model(degree=1):
# degree表示多项式的阶数
polynomial_features = PolynomialFeatures(degree=degree,include_bias=False)
# normalize=True将特征归一化至[0,1]
linear_regression = LinearRegression(normalize=True)
pipeline = Pipeline([("polynomial_features",polynomial_features),("linear_regression",linear_regression)])
return pipeline
# 分别用2、3、5、10阶多项式来拟合数据集
# 用mean_squared_error计算均方根误差,均方根误差越小,说明模型拟合效果越好
from sklearn.metrics import mean_squared_error
degrees = [2,3,5,10]
results=[]
for d in degrees:
model = polynomial_model(degree=d)
model.fit(X,Y)
train_score = model.score(X,Y)
mse = mean_squared_error(Y,model.predict(X))
results.append({"model":model,"degree":d,"score":train_score,"mse":mse})
for r in results:
print("degree: {}; train_score: {}; m