欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sklearn学习之:(5)回归算法拟合正弦曲线

程序员文章站 2022-07-14 13:41:20
...

任务描述

  • 通过回归算法对正弦曲线(有噪声)进行拟合

实现细节

  • 产生一组随机数,取值在 [0,20] 之间作为 x_train (训练数据)
  • x_train 取其正弦函数为 y_
  • 由于在真正的数据集中,数据往往存在噪声,所以对 y_ 添加噪声作为 y_train (训练标签)
  • 同样的方式,我们用另外一个随机状态 randstate(3) 来产生 x_testy_test 作为测试数据和测试标签
  • 使用 sklearn 库建立回归模型(可以是任何常用的回归模型:决策树回归、svm、线性回归。。。等,按照自己的喜好来即可)
  • 通过回归模型对训练数据 x_train, x_test 进行拟合
  • x_test, y_test 数据来检测拟合的效果,得出评分
  • 最后我们把 x_test 输入模型,得出训练好的模型对于 x_test 数据的预测曲线,可视化拟合效果

效果演示

sklearn学习之:(5)回归算法拟合正弦曲线
sklearn学习之:(5)回归算法拟合正弦曲线

  • 这是 x_train, y_train 的训练数据曲线图

sklearn学习之:(5)回归算法拟合正弦曲线
sklearn学习之:(5)回归算法拟合正弦曲线

  • 这是通过回归算法拟合出的曲线,在测试集上的精确度可以达到 91%(决策树回归算法)

全部代码

# 导入模块
import numpy as np
import matplotlib.pyplot as plt
import math

# 制作训练集和测试集
'''
训练集和测试集都用随机数产生,都是80个(0,1)之间的随机数,
将他们乘以 20 让其位于(0,20)之间的随机数,作为 x 数据
'''

rgn = np.random.RandomState(1)   # 产生训练集 x_train 的随机状态
rgn2 = np.random.RandomState(2)  # 产生噪声 noise 的随机状态
rgn3 = np.random.RandomState(3)  # 产生测试集 x_test 的随机状态

x_ = 20 * rgn.rand(80,1)
x_train = np.sort(x_,axis=0)          # x_train作为训练集数据

y_ = np.sin(x_train)
y_train = 1/2 * rgn2.rand(80,1) + y   # 添加噪声后的 y 作为训练的标签

plt.figure(figsize=(10,3))
plt.scatter(x,y_noise)
plt.plot(x,y_noise,color='red')
plt.show()

from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor

# lr = LinearRegression()

x_ = 20 * rgn3.rand(80,1)
x_test = np.sort(x_,axis=0)

y_ = np.sin(x_test)
y_test = y_ + 1/2 * rgn2.rand(80,1)


reg = DecisionTreeRegressor()
reg.fit(x,y_noise)
score = reg.score(x_test,y_test)
y_predict = reg.predict(x_test)

plt.figure(figsize=(10,3))
plt.plot(x_test,y_test,color='orange',label='x_test,y_test')
plt.plot(x_train,y_train,color='red',label='x_train,y_train')
plt.plot(x_test,y_predict,color='black',label='x_test,y_predict')
plt.legend()
print(score)