​如何找到时序数据中线性的趋势(二)

简介: ​如何找到时序数据中线性的趋势(二)

多项式趋势

如果趋势不是线性的,我们可以尝试用多项式曲线来拟合它。但问题是:即使我们拟合的曲线是高次多项式,我们仍然可以用线性回归来找到它。

考虑这个二次表达式:

y = a + bx + cx²

我们要找的值是a, b, c,和他们都是线性的。忘记x的权重,我们看的是权重,b和c,所以线性回归——它只是发生,我们将不得不在多个维度做线性回归。

假设数据呈二次趋势。然后我们需要把X变换成二次形式:

pf = PolynomialFeatures(degree=2)
Xp = pf.fit_transform(X)
Xp
array([[1.000e+00, 0.000e+00, 0.000e+00],
        [1.000e+00, 1.000e+00, 1.000e+00],
        [1.000e+00, 2.000e+00, 4.000e+00],
        [1.000e+00, 3.000e+00, 9.000e+00],
        [1.000e+00, 4.000e+00, 1.600e+01],
        [1.000e+00, 5.000e+00, 2.500e+01],
        [1.000e+00, 6.000e+00, 3.600e+01],
...
        [1.000e+00, 9.600e+01, 9.216e+03],
        [1.000e+00, 9.700e+01, 9.409e+03],
        [1.000e+00, 9.800e+01, 9.604e+03],
        [1.000e+00, 9.900e+01, 9.801e+03]])

第一列是X的0次方。第二列是X,第三列是X的2次方。这就像上面显示的二次表达式(y = a + bx + cx)

现在我们将使用二次形式来拟合数据并生成二次趋势。用线性回归方法求出二次表达式的参数。

md2 = LinearRegression()
md2.fit(Xp, y)
trendp = md2.predict(Xp)
趋势是怎样的?
plt.plot(X, y)
plt.plot(X, trendp)
plt.legend(['data', 'polynomial trend'])
plt.show()

image.png

更接近了,不是吗?现在让我们看看非趋势数据:

detrpoly = [y[i] - trendp[i] for i in range(0, len(y))]
plt.plot(X, detrpoly)
plt.title('polynomially detrended data')
plt.show()

image.png

这显然更好。没有任何可以从视觉上看出的趋势。但是让我们看看数字是怎么说的:

r2 = r2_score(y, trendp)
rmse = np.sqrt(mean_squared_error(y, trendp))
print('r2:', r2)
print('rmse', rmse)
r2: 0.9343217231542871
rmse 406.5937924291518

与线性趋势相比,随着多项式趋势,R²曲线增大,RMSE减小。两者都是好的改变。两种均值多项式的拟合效果都优于线性拟合。

高阶多项式

你可以选择任意阶的多项式只要在这里给N赋不同的值:

pf = PolynomialFeatures(degree=N)

一般来说,对N使用较低的值。如果增加了N,发生的情况不太严重,则返回较小的值。

只有一个弯曲的曲线可以用二次函数来描述。有两个弯的曲线可以用三次函数来描述。等等。N-1弯需要一个N次幂的表达式。

如果N增加很多,最终你的“最佳拟合”曲线将开始跟随数据中的杂音,而不是拟合趋势。你已经超拟合了曲线,现在没有意义了。或者减少N,或者增加更多数据点。

这样我们将这个线性模型的数据去除(差值),使用剩余的数据进行时间序列的训练,可以得到更精确的结果

目录
相关文章
|
28天前
|
数据采集 SQL 数据可视化
数据处理的流程是什么?如何进行数据预处理?
本文深入浅出地讲解了数据处理的核心环节——数据预处理,剖析了原始数据常见的缺失、错误、重复、不一致等问题,并提供可落地的四步操作指南:诊断问题、制定规则、执行清洗、检验调整。强调“垃圾进,垃圾出”,预处理是数据可信分析的基石,并建议结合业务理解与工具(如FineDataLink)提升效率,助力从零起步的数据团队逐步实现规范化、自动化处理。
|
5月前
|
PyTorch 算法框架/工具 图计算
Python音频处理-频谱图实现
本教程介绍如何使用 PyTorch 提取音频特征,重点实现频谱图的生成。内容包括使用 torchaudio 进行频谱提取、频谱图维度解析、手动实现频谱计算步骤,并对两种方法的结果进行对比分析,展示其差异与实现细节。
624 0
|
4月前
|
存储 数据采集 人工智能
切块、清洗、烹饪:RAG知识库构建的三步曲
大语言模型明明已经喂了大量文档,为什么还是答非所问?就像米其林厨师需要精心处理食材,RAG系统也需要巧妙处理文档。从文本分块、清洗到结构化索引,这些不起眼的处理步骤决定了AI回答质量的上限。掌握这些技巧,让你的RAG系统从「路边摊」蜕变为「米其林餐厅」。
1269 3
|
6月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
553 0
|
10月前
|
微服务
什么是微服务?微服务的优缺点是什么?
微服务就是一个独立的职责单一的服务应用程序,一个模块 1.优点:松耦合,聚焦单一业务功能,无关开发语言,团队规模降低 , 扩展性好, 天然支持分库2.缺点:随着服务数量增加,管理复杂,部署复杂,服务器需要增多,服务通信和调用压力增大
|
11月前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
1621 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
存储 缓存 物联网
MNN推理框架将大模型放进移动端设备,并达到SOTA推理性能!
随着移动端(手机/平板等)算力、内存、磁盘空间的不断增长,在移动端部署大模型逐渐成为可能。在端侧运行大模型,可以有一系列好处:去除网络延迟,加快响应速度;降低算力成本,便于大规模应用;不需数据上传,保护用户稳私。
2426 13
MNN推理框架将大模型放进移动端设备,并达到SOTA推理性能!
|
机器学习/深度学习 人工智能 编解码
2024通义语音AI技术图景,大模型引领AI再进化(3)
2024通义语音AI技术图景,大模型引领AI再进化
|
网络安全
socket服务部署到服务端后启动失败Cannot assign requested address: bind 的总结
socket服务部署到服务端后启动失败Cannot assign requested address: bind 的总结
905 0