线性回归算法--拟合正弦函数

线性回归算法--拟合正弦函数,第1张

目录
  • 步骤
  • 代码实现

本博客参考书籍:《scikit-learn机器学习:常用算法原理及编程实战》
本博客源码地址:码云

步骤
  1. 生成200个在 [ − 2 π , 2 π ] [-2\pi,2\pi] [2π,2π]区间内的正弦函数点,并给这些点添加一些噪声
  2. 使用reshape()函数转换数组形式
  3. 使用PolynomialFeatures和Pipeline创建一个多项式拟合模型
  4. 分别使用2、3、5、10阶多项式拟合数据集
  5. 可视化呈现训练结果
代码实现
# 生成具有正弦函数特征的200个点
n=200
x=np.linspace(-2*np.pi,2*np.pi,n)
y=np.sin(x)+np.random.rand(n)-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
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt

# 定义一个能够生成多项式模型的函数
def polynomial_model(degree=1):
	polynomial_feature=PolynomialFeatures(degree=degree,include_bias=False)
	linear_regression=LinearRegression(normalize=True)
	pipeline=Pipeline([('poly_feature',polynomial_feature),('linear_gree',linear_regression)])
	return pipeline

生成多个不同阶数的多项式模型,对模型进行训练

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)
    mean_error=mean_squared_error(y,model.predict(x))
    results.append({'模型':model,'训练评分':train_score,'均方根误差':mean_error,'模型阶数':d})

我们可以看到训练结果,对于拟合正弦函数这个问题,多项式阶数越高,训练评分越高,均方根误差越低

接下来我们将模型结果以可视化的形式呈现

import matplotlib
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['axes.unicode_minus'] = False

plt.subplots_adjust(hspace=0.5)
plt.figure(figsize=(12,6),dpi=200)
for i,r in enumerate(results):
    plt.subplot(2,2,i+1)
    plt.title('模型阶数:{}'.format(r['模型阶数']))
    plt.scatter(x,y,s=5,alpha=0.5)
    plt.plot(x,r['模型'].predict(x),'r--')

plt.show()

运行结果,我们发线10阶多项式几乎能够完全表现出正弦函数的图像特点

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/867824.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-12
下一篇2022-05-12

发表评论

登录后才能评论

评论列表(0条)

    保存