最近工作有这样一个需求:给定十几个时序序列,判断出这个序列的趋势(上升、下降或平稳)。最开始肯定是想到,直接线性拟合斜率大小来判断呗,但是业务部门的同事说他们不止看整体斜率还看局部特征什么的总之很感性。
于是我把每个点当一个维度直接跑分类模型(lr,多层感知机,svm,rf,gbdt,xgboost),结果还不错上升和下降的查准查全率都到80%(总共样本也就五六十个。。。)。
为了提高查准率查全率,又和业务部门同事沟通了一下,他们主要综合整体以及最后几个点的趋势来判断,所以处理整体斜率,还将最后几个点的拟合斜率作为特证,这样再去分类,果然查准率或查全率得到了提高。这充分说明了传统机器学习特征提取的重要性。。。逃
- 通常是求导,就是看前后2个数的差值。但为了避免毛刺,估计要滤波。这就得具体问题具体分析了,麻烦
- 看连续的差值是不是都是正或者负不就行了么
- 然后把 连续的差值 累加起来,看结果是正 还是 负。正就是 上升 负 就是下降。 这样怎么样?
- 先滤波,再比较。
- 二阶差分之后看正负值可以得到拐点,也就是趋势的拐点
- RC低通滤波 Y(n)=kY(n-1)+(1-k)X(n)
- 一阶差分 ΔY(n)=Y(n+1)-Y(n)
- 二阶差分 Δ(ΔY(n))=Y(n+2)-2Y(n+1)+Y(n)
- 不是取一个窗口,前1/3求平均,后1/3求平均,然后比大小判断趋势么
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119538.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...