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

任务描述

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

实现细节

  • 产生一组随机数,取值在 [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 数据的预测曲线,可视化拟合效果

效果演示

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

  • 这是通过回归算法拟合出的曲线,在测试集上的精确度可以达到 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)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖仔会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值